WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Работа с шаблонами


Прислал: Евгений А. Кучеров [ 28.01.2002 @ 21:26 ]
Раздел:: [ Статьи по PHP ]


Фуух, наконец-то я решил проблему шаблонов :). Я перепробовал многие классы, такие как, FastTemplate, IT[X] - IntegratedTemplate (PEAR), но большинство из них, либо слишком громоздкие (IT), либо с ошибками, например у меня не получилось использовать динамические шаблоны в FastTemplate. Мой класс, естесственно, не является сразу решением многих проблем шаблонов, но хотя бы, избавляет от некоторых из них, т.е. отделение кода от представления, что является очень важным для хотя бы более менее крупного сайта. Мне кажется приводить здесь весь класс не стоит, т.к. Вы можете его скачать и посмотреть, а здесь, я лишь привожу его описание с комментариями и примерами. Итак,

1. Описание класса.

1.1. Создание объекта. При создании нового экземпляра класса нужно указать директорию, где хранятся файлы-шаблоны. Можно указывать как относительный путь, так и абсолютный. Расширение этих файлов должно быть .tpl.

$tpl = new Template("./templates");

1.2. Загрузка шаблонов. Перед тем, как использовать шаблоны по назначению, их сначала необходимо загрузить (в память). Если требуется указать сразу несколько шаблонов, то здесь используется запятая. Для того, чтобы проверить, загружен ли шаблон, используется функция isLoaded($name). Для удаления шаблона (из памяти!) - unload($name). Где $name - имя шаблона.

$tpl->load("main");
$tpl->load("banner,counter,menu");


Примечание: в более новой версии, подгружать шаблоны при старте скрипта необязательно, т.к. ф-я get проверяет загружен ли шаблон, если нет, то загружает. Это, на мой взгляд, лучше, т.к. загрузка лишних шаблонов при старте скрипта, понижает его скорость.

1.3. Получение содержимого шаблона. Для его извлечения используется функция get($name), где $name - имя шаблона (без указания расширения, т.е. без .tpl).

2. Примеры.

2.1. Простой текст. Функции.

Шаблон.
text.tpl:
Hello world
Скрипт.

print $tpl->get("text"); 

или например

function message($str) {
   print 
$str."<br />";
}
eval(
"message("".$tpl->get("text")."");"); 

В браузере в обоих случаях появится:

Hello world

2.2. Использование переменных.

Шаблон.
vars.tpl:
Welcome $name. now is $time<br />
Скрипт.
$name "Your name";
$time date("H:i");
eval(
"print "".$tpl->get("vars")."";");
$name "My name";
eval(
"$str = "".$tpl->get("vars")."";");
$str .= " another text";
print 
$str;

Результат:

Welcome Your name. Now is 22:30
Welcome My Name. Now is 22:30 another text

2.3. Таблицы. Вывод результатов.

Шаблоны.
table.tpl:
<table width="100" cellspacing="0" cellpadding="0" border="1">
<tr>
<td>Число</td>
<td>Квадрат</td>
</tr>
$rows
</table>

table_row.tpl:
<tr>
<td>$number</td>
<td>$square</td>
</tr>

Скрипт.
$rows "";
for(
$i=0;$i<10;$i++) {
   
$number $i;
   
$square $i*$i;
   eval(
"$rows .= "".$tpl->get("table_row")."";");
}
eval(
"print "".$tpl->get("table")."";");


Результат будет следующим:

Число Квадрат
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81

2.4. Применение буферизации.

Представляете, если уже есть большие участки кода (php/html), где идет прямой вывод в бразуер, т.е. такие функции, как print/printf/echo. Не переписывать же, например, целый скрипт. Есть решение - использование буферизации, т.е. перехват выходного потока. Пример:

ob_start();
....
$content ob_get_contents();
ob_end_clean();


или например

ob_start();
....
include 
"somefile.inc.php";
include 
"somepage.html";
....
$content ob_get_contents();
ob_end_clean();


3. Приложения.

3.1. Редактор для шаблонов.

