Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Работа с темплейтами (http://forum.oszone.net/showthread.php?t=71835)

Strange_V 24-09-2006 13:52 488868

Работа с темплейтами
 
Как лучше организовать роботу с темплейтами?
Видел такие варианты:
1. Вместо переменный пишут %some_var%, потом реплейсом заменяют их на значения.
2. Пишут $some_var, и выводят с помощью eval.

И как реализовать такое:
темплейт
HTML код:

<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 нет, выйдет нехорошо… т.е. в идеальном варианте при их отсутствии второго рядка не должно быть вообще.
Легко написать
PHP код:

if ( isset ($read) and isset ($date_c) )
echo 
'<tr><td bgcolor="#cccccc">',$read,'<hr>',$date_c,'</td></tr>'

но это уже смешивание кода и дизайна…

mar 24-09-2006 14:23 488870

Цитата:

если существуют все переменные - все ок, но когда $read и $date_c нет, выйдет нехорошо… т.е. в идеальном варианте
для этого надо ввести понятие блока, который будет выводиться только при наличии информации.

А вообще в чем проблема - Вы собираетесь писать свой шаблонизатор, или спрашиваете, как работать с разными готовыми?

Vlad Drakula 24-09-2006 14:52 488877

Strange_V
а почему не использовать стандартный шаблонизатор, к примеру XSL ?

Strange_V 24-09-2006 19:46 488954

mar
Хочу написать сам. Это для гостевой, там всего то до 10 темплейтов.
Цитата:

надо ввести понятие блока
как? может пример какой-то...
Vlad Drakula
Боюсь стандартный мне слишком громаден, да и интересно сделать самому…

Может кто делал или где почитать?

mar 24-09-2006 19:51 488959

Strange_V
посмотри в качестве примера код соответствующего файла из библиотки phplib (не в smarty же посылать :))

Strange_V 27-09-2006 22:42 490511

mar
боюсь проще сразу повесится…, чем разобрать этот класс :wacko:

Если не сложно, напишите кто какие шаблонизаторы использовал (желательно с ссылками), попробую поковырять.
Но неужели все используют готовые (и сложные) решения?

Vlad Drakula 27-09-2006 22:57 490514

Strange_V
а какой смысл изобретать свой шаблонизатор когда для этого уже есть специальный(стандартный) шаблонный язык?

и при этом написан на С а не на PHP (работает достаточно быстро)

вот какой смысл???

mar 27-09-2006 23:17 490524

Strange_V
Vlad Drakula хочет сказать, что использует XML + XSLT + XSL аргументация-объяснения-советы-рекомендации - в упомянутой теме :)
я использовала phplib-овские пассивные шаблоны (потому, что они уже использовались в тех проектах, к которым я тогда подключилась) и продолжала их использовать до недавнего времени, поскольку они меня вполне устраивали. Последние пол-года работаю с активными шаблонами smarty (опять-таки, потому, что подключилась к крупному проекту, который живет на smarty). У smarty есть плюсы, но есть и набор минусов.
Из моих знакомых-друзей-коллег (кроме варианта, указанного Владом) были еще люди, использущие fastTemplates и php-templates из-за их быстродействия (Последнее, кстати, написано на C, так что работать должны реально очень быстро, но, етественно, из-за этого требуют специальной установки).

Цитата:

Но неужели все используют готовые (и сложные) решения?
так под сложные же системы :) Опять-таки, на моем примере видно, что так может сложиться исторически

benya 28-09-2006 13:00 490726

Strange_V,
Цитата:

Но неужели все используют готовые (и сложные) решения?
А почему бы и не использовать? Не такие то они уже и сложные, не заглядывайте к ним внутрь, а используйте просто методы.

Vlad Drakula,
Цитата:

а почему не использовать стандартный шаблонизатор, к примеру XSL ?
Агитатор ;)

Arrest 28-09-2006 15:06 490792

Вложений: 1
Strange_V
Можно выдрать из phpBB. Исходник - смотри прикрепленый файл. Посмотри как он работает и напиши свой! Как работать - там все в комментариях написано.

Igor_I 28-09-2006 21:36 490965

Про смешивание кода и дизайна на phpclub-е спорили старожилы, кажется в итоге решили, что без него никак. А стоит начать писать какие-то функции, так получаем php написанный на php :) Так смысл, если сам php и разрабатывался для использования вместе с html кодом. Можно, допустим, загнать таблицу в массив, а в потом его выводить при помощи foreach.
А вообще есть резон и писать велосипеды, и использовать сложные решения.

Strange_V 29-09-2006 00:08 491016

Vlad Drakula
Во первых, использую то что хотя б немного знаю (чего не могу сказать о XML + XSLT + XSL) т.е. PHP+HTML.
Во вторых, отвечу цитатой с твоего же поста
Цитата:

