Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Шаблонизатор на основе str_replace

#1 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0
0

Отправлено 08 Январь 2010 - 20:14

Пишу двиг и столкнулся с одной проблемой в шаблонизаторе:

Вот пример кода как переменная из переменной вида $menu сделать <menu> (так же можно делать и [menu], {menu}).
$template = str_replace("<menu>", "$menu", "$template");


Вопрос в том, как сделать чтоб на пример шаблон вывода цикла DO-WHILE выглядел так:
<cycle>
 <tr>
   <td>
	<img src="<image_url>">
   </td>
   <td>
	 <b><entry_title></b>
	 <br><entry_content>
   </td>
 </tr>
</cycle>

Вот оригинальный код:
 $array = mysql_fetch_array($query);
do{
printf ("<a href='show-%s.htm'>%s</a> <span style='color: #666666; font-size: 10px;'>%s</span><br>%s<br><br>"
,$array['id'],$array['title'],$array['date'],$array['preview']);
} while($array = mysql_fetch_array($query));

 

 

  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Январь 2010 - 23:40

FordogeN, хех а где условие твоего цикла? Его всё равно придётся указывать в шаблоне.
Если уж использовать свои шаблонизаторы в проектах, то используй только замену блоков контентом, но никаких условий и циклов.
Если уж хочешь использовать условия, циклы, функции - возьми smarty, там всё это реализовано.

А вообще реализация циклов в шаблонах приводит тебя к созданию временных исполняемых файлов, либо использованию eval() что очень не безопасно.
Реализация примерно такая:
Есть шаблонизатор
<?php

class Templater{
// различные переменные состояния
// функции передачи переменных
// функции определения используемого модуля и его вызов на обработку
// функции вывода контента
}

?>

Есть его модули, которые создают код определённого оператора
<?php

// класс для формирования кода цикла for
class _TemplaterModuleFor{
// класс знает как ему распрядиться куском шаблона, режет его, формирует код для исполнения и так далее и возвращает в основной шаблон.
}

?>

Просто если хочется реализовать подобное, можно заглянуть в реализацию Smarty, он как раз на классах.
  • 0

#3 FordogeN

FordogeN
    Topic Starter
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 08 Январь 2010 - 23:56

Задача поставлена так, что шаблоны должны храниться в БД, а для каждого элемента отдельное поле создавать это как по мне глупо и жутко не удобно.


  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Январь 2010 - 00:06

FordogeN,
DLE сделали проще, в некоторых шаблонах можно встретить подобное:
[name]
здесь что-то
[/name]

Затем в шаблонизаторе у них реализована возможность обюработки не целого файла-шаблона, а подобного куска с именем. Это конечно изврат, но реализовать возможно.
Если уж хочешь циклы, тебе придётся реализовать возможность доступа к массивам, сложная это задача выйдет, 10 раз пожалеешь, я тебе обещаю.
  • 0

#5 FordogeN

FordogeN
    Topic Starter
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 09 Январь 2010 - 00:30

Я DLE толком не ковырял... Недолюбливаю мягко говоря.
А вот то что пожалею это ты сказал в точку - уже раза 2 пожалел))

Только что нашел где-то в просторах сети вот такой кусок кода

$title = between("<title>", "</title>", $html);

Но не могу понять как его применить.


  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Январь 2010 - 02:09

FordogeN, в PHP нет функции between, там где ты нашёл её использование, должна быть её реализация. Функция просто, возвращает всё из третьего параметра, что находится между первым и вторым параметром. Но тебе это явно не пригодится.

Вообщем используй Smarty или подобные, если уж не хочешь простые шаблоны использовать.
  • 0


Оформление форума – IPBSkins.ru