Помощник
|
Собственный шаблонизатор |
НЕПЛОХОЙ
|
Сообщение
#1
|
||
|
|
||
|
|||
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 |
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] |
|
|
НЕПЛОХОЙ
|
Сообщение
#4
|
|
мне в прицнипе много не надо, вполне подходит "шаблонизатор" который v1ex дал вот тут http://www.masterwebs.ru/topic/5293-podklj...5674#entry25674
когда начал разбираться, столкнулся с проблемой. в menu.tpl какая то рамочка, в рамочке пункты меню, пункты выводятся из mysql. Единсвенный выход вижу в том чтобы в menu.tpl засунуть цикл который будет вытаскивать из базы то что надо, но тогда ломается весь смысл шаблонов. Как это сделать правильно? |
|
|
v1ex |
6.7.2009, 5:34;
Ответить: v1ex
Сообщение
#5
|
|
Евгений, а почему в самой логике скрипта нельзя вытаскивать из базы пункты меню и передавать шаблонизатору?
|
|
|
НЕПЛОХОЙ
|
Сообщение
#6
|
|
религия не позволяет =) шучу.. пример можно?
|
|
|
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) |
|
|
НЕПЛОХОЙ
|
Сообщение
#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 |
8.7.2009, 19:50;
Ответить: v1ex
Сообщение
#9
|
|
А не разместить <table><tr><td width=200>ШАБЛОН_МЕНЮ</td> в menu.tpl, а <td width=200>ШАБЛОН_КОНТЕНТА</td> в content.tpl? Или у вас в зависимости от логики может исчезать левая колонка?
Поблагодарили: (0) |
|
|
WebKiD |
14.7.2009, 2:04;
Ответить: WebKiD
Сообщение
#10
|
|
0_0
Я представлял шаблонизатор "своей мечты" несколько по другому. Для меня в идеале была бы следующая схема: Есть текстовик с переменными и "тегами" на которые заменяются эти переменные. В место текстовика можно и БД MySQL использовать. Что кстати быстрее будет и меньшую нагрузку на сервер будет оказывать? |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
SUCCESS-CPA.ru - собственный КЦ 24/7, свой отдел отправки, эксклюзивные офферы! | 28 | SuccessGroup | 7602 | 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- |
Текстовая версия | Сейчас: 29.3.2024, 6:21 |