Показать полную графическую версию : Работа с темплейтами
Strange_V
24-09-2006, 13:52
Как лучше организовать роботу с темплейтами?
Видел такие варианты:
1. Вместо переменный пишут %some_var%, потом реплейсом заменяют их на значения.
2. Пишут $some_var, и выводят с помощью eval.
И как реализовать такое:
темплейт
<table>
<tr><td bgcolor="#eeeeee">$name<br>$text<br>$date</td></tr>
<tr><td bgcolor="#cccccc">$read<hr>$date_c</td></tr>
</table> если существуют все переменные - все ок, но когда $read и $date_c нет, выйдет нехорошо… т.е. в идеальном варианте при их отсутствии второго рядка не должно быть вообще.
Легко написать
if ( isset ($read) and isset ($date_c) )
echo '<tr><td bgcolor="#cccccc">',$read,'<hr>',$date_c,'</td></tr>'; но это уже смешивание кода и дизайна…
если существуют все переменные - все ок, но когда $read и $date_c нет, выйдет нехорошо… т.е. в идеальном варианте
для этого надо ввести понятие блока, который будет выводиться только при наличии информации.
А вообще в чем проблема - Вы собираетесь писать свой шаблонизатор, или спрашиваете, как работать с разными готовыми?
Vlad Drakula
24-09-2006, 14:52
Strange_V
а почему не использовать стандартный шаблонизатор, к примеру XSL ?
Strange_V
24-09-2006, 19:46
mar
Хочу написать сам. Это для гостевой, там всего то до 10 темплейтов.
надо ввести понятие блока
как? может пример какой-то...
Vlad Drakula
Боюсь стандартный мне слишком громаден, да и интересно сделать самому…
Может кто делал или где почитать?
Strange_V
посмотри в качестве примера код соответствующего файла из библиотки phplib (http://phplib.sourceforge.net/) (не в smarty же посылать :))
Strange_V
27-09-2006, 22:42
mar
боюсь проще сразу повесится…, чем разобрать этот класс :wacko:
Если не сложно, напишите кто какие шаблонизаторы использовал (желательно с ссылками), попробую поковырять.
Но неужели все используют готовые (и сложные) решения?
Vlad Drakula
27-09-2006, 22:57
Strange_V
а какой смысл изобретать свой шаблонизатор когда для этого уже есть специальный(стандартный) шаблонный язык?
и при этом написан на С а не на PHP (работает достаточно быстро)
вот какой смысл???
Strange_V
Vlad Drakula хочет сказать, что использует XML + XSLT + XSL (http://www.forum.oszone.net/thread-54773.html) аргументация-объяснения-советы-рекомендации - в упомянутой теме :)
я использовала phplib-овские пассивные шаблоны (потому, что они уже использовались в тех проектах, к которым я тогда подключилась) и продолжала их использовать до недавнего времени, поскольку они меня вполне устраивали. Последние пол-года работаю с активными шаблонами smarty (опять-таки, потому, что подключилась к крупному проекту, который живет на smarty). У smarty есть плюсы, но есть и набор минусов.
Из моих знакомых-друзей-коллег (кроме варианта, указанного Владом) были еще люди, использущие fastTemplates и php-templates из-за их быстродействия (Последнее, кстати, написано на C, так что работать должны реально очень быстро, но, етественно, из-за этого требуют специальной установки).
Но неужели все используют готовые (и сложные) решения?
так под сложные же системы :) Опять-таки, на моем примере видно, что так может сложиться исторически
Strange_V,
Но неужели все используют готовые (и сложные) решения?
А почему бы и не использовать? Не такие то они уже и сложные, не заглядывайте к ним внутрь, а используйте просто методы.
Vlad Drakula,
а почему не использовать стандартный шаблонизатор, к примеру XSL ?
Агитатор ;)
Strange_V
Можно выдрать из phpBB. Исходник - смотри прикрепленый файл. Посмотри как он работает и напиши свой! Как работать - там все в комментариях написано.
Про смешивание кода и дизайна на phpclub-е спорили старожилы, кажется в итоге решили, что без него никак. А стоит начать писать какие-то функции, так получаем php написанный на php :) Так смысл, если сам php и разрабатывался для использования вместе с html кодом. Можно, допустим, загнать таблицу в массив, а в потом его выводить при помощи foreach.
А вообще есть резон и писать велосипеды, и использовать сложные решения.
Strange_V
29-09-2006, 00:08
Vlad Drakula
Во первых, использую то что хотя б немного знаю (чего не могу сказать о XML + XSLT + XSL) т.е. PHP+HTML.
Во вторых, отвечу цитатой с твоего же поста
2) XSLT это стандарт W3C а FastTemplate и php-templates нет... по этому это более перспективный выбор особенно в крупных проектах... т.к. позволяет полностью разграничить функции функциональности и представления... возможно и незачем изобретать велосипед, но есть же и другие варианты (каждый делает свой выбор).
mar
Толковое разъяснение, спасибо.
benya
Может и правильно на счет не заглядывайте к ним внутрь. Хотя я так и не люблю… но наверное придется.
Arrest
Спасибо, уже смотрю.
жаль комменты не русские
Igor_I
А стоит начать писать какие-то функции, так получаем php написанный на php пришел к тому же…
Strange_V
Кстати есть совсем простая система темплейтов(даже и не темплейтов, а вывод от PHP):
Значится у нас есть некий index.php:
<?php
//много кода
$page_title="Шаблоны на php";
$page_text="Много текста, хорошего и разного.";
?>
Надо заставить его выводить $page_title в заголовке страницы, а $page_text в теле, причем сделать это непременно надо с помощью темплейтов.
Для этого создаем файлик index_design.php, кидаем его в ту же папку где index.php, и в него(index_design.php) пишем:
<html>
<head>
<title><?=$page_title?></title>
</head>
<body>
<?=$page_text?>
</body>
</html>
А в index.php в конец перед ?> пишем:
include("index_design.php");
Что нам выдаст index.php? А вот что:
<html>
<head>
<title>Шаблоны на php</title>
</head>
<body>
Много текста, хорошего и разного.
</body>
</html>
И не надо мороки с регулярными выражениями.
Что-то очень много написал. Ну ладно.
Vlad Drakula
29-09-2006, 21:26
Strange_V
1) у меня был коллега который не очень хорошо знал XSL... и вместо него использовал JS... в итоге весь его код был викинут... и заменен на XSL...
2) был опыт написания шаблинизатора который на XML лейаут натянет скин... по разработывали... а потом выкинули и стали использовать стандартный XSL...
3) XSL позволит легко интегрировать разные XML в системму, к примеру ленты новостей в RSS.
Vlad Drakula,
3) XSL позволит легко интегрировать разные XML в системму, к примеру ленты новостей в RSS.
Ну, вобщем то и без XSL это можно сделать почти также легко ;)
Vlad Drakula
30-09-2006, 22:11
benya
Ну, вобщем то и без XSL это можно сделать почти также легко
прошу привести код в по дтверждение!
benya
Цитата:
Ну, вобщем то и без XSL это можно сделать почти также легко
Vlad Drakula
прошу привести код в по дтверждение!
а также принести сюда клей и ножницы и вручить их Владу, тк тема сейчас плавно перетечет в кусок этой (http://www.forum.oszone.net/thread-54773.html) =)
Strange_V
01-10-2006, 18:07
Vlad Drakula
Агитатор
Arrest
Знаю, не подходит. Нужны блоки.
mar
а также принести сюда клей и ножницы и вручить их Владу, тк тема сейчас плавно перетечет в кусок этой :yes:
Немного переделал парсер с miniBB (сделал поддержку блоков). Результат не ахти, но в принципе мне подходит (и не надо бросать в меня камнями, что на XSL выйдет много лучше и быстрее :tomato2: )
про скорость, при небольшом темплейте, скрипт крутится около 250 раз в секунду (Cel 1.7, 256MB, WinXP)
Vlad Drakula,
Ну примерно так... ;))
#!/usr/bin/perl
use XML::LibXML;
print "Content-type:text/html\n\n";
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file("news.xml");
my @items = $doc->getElementsByTagName("item");
for my $item (@items) {
my @node = $item->childNodes;
print "<b>".$node[1]->textContent."</b><br>\n";
print $node[7]->textContent."<br>\n";
};
А на XSL где-то так (||apply-templates):
<xsl:template match="/">
<xsl:for-each select="document('news.xml')/item">
<b><xsl:value-of select="title"/></b><br/>
<xsl:value-of select="description"/><br/>
</xsl:for-each>
</xsl:template>
Ну наверное если сайт весь на XSL, то проще последний пример. А если нет, то нечего городить огород, можно и так (см. 1 прим.)
Vlad Drakula
02-10-2006, 23:32
benya
а если чтонибуть по сложне... например с группировкой по дню недели?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.