Я также разработал онлайн редактор на мой взгляд довольно удобный, его можно установить в любую директорию на Вашем сайте. Настраивается он довольно просто, там можно поменять (необязательно) переменную $def_path, в которой записана директория по умолчанию, откуда будет выводиться список всех шаблонов, при старте скрипта редактора. Можете ее поменять, например на $def_path $DOCUMENT_ROOT."/templates";. И не забудьте закрыть его .htaccess'ом, иначе любой зайдет и отредактирует все шаблоны Вашего сайта ;)

3.2. Замечания.

a) Расширения для шаблонов. Измените в классе переменную $m_extension, по умолчанию она равна tpl
b) Win32/*nix. Если Вы используете операционную систему семейства *nix (Linux, Unix...), то значение переменной $m_win32 должно быть равно false. Если семейства win32 (windows 9x и т.д.), то true.
c) Обработка ошибок. Если возникла ошибка при загрузке шаблона, то возможны два варианта - 1) продолжить работу скрипта 2) немедленно остановить. В 1-ом случае переменная $m_die должны быть установлена в true. Да, и еще есть возможность настройки вывода сообщений об ошибках на экран $m_showErrors (также тип boolean)

3.3. Где скачать.

Каталог скриптов Webscript.Ru Network (Здесь находится сам класс (class.Template.php), пример (/demo) и редактор (/editor))

Евгений А. Кучеров aka Razor, //eugeny.com


 :::::  SHadowMaster пишет 30.01.2002 @ 13:17 
Есть очень классная библиотека для шаблонов - Smarty. Куча наворотов и очень удобная в использовании. Глянь, может пригодится:)
 :::::  Евгений пишет 30.01.2002 @ 13:24 
Смотрел. только зачем столько наворотов? и к тому же громоздкая.
Кстати, Макс проводил тест по скорости, Smarty раз в 5 медленнее, чем этот класс.
 :::::  SHadowMaster пишет 30.01.2002 @ 17:43 
Медленнее???? При каких условиях? Ведь Smarty переводит шаблоны в натуральный PHP код, и потом вообще не занимается парсингом шаблонов. Там ведь есть настройки влияющие на скорость. И при построении более менее солидного проекта те навороты лишними не будут:)
 :::::  Ziko пишет 30.01.2002 @ 18:15 
Можно подробнее: что за Smarty и где ее взять?
 :::::  SHadowMaster пишет 30.01.2002 @ 18:24 
взять тут - http://www.phpinsider.com/php/code/Smarty/
там дока, примеры и т.д. Есть список рассылки по библиотеке.
Компилирующая библиотека шаблонов, с кешированием и кучей различных прелестей. Лучшего не встречал. Причем довольно активно развивается и становится еще лучше:) Я к ней никакого отношения не имею, пишу только свои впечатления от работы с ней.

Заранее прошу прощения, если сообщение посчитается за рекламу.

 :::::  Ziko пишет 01.02.2002 @ 14:46 
Достал я Smarty, в доках сам черт ногу сломит... Понял только, что вещь мощная. Кто-нибудь знает, где про нее можно почитать на русском?
 :::::   пишет 04.02.2002 @ 23:32 
я никак понять не могу - зачем в php для шаблонов использовать класс?

-------------------------------------------------
template.html
----------------
<html><body>$message</body></html>
-------------------------------------------------
index.php
----------------
$message="Hello world";
$html=addslashes(implode("",file("templates/template.html")));
eval("echo stripslashes(\"$html\");");
-------------------------------------------------
 :::::  Евгений пишет 05.02.2002 @ 00:08 
>> я никак понять не могу - зачем в php для шаблонов использовать класс?

А для того, чтобы универсальность поболее была.
Например объект (через new) создается для отдельной директории, ну и можно использовать их несколько - для различных разделов и т.п., чтобы не засорять одну директорию тысячами файлов.
 :::::  [ SysAdmin ] пишет 05.02.2002 @ 10:35 
При вставке в counter.*** (точно не помню расширение файла, но это не главное) php скрипта или инклуда на него выводит исходный текст файла counter.***? Как это исправить
 :::::   пишет 05.02.2002 @ 20:13 
>>Например объект (через new) создается для отдельной директории

$templatedir="templates";

$message="Hello world";
$html=addslashes(implode("",file($templatedir."/template.html")));
eval("echo stripslashes(\"$html\");");

или мегауниверсально ИМХО
------
index.php
------
require("functions.inc.php");

processtemplate("templates", "template");

--------
common.inc.php
-------------------
function processtemplate( $templatedir; $templatename){
$html=addslashes(implode("",file($templatedir."/".$templatename.".html")));
eval("echo stripslashes(\"$html\");");
return true;
}
 :::::  Nicolay V. пишет 08.02.2002 @ 09:31 
Привет!
Кто-нибудь имел дело с таким движком шаблонов как Yapter http://www.yapter.com ?
 :::::  Anonymous пишет 01.12.2002 @ 20:01 
 :::::  А я вообще ни чего не понимаю пишет 10.01.2003 @ 04:47 
А мне вообще ни чего не понятно потомучто я знаю тлько Action Script но смотрю PHP
дайт больше возможностей для дизайнера!!! Зачем я просидел пол года за Action Scpript ом !!!!! лучшебы изучал PHP
 :::::  balin пишет 12.05.2003 @ 14:15 
еще пример:
шаблон:
<html>
<head>
<title><?=$title?></title>
</head>
<body>
<?=$content?>
</body>
</html>
скрипт:
<?
//создание переменных:
$title = "главная страница";
$content = "здавствуй мир";
require("template.php");
?>
 :::::  fenixj пишет 17.10.2003 @ 18:31 
Шаблоны ето хорошо, но кто мне подскажет где можна найти более подробную информацыю по созданию и приминению шаблонов. А также PHP и MySQL.

ps. пишыте на - fenixj@mail.ru
 :::::  tradeukraine пишет 21.12.2003 @ 16:09 
Народ,
класный класс!
но есть проблема:
как вставить в шаблон код php?
а имено include "forum/news.php";
Заранее спасибо!
 :::::  Валентин пишет 28.11.2004 @ 02:26 
Нихрена не понял, но всех кто понял - уважаю :)
 :::::  Mufasa King пишет 25.01.2005 @ 03:33 
А почему бы не?:

+++++++++
template.tpl
+++
<HTML>
<TITLE>Test template!</TITLE><P>
{TEXT}

+++++++++
index.php
+++
<?php
$plot = join(' ', file("template.tpl"));
$plot = str_replace("{TEXT}", "Hello world!",$plot);
echo $plot;
?>

Разновидностей шаблонов много, просто глаза разбегаются. И XML, и Smarty, и FastTemplates и DOM и т.д. Но я так и не понял, какие шаблоны лучше всего использовать то?
 :::::  Alex пишет 05.10.2006 @ 11:35 
Класс не найти. А сайт Кучерова закрылся. У кого класс есть вышлите на lern@bk.ru
Заранее благодарен.
 :::::  Vaulter пишет 11.10.2006 @ 19:16 
Пишу проще:
сначала шаблон:
default.html
<html><head>
<title>$meta[title]</title>
</head>
<body>
$content
</body>
</html>
custom/hello_world.html
<div class='frm'><h1>Превед</h1>
орел или решка?<br />
<report name='lO' csv='custom/mon.csv'>
<input type='radio' value='$item[0]' id='id$item[0]' /><label for=''id$item[0]'> $item[1]</label>
</report>
</div>

custom/mon.csv
0;-выберем? а можно еще валидацию на чтобы 0 не пропускало :) и красным поле $page->build_forms() делало... время.
1;пусть будет решка...
2;или орёл
3;ребром ! надо же! :)

ну и
hw.php
<?php
$page = &new cHtml('custom/hello_world');

$page->out('default');//репорт сработает... мету не определили.. как и навбар опять и т.д. унследовать чтоли cHtml :)))))))))))
Имя:
Email:
URL

Введите сумму двух чисел девять и шесть (девять+шесть=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0247459