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



 

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

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

Открыть тему
Тема закрыта
> Шаблонизатор на основе str_replace
FordogeN
FordogeN
Topic Starter сообщение 8.1.2010, 21:14; Ответить: FordogeN
Сообщение #1


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

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

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


Вот оригинальный код:
[php] $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));[/php]


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 9.1.2010, 0:40; Ответить: ZiTosS
Сообщение #2


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

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

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

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

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

?>[/php]
Просто если хочется реализовать подобное, можно заглянуть в реализацию Smarty, он как раз на классах.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
FordogeN
FordogeN
Topic Starter сообщение 9.1.2010, 0:56; Ответить: FordogeN
Сообщение #3


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


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 9.1.2010, 1:06; Ответить: ZiTosS
Сообщение #4


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


Затем в шаблонизаторе у них реализована возможность обюработки не целого файла-шаблона, а подобного куска с именем. Это конечно изврат, но реализовать возможно.
Если уж хочешь циклы, тебе придётся реализовать возможность доступа к массивам, сложная это задача выйдет, 10 раз пожалеешь, я тебе обещаю.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
FordogeN
FordogeN
Topic Starter сообщение 9.1.2010, 1:30; Ответить: FordogeN
Сообщение #5


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

Только что нашел где-то в просторах сети вот такой кусок кода
[php]$title = between("<title>", "</title>", $html);[/php]
Но не могу понять как его применить.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 9.1.2010, 3:09; Ответить: ZiTosS
Сообщение #6


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

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

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Требуется рерайтер-копирайтер на постоянной основе
2 extrimov 1301 30.1.2022, 14:08
автор: extrimov
Открытая тема (нет новых ответов) Партнерская программа продажи ПК лицензионных игр и свой магазин на ее основе
Как создать свой магазин с множеством товаров не вкладывая в товар
1 AprelKapel 2852 5.11.2021, 23:42
автор: Kuzzma
Открытая тема (нет новых ответов) Требуется контент менеджер на постоянной основе
3 DukeNukem 6223 23.3.2021, 15:14
автор: seroga27
Открытая тема (нет новых ответов) Нужен копирайтер по тематике Форекс/Трейдинг на постоянной основе
2 kuprum 1115 4.8.2020, 17:39
автор: kuprum
Открытая тема (нет новых ответов) Нужен копирайтер по тематике Форекс/Трейдинг на постоянной основе
0 kuprum 959 3.8.2020, 21:53
автор: kuprum


 



RSS Текстовая версия Сейчас: 26.4.2024, 7:23
Дизайн