[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Насколько корректен данный код?
TranceIT
Для понимания общей картины предположим что у нас есть блог, на главной странице которого выводятся сокращенные посты. У всех сокращенных постов одинаковый шаблон. Насколько правильным является следующий код?


$small_posts // Многомерный массив
...
ob_start();
foreach ($small_posts as $post) {
include 'template.tpl'; // В нем уже выводится массив $post
}
$content = ob_get_contents();
ob_end_clean();

echo $content;



Один человек увидев эту запись послал меня в Zend. Фреймворки и сторонние скрипты я не перевариваю, свое дерьмо, как говорится, малиной пахнет.



Спустя 4 минуты, 22 секунды (3.10.2011 - 23:46) Winston написал(а):
Можно и без цикла можно обойтись :)

$small_posts //  Многомерный массив
...
ob_start();
extract($small_posts, EXTR_SKIP);
include 'template.tpl'; // В нем уже выводится массив $post

$content = ob_get_contents();
ob_end_clean();

echo $content;

Спустя 8 минут, 51 секунда (3.10.2011 - 23:55) TranceIT написал(а):
А если $small_posts не ассоциативный?

Допустим из базы берется вот так:

$query = "SELECT * FROM table LIMIT 0, 10";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result))
$small_posts[] = $row;

Спустя 6 минут, 19 секунд (4.10.2011 - 00:01) Winston написал(а):
Цитата (TranceIT @ 3.10.2011 - 23:55)
А если $small_posts не ассоциативный?

Ну тогда foreach лучше походу.
Мне кажется, что не нужно именно здесь цикл пихать, а один раз подключить шаблон.
$small_posts //  Многомерный массив
...
ob_start();
include 'template.tpl'; // В нем уже выводится массив $post
$content = ob_get_contents();
ob_end_clean();

echo $content;

А в шаблоне уже писать цикл
<table>
<?php foreach ($small_posts as $post) : ?>
<tr>
<
td>
<?php echo $post['field'] ?>
</td>
</
tr>
<?php endforeach; ?>
</table>

Например в джумле так и делается.

Спустя 22 минуты, 27 секунд (4.10.2011 - 00:23) TranceIT написал(а):
Я стараюсь не впихивать циклы в верстку.
В общем спасибо, о корректности кода вопрос решен. Пошлю человека в буферизацию.

Спустя 3 минуты, 33 секунды (4.10.2011 - 00:27) Winston написал(а):
Цитата (TranceIT @ 4.10.2011 - 00:23)
Я стараюсь не впихивать циклы в верстку

Большинство так и делает, здесь нету ничего противозаконного smile.gif

Спустя 3 минуты, 55 секунд (4.10.2011 - 00:31) imbalance_hero написал(а):
TranceIT
В ирбис загляни, не первый день же у нас.
В цикле ты КАЖДЫЙ РАЗ инклюдишь страницу, что есть ПЛОХО! Ты должен данные брать лишь 1 раз в виде парсера, допустим file_get_contents(), а потом там же и обрабатывать.
Функция parseTpl в уроках ирбиса.

Спустя 41 минута, 55 секунд (4.10.2011 - 01:13) TranceIT написал(а):
imbalance_hero
Спасибо.

Вот к чему я пришел:


$tpl = file_get_contents(SKINS . 'show.tpl');

ob_start();
foreach ($array as $value) {
eval(' ?>' . $tpl . '<?php '); // $value в самом шаблоне
}
$content = ob_get_contents();
ob_end_clean();
echo $content;

Спустя 2 минуты, 28 секунд (4.10.2011 - 01:15) Winston написал(а):
Цитата (TranceIT @ 4.10.2011 - 01:13)
Вот к чему я пришел

Да ну, зачем изврат такой ? blink.gif

Спустя 8 минут, 14 секунд (4.10.2011 - 01:23) TranceIT написал(а):
Цитата (Winston @ 3.10.2011 - 22:15)
Да ну, зачем изврат такой ?

Ну как зачем...
1) Чтобы не инклудить много раз один шаблон.
2) Вынести циклы из верстки.

Спустя 5 минут, 9 секунд (4.10.2011 - 01:29) Winston написал(а):
Цитата (TranceIT @ 4.10.2011 - 01:23)
Ну как зачем...
1) Чтобы не инклудить много раз один шаблон.
2) Вынести циклы из верстки.

Ну это твое право. Я бы делал так как во втором своем посте отписал...

Спустя 9 минут, 33 секунды (4.10.2011 - 01:38) TranceIT написал(а):
Интересно выслушать и другие мнения.
Напомню, что количество выводимых записей нам неизвестно и массив не ассоциативный.

Спустя 19 минут, 34 секунды (4.10.2011 - 01:58) imbalance_hero написал(а):
Winston
Потому что пихать php функции в ВИД, это ОДИН из видов шаблонизации, а использовать так, как выше - это ВТОРОЙ вид шаблонизации, есть и другие smile.gif

Спустя 6 часов, 8 минут, 5 секунд (4.10.2011 - 08:06) linker написал(а):
Собираешь из кучи шаблонов результирующий html, кэшируешь и потом тупо его выводишь через echo.


_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.