X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Собственный шаблонизатор
НЕПЛОХОЙ
НЕПЛОХОЙ
Topic Starter сообщение 2.6.2009, 0:34; Ответить: НЕПЛОХОЙ
Сообщение #1


Хочется понять как все это делается, много статей читал, но везде сильно размыто об этом говориться.

как я понял
файл html обрабатывается регулярками и все что находится между знаками допутстим {} записывается в переменную? которая заменяется на значение этой переменной.

а как же циклы?

если цикл выводит у меня по 200 страниц информации, то это никак не засунуть в одну переменную)) я понимаю что я чего то не понимаю, но поиски ответа меня никчему не привели
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 2.6.2009, 14:30; Ответить: ZiTosS
Сообщение #2


Евгений, шаблонизаторы делятся по сложности на: Простые и сложные.
Простые делают замену в шаблоне одних лексем на другие. По определённому ключу. У меня есть подобный шаблонизатор, мне хватает и даже данные из базы обрабатывать. Вся основа тут это регулярные выражения и ассоциативный массив. У которого ключ - это имя заменяемой лексемы, значение - на что заменяем.
Чтобы к примеру вывести 100 кусков одного и того же кода через простой шаблонизатор, мы просто делаем как обычно
[php]$query = "SELECT [поля_возможно с переименованиями] FROM [таблица] .....";
$resource = mysql_query($query)
while($array = mysql_fetch_array($resource))
{
// обработка шаблона, в качестве параметра передаём имя шаблона и ассоциативный массив
}[/php]


Как же устроены сложные шаблонизаторы? К примеру smarty
Да всё также, только, написан целый класс для обработки шаблонов, включено множество конструкций, тех же самых циклов и условий. Как передаются данные не сложно догадаться, так же массив в массиве, или объекты. Как заблагорассудится тебе написать обработку шаблонизатором.

Кстати ничего сложного нету, скачать исходники smarty и почитать их, конечно не всё быстро придёт, но теорией проб и ошибок можно во всём разобраться.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
v1ex
v1ex
сообщение 3.6.2009, 6:57; Ответить: v1ex
Сообщение #3


Я давно себе писал, может пригодится:
[php]<?php
// Шаблонизатор
class Templater {
private $template_dir;

// В конструктор передаем директорию, в которой находятся шаблоны
public function __construct($template_dir) {
$this->template_dir = $template_dir;
}

public function setDir($dir) {
$this->dir = $dir;
}
public function getDir($dir) {
return $this->dir;
}

// Добавляем переменную шаблона (значение, имя переменной)
public function addVariable($variable, $name) {
$this->$name = $variable;
}

// Выводим шаблон
public function displayTemplate($template_file) {
require_once $this->template_dir.$template_file;
}
}
?>[/php]
Класс использовать примерно так:
[php]<?php
$templater = new Templater('templates/');
$templater->addVariable('Главная страница', 'title');
$templater->addVariable('Содержимое главной', 'content');
$templater->displayTemplate('template.tpl');
?>[/php]
Ну и сам шаблон (template.tpl):
[php]<html>
<head>
<title>
<?php print $this->title; ?>
</title>
</head>
<body>
<?php print $this->content; ?>
</body>
</html>[/php]


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
НЕПЛОХОЙ
НЕПЛОХОЙ
Topic Starter сообщение 5.7.2009, 16:42; Ответить: НЕПЛОХОЙ
Сообщение #4


мне в прицнипе много не надо, вполне подходит "шаблонизатор" который v1ex дал вот тут http://www.masterwebs.ru/topic/5293-podklj...5674#entry25674

когда начал разбираться, столкнулся с проблемой.

в menu.tpl какая то рамочка, в рамочке пункты меню, пункты выводятся из mysql. Единсвенный выход вижу в том чтобы в menu.tpl засунуть цикл который будет вытаскивать из базы то что надо, но тогда ломается весь смысл шаблонов. Как это сделать правильно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
v1ex
v1ex
сообщение 6.7.2009, 5:34; Ответить: v1ex
Сообщение #5


