Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Шаблонизатор XML и HTML
 
 автор: SKIT54   (24.09.2009 в 03:44)   письмо автору
 
 

Доброго времени суток!!! Нужна помощь чайнику!)) По-немногу изучаю 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 не очень хорошо знаю.

  Ответить  
 
 автор: heed   (24.09.2009 в 12:40)   письмо автору
 
   для: SKIT54   (24.09.2009 в 03:44)
 

preg_replace+evaluation+example from google
or
preg_replace_callback()
or
str_replace()+arrays as parametrs

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования