Alexander
Новичок
Дата регистрации:
05.04.2013 12:15:30
Сообщений: 13
Всем привет!
Скажите, пожалуйста, как такое можно реализовать...
В общем, в странице (шаблоне) есть специальный блок.
<div id="repeat">
...
</div>
И есть цикл, который выводит информацию из БД. Нужно повторить этот блок, чтобы вставить в него выводимую в цикле информацию.
То есть чтобы скрипт брал этот блок, заполнял его полученной информацией, затем "копировал" его и вставлял другую информацию. В результате должно получиться что-то вроде этого:
<div id="repeat">
Текст первой записи
</div>
<div id="repeat">
Текст второй записи
</div>
Вроде понятно объяснил
Как такое можно реализовать? Сам не могу понять, как это можно сделать. Пробовал находить "открывающий" блок, т.е. <div id="repeat"> через preg_match, затем "закрывающий", и на этом ступор... Как "скопировать" содержимое блоков, как потом вставить их дальше, чтобы в итоге получилось то, о чем я говорил выше...
Гуру, вся надежда только на вас!
fabrigas201
Продвинутый
Дата регистрации:
20.01.2012 13:08:31
Сообщений: 59
Если я вас правильно понял вам нужно что-то подобно блокам справа.
Для этого нужно в создать базу, например id и данные для блока, всего два поля, но не важно. Потом формируем запрос на выборку всех данных, формируем массив, и в цикле перебираем массив подставляя данные в блок.
Примерно вот так:
<?php
$sql = "SELECT * FROM table";
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($res)):
?>
<div>
<?php echo $row['data'];?>
</div>
<?php
endwhile;
?>
Возможно данный вариант работать не будет, так как не проверял, но думайте в этом направлении.
ac-40-6.0
Эксперт
Дата регистрации:
29.06.2012 02:02:06
Сообщений: 88
Проще и дешевле в самом цикле создавать новые блоки с выводом на страницу.
Ну к примеру:
for($i=0; $i<=5; $i++){
echo '<div id=', $i, '....>содержимое блока</div>;}
Конечно можно пойти и более длинным путем, строковыми функциями изъять код между тегами и подставлять туда нужные строки, но гемороя очень много. Зато это того стоит.
Alexander
Новичок
Дата регистрации:
05.04.2013 12:15:30
Сообщений: 13
fabrigas201, нет, это не то... Страница - есть шаблон, как я и говорил, т.е. шаблонизатор должен выдернуть содержимое нужного блока, а потом вставлять в него данные, копировав его (содержимое блока) при этом столько раз, сколько найдено совпадений при выводе из БД. Вот я о чем.
ac-40-6.0, можно поподробнее? Похоже это именно то, что нужно... Хотя бы направьте в нужное направление, пожалуйста
Можно конечно в самом шаблоне PHP скрипт написать, но это не то, чего я хочу добиться в итоге...
UPD 1:
Текст между тэгами я нахожу. Вот только как их повторить и загнать в страницу на выходе?
fabrigas201
Продвинутый
Дата регистрации:
20.01.2012 13:08:31
Сообщений: 59
Это два одинаковых варианта с разным подходом
Alexander
Новичок
Дата регистрации:
05.04.2013 12:15:30
Сообщений: 13
fabrigas201, я понимаю, но я не о приведенных примерах кода.
Повторюсь, я получаю код между блоками, я могу вставить в них нужную информацию, но не могу повторить полученный код, чтобы на выходе получился адекватный HTML.
Извините, что так странно изъясняюсь, просто запарился уже, третьи сутки сижу над этим кодом, голова пухнет просто...
UPD:
Телепаты! Ау!
Получилось повторить блоки, одно но - они выводятся сверху страницы, т.е. не там, где нужно.
Можно как-нибудь вставить результат после определенного слова? Например того-же самого "</div>"?
ac-40-6.0
Эксперт
Дата регистрации:
29.06.2012 02:02:06
Сообщений: 88
Начинаем геморрой:
//читаем шаблон и заносим его в переменную $string
//ищем нужный блок
//можно через рег.выражение, но так надежней
$str = strstr($string, '<div id="repeat">');
$rep = strstr($str, '</div>');
$rep = substr($rep, 6);
$str = str_replace($rep, "", $str);
//теперь переменная $str содержит код блока
//создаем массив текста для замены
$pat = array("{bloc1}", "{bloc2"}....);
//теперь массив переменных на которые будем менять
$rep = array($b1, $b2...);
//и массив для записи
$tmp = array();
//начинаем цикл
while(условие){
//во временный массив заносим вновь созданные блоки
$tmp[] = str_replace($pat, $rep, $str);
}
//преобразуем массив обратно в строку
//плюс такого способа в сортировке, то есть можно
//расположить блоки в любом порядке, что удобно для пользователя
$str = implode('', $tmp);
//выводим строку в шаблон
для позиционирования блоков могу посоветовать в шаблоне задать стиль блока и в цикле менять стиль height на нужный.
ac-40-6.0
Эксперт
Дата регистрации:
29.06.2012 02:02:06
Сообщений: 88
Код сырой и даже очень, но для задания направления мысли сойдет. Если что обращайся.
Alexander
Новичок
Дата регистрации:
05.04.2013 12:15:30
Сообщений: 13
ac-40-6.0, спасибо Вам большое, добрый человек!
ac-40-6.0
Эксперт
Дата регистрации:
29.06.2012 02:02:06
Сообщений: 88
Кто сказал что я добрый???
Как работает?