Евгений, а почему в самой логике скрипта нельзя вытаскивать из базы пункты меню и передавать шаблонизатору?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
НЕПЛОХОЙ
НЕПЛОХОЙ
Topic Starter сообщение 7.7.2009, 13:16; Ответить: НЕПЛОХОЙ
Сообщение #6


религия не позволяет =) шучу.. пример можно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
v1ex
v1ex
сообщение 7.7.2009, 13:34; Ответить: v1ex
Сообщение #7


Логика скрипта:
[php]$res = mysql_query("выборка_пунктов_меню", $msConnect);
$puncts = array();
while ($row = mysql_fetch_array($res))
{
$puncts[] = $row;
}
$template['puncts'] = $puncts;
// Дальше выводим шаблон[/php]
В шаблоне:
[php]<?php foreach ($template['puncts'] as $punkt) : ?>
<li><a href="<?php print $punkt['href']; ?>"><?php print $punkt['name']; ?></a></li>
<?php endforeach; ?>[/php]
Думаю суть ясна.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
НЕПЛОХОЙ
НЕПЛОХОЙ
Topic Starter сообщение 8.7.2009, 15:58; Ответить: НЕПЛОХОЙ
Сообщение #8


с этим разобрался, спасибо :)

вот еще проблема

вот этот код
[php]display_template(header.tpl, $text);
display_template(content.tpl, $text);
display_template(footer.tpl, $text);[/php]
выведет сначала шапку, потом контент и футер. А если контент разделен на 2 части? левую и центр. Чтобы допустим в левой колонке то же меню вывести.

решение вижу только такое, но оно опять смешивает шаблон с логикой.
[php]display_template(header.tpl, $text);
echo '<table><tr><td width=200>';
display_template(left.tpl, $text);
echo '</td><td>';
display_template(content.tpl, $text);
echo '</td></tr></table>';
display_template(footer.tpl, $text);[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
v1ex
v1ex
сообщение 8.7.2009, 19:50; Ответить: v1ex
Сообщение #9


А не разместить <table><tr><td width=200>ШАБЛОН_МЕНЮ</td> в menu.tpl, а <td width=200>ШАБЛОН_КОНТЕНТА</td> в content.tpl? Или у вас в зависимости от логики может исчезать левая колонка?


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WebKiD
WebKiD
сообщение 14.7.2009, 2:04; Ответить: WebKiD
Сообщение #10


0_0
Я представлял шаблонизатор "своей мечты" несколько по другому.
Для меня в идеале была бы следующая схема:
Есть текстовик с переменными и "тегами" на которые заменяются эти переменные.
В место текстовика можно и БД MySQL использовать.
Что кстати быстрее будет и меньшую нагрузку на сервер будет оказывать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) SUCCESS-CPA.ru - собственный КЦ 24/7, свой отдел отправки, эксклюзивные офферы!
28 SuccessGroup 7603 14.5.2018, 17:16
автор: -Dobrojelatelnica-
Открытая тема (нет новых ответов) Success-CPA.ru - собственный КЦ 24/7, свой отдел отправки, эксклюзивные офферы!
25 SuccessGroup 10637 10.7.2017, 16:19
автор: SuccessGroup
Открытая тема (нет новых ответов) Как Создать Раскрутить Собственный Веб Сайт С Нуля И Зарабатывать На Нем Более 1000 $
1 dprosvetov 3651 20.10.2011, 18:33
автор: -infinity294-
Открытая тема (нет новых ответов) Нужно подогнать под шаблонизатор
4 Salikhoff_hb 3527 26.6.2011, 18:59
автор: -WEBog-
Открытая тема (нет новых ответов) шаблонизатор
0 Salikhoff_hb 2544 9.2.2011, 14:04
автор: -Salikhoff-


 



RSS Текстовая версия Сейчас: 29.3.2024, 11:36
Дизайн