2) XSLT это стандарт W3C а FastTemplate и php-templates нет... по этому это более перспективный выбор особенно в крупных проектах... т.к. позволяет полностью разграничить функции функциональности и представления...
возможно и незачем изобретать велосипед, но есть же и другие варианты (каждый делает свой выбор).

mar
Толковое разъяснение, спасибо.

benya
Может и правильно на счет не заглядывайте к ним внутрь. Хотя я так и не люблю… но наверное придется.

Arrest
Спасибо, уже смотрю.
жаль комменты не русские

Igor_I
Цитата:

А стоит начать писать какие-то функции, так получаем php написанный на php
пришел к тому же…

Arrest 29-09-2006 14:46 491212

Strange_V
Кстати есть совсем простая система темплейтов(даже и не темплейтов, а вывод от PHP):
Значится у нас есть некий index.php:
PHP код:

<?php
//много кода
$page_title="Шаблоны на php";
$page_text="Много текста, хорошего и разного.";
?>

Надо заставить его выводить $page_title в заголовке страницы, а $page_text в теле, причем сделать это непременно надо с помощью темплейтов.
Для этого создаем файлик index_design.php, кидаем его в ту же папку где index.php, и в него(index_design.php) пишем:
PHP код:

<html>
<head>
<title><?=$page_title?></title>
</head>
<body>
<?=$page_text?>
</body>
</html>

А в index.php в конец перед ?> пишем:
PHP код:

include("index_design.php"); 

Что нам выдаст index.php? А вот что:
Код:

<html>
<head>
<title>Шаблоны на php</title>
</head>
<body>
Много текста, хорошего и разного.
</body>
</html>

И не надо мороки с регулярными выражениями.

Что-то очень много написал. Ну ладно.

Vlad Drakula 29-09-2006 21:26 491393

Strange_V
1) у меня был коллега который не очень хорошо знал XSL... и вместо него использовал JS... в итоге весь его код был викинут... и заменен на XSL...
2) был опыт написания шаблинизатора который на XML лейаут натянет скин... по разработывали... а потом выкинули и стали использовать стандартный XSL...
3) XSL позволит легко интегрировать разные XML в системму, к примеру ленты новостей в RSS.

benya 30-09-2006 21:38 491707

Vlad Drakula,
Цитата:

3) XSL позволит легко интегрировать разные XML в системму, к примеру ленты новостей в RSS.
Ну, вобщем то и без XSL это можно сделать почти также легко ;)

Vlad Drakula 30-09-2006 22:11 491715

benya
Цитата:

Ну, вобщем то и без XSL это можно сделать почти также легко
прошу привести код в по дтверждение!

mar 01-10-2006 00:06 491747

Цитата:

benya
Цитата:
Ну, вобщем то и без XSL это можно сделать почти также легко
Vlad Drakula
прошу привести код в по дтверждение!
а также принести сюда клей и ножницы и вручить их Владу, тк тема сейчас плавно перетечет в кусок этой =)

Strange_V 01-10-2006 18:07 491973

Vlad Drakula
Цитата:

Агитатор
Arrest
Знаю, не подходит. Нужны блоки.

mar
Цитата:

а также принести сюда клей и ножницы и вручить их Владу, тк тема сейчас плавно перетечет в кусок этой
:yes:

Немного переделал парсер с miniBB (сделал поддержку блоков). Результат не ахти, но в принципе мне подходит (и не надо бросать в меня камнями, что на XSL выйдет много лучше и быстрее :tomato2: )
про скорость, при небольшом темплейте, скрипт крутится около 250 раз в секунду (Cel 1.7, 256MB, WinXP)

benya 02-10-2006 15:59 492297

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 492447

benya
а если чтонибуть по сложне... например с группировкой по дню недели?

benya 03-10-2006 16:51 492799

Vlad Drakula,
;)
1) День недели представлен в виде "Mon, 18 Sep 2006 14:55:57 +0300" нужно разбирать в любом случае, легче на XSL не будет.
2) Дописать кусочек и складывать все, к примеру, в хэш - ключом которого будет день недели, потом всю структуру распечатать вот и будет у нас все отгруппировано ;)
3) Группировка в XSL 1.0 не такая уж и простая. Особенно если не по одному ключу, а больше 1-го.

Vlad Drakula 04-10-2006 00:04 492971

benya
Цитата:

Группировка в XSL 1.0 не такая уж и простая. Особенно если не по одному ключу, а больше 1-го.
там всего около 3х строк для этого нужно...

Цитата:

1) День недели представлен в виде "Mon, 18 Sep 2006 14:55:57 +0300" нужно разбирать в любом случае, легче на XSL не будет.
не легче но и не сложнее...


Время: 17:12.

Время: 17:12.
© OSzone.net 2001-