[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблонизатор. Помогите новичку!
SKIT54
Доброго времени суток!!! Нужна помощь чайнику!)) По-немногу изучаю php и вот встала проблема. Задан шаблон в виде html-файла с тегами, которые требуется заменить препроцессору:
<HTML>
<HEAD/>
<BODY>
<P>##FOR:JOURNAL#
#JOURNAL:YEAR# <BR/>
#journal:month# <br/>
#journal:name# <br/>
##!for:journal#</p>

FIRST BOOK: #BOOK:NAME# .
SECOND BOOK: #BOOK:NAME# .
</BODY>
</HTML>


ШАБЛОН ДОЛЖЕН ХРАНИТЬСЯ В ОТДЕЛЬНОМ ФАЙЛЕ.

ВМЕСТО ТЕГОВ ВИДА #EL1:EL2# ДОЛЖНЫ ПОДСТАВЛЯТЬСЯ ТЭГИ ИЗ XML-ФАЙЛА, ПЕРВОГО И ВТОРОГО УРОВНЯ ВЛОЖЕННОСТИ(ЕСЛИ СЧИТАТЬ КОРНЕВОЙ ТЭГ ITEMS КАК ТЭГ НУЛЕВОГО УРОВНЯ). НАПРИМЕР, ПОСЛЕ ПОДСТАНОВКИ ВМЕСТО ТЭГА #BOOK:NAME# ДОЛЖНО БЫТЬ СОДЕРЖИМОЕ ТЭГА <NAME>, ВЛОЖЕННОГО В ТЭГ <BOOK>. ПРИ ЭТОМ ВМЕСТО ПЕРВОГО ТАКОГО ТЕГА В ИСХОДНОМ HTML-ФАЙЛЕ ДОЛЖНО БЫТЬ ПОДСТАВЛЕНО СОДЕРЖИМОЕ ПЕРВОГО ТАКОГО ТЭГА, ВМЕСТО ВТОРОГО- ВТОРОГО. ЕСЛИ ТЭГИ В ИСХОДНОМ ФАЙЛЕ ПРОДОЛЖАЮТ ИДТИ, А ДАННЫЕ В XML-ФАЙЛЕ ЗАКОНЧИЛИСЬ, ТЭГИ ДОЛЖНЫ ЗАМЕНЯТЬСЯ ПУСТОТОЙ.
Есть один метатэг вида ##for:el1# ##!for:el1#(открывающий и закрывающий тэги), который должен трактоваться следующим образом — все содержимое html-файла между открывающим и закрывающим тегами должно повториться столько раз, сколько в xml-файле встречается тэг первого уровня el1. Замена этого метатэга должна идти перед заменой тэгов. Таким образом, конструкция ##for:journal# #journal:year# <br/> #journal:month# <br/> #journal:name# <br/> ##!for:journal# должна быть заменена на столько данных из тэгов 2-го уровня year итп, вложенных в тэги 1-го уровня journal, сколько раз встречаются в xml-файле тэги journal.
Содержимое тестового xml-файла. Файл не должен меняться в результате работы скрипта!


<?XML VERSION="1.0" ENCODING="UTF-8"?>
<ITEMS>
<BOOK>
<NAME>VINNIE POOH</NAME>
<AUTHOR>JOHN MILLS</AUTHOR>
</BOOK>
<BOOK>
<NAME>DONALD KNUT</NAME>
<AUTHOR>THE ART OF PROGRAMMING</AUTHOR>
</BOOK>
<JOURNAL>
<NAME>COSMOPOLITAN</NAME>
<YEAR>2009</YEAR>
<MONTH>02</MONTH>
</JOURNAL>
<JOURNAL>
<NAME>GQ</NAME>
<YEAR>2009</YEAR>
<MONTH>01</MONTH>
</JOURNAL>
<JOURNAL>
<NAME>GQ</NAME>
<YEAR>2009</YEAR>
<MONTH>01</MONTH>
</JOURNAL>
</ITEMS>


НЕОБХОДИМО ЗАДАТЬ ФАЙЛ .HTACCESS ТАКИМ ОБРАЗОМ, ЧТОБЫ ПРИ ОБРАЩЕНИИ К НЕМУ ВЫЗЫВАЛСЯ ПРЕПРОЦЕССОР-ШАБЛОНИЗАТОР, И ЗАМЕНЯЛ ТЕГИ ДАННЫХ РЕАЛЬНЫМИ ДАННЫМИ. ОБРАЩЕНИЕ ПРОСХОДИТ К ФАЙЛУ ZADANIE.HTML, ТАКИМ ОБРАЗОМ, ПРИ ОБРАЩЕНИИ К ЭТОМУ ФАЙЛУ ДОЛЖЕН ИДТИ ВЫЗОВ К ПРЕПРОЦЕССОРУ С ПАРАМЕТРАМИ, НАПРИМЕР ENGINE.PHP?TEMPLATE=TEMPLATE1.HTML&DATA=DATA.XML

Таким образом, высылаемое решение должно содержать следующие 4 файла:
engine.php – движок шаблонизатора
[somename].html – файл с шаблоном
[somename].xml – файл с данными
.htaccess

Написал скрипт SAX парсер. В итоге у меня есть массив со всеми данными из xml файла. А вот как мне заменить тэги из html на них что-то на ум никак не приходит. Подскажите кто может, только пожалуста по подробнее, если можно! А то я ещё php не очень хорошо знаю.




Спустя 5 часов, 37 минут, 2 секунды (24.09.2009 - 08:12) twin написал(а):
Тебе наверняка понадобится что то из этого набора:
str_replace();
preg_replace();
preg_replace_callback();
preg_match_all();
preg_quote();

И цикл for на сколько я понял. И еще понадобится Mod Rewrite. Изучай эти вещи, потом будет смысл что то подсказывать

Спустя 2 часа, 11 минут, 47 секунд (24.09.2009 - 10:24) Guest написал(а):
Ну это понятно что мне всё это понадобится!
Меня больше интересует как мне из html передать все данные в php сразу с заменой??? Если вставлять через include(), то сразу замену не произведешь!
Ведь обращение изначально идёт к html файлу в котором содержится сам шаблон и редирект на php обработчик как я понимаю.

Спустя 7 минут, 35 секунд (24.09.2009 - 10:31) stepan написал(а):
Тебе надо с начало загрузить весь шаблон в переменную с помощью ob_get_contents а потом пользоваться операторами которые тебе указал twin и будет тогда тебе счастье.

Спустя 2 часа, 57 минут, 21 секунда (24.09.2009 - 13:29) twin написал(а):
Можно сразу file_get_contents(), так проще будет, если шаблонизатор юзать.

Спустя 3 дня, 22 часа, 35 минут, 6 секунд (28.09.2009 - 12:04) atarix написал(а):
http://www.php.ru/forum/viewtopic.php?t=19101

Это может помочь, + ссылка ниже на DOM ob

Спустя 3 дня, 2 часа, 3 минуты, 58 секунд (1.10.2009 - 14:08) Семён написал(а):
Не засирай себе мозги, скачай Smarty Template Engine - и будет тебе счастье.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.