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