Хочу посоветоваться со специалистом по XML, XSLT и PHP

  • Автор темы andygray
  • Дата начала

andygray

Guest
Хочу посоветоваться со специалистом по XML, XSLT и PHP

Hey!

Нужен совет по реализации моей задумки.
В качестве примера возьмём формирование структуры каталога (дирректории) вида:
+DirA
__-DirAA
__-DirBB
+DirB
__-DirBA
__-DirBB
__-DirBC
+DirC


Вывод поддиректорий текущей cur_dir осушествляется html'ом вида:
Код:
    |<table>
    |     |<tr>
    |     |    |<td>
 (1)|  (2)| (3)|<a href="[dir_link]">[dir_name]</a>
    |     |    |</td>
    |     |</tr>
    |</table>
, где:
(1) structure
(2) line
(3) element

line имеет параметр num_el, значение которого должно импортироваться из внешнего файла настроек. Его значение определяет, сколько раз будет повторятся элемент element, другими словами - количество элементов в строке. Так же line содержит собственно element

element, в свою очередь, содержит элементы dir_link и dir_name.

Следовательно, должен быть шаблон вида (по сути-info файл):
Template1.???
Код:
<cur_dir type="input">$cur_dir</cur_dir>
<html_rules>Html-rules1.???</html_rules>
<php_rules>Php-rules1.php</php_rules>
<sum_el type="calc">sum_el</sum_el> 
<structure>
  <line>
    <num_el type="cfg">$n</num_el>
    <element>
      <dir_name>$dir_name</dir_name>
      <dir_link type="calc">$dir_link</dir_link>
    </element>
  </line>
</structure>
Шаблон должен иметь подобную понятную структуру, что бы быть легко редактируемым. К примеру, если я захочу вставить рядом с каждой директорией количество поддиректорий - [DirA(2) DirB(3) DirC], то шаблон изменяется следующим образом:
Template1.???
Код:
<cur_dir type="input">$cur_dir</cur_dir>
<html_rules>Html-rules1.???</html_rules>
<php_rules>Php-rules1.php</php_rules>
<sum_el type="calc">sum_el</sum_el> 
<structure>
  <line>
    <num_el type="cfg">$n</num_el>
    <element>
      <dir_name>$dir_name</dir_name>
      <dir_link type="calc">$dir_link</dir_link>
      <sub_dirs_num type="calc">$sub_dirs_num</sub_dirs_num>
    </element>
  </line>
</structure>
Кроме того, правила преобразования в html должны быть максимально просто описаны, для правки как html-верстальщиком, так и php-кодером (не девелопером). Что то похожее на это:
Html-rules1.???
Код:
structire:
<table>[line]</table>
line (loop-[round(sum_el/num_el+1)]-times): 
<tr>[element]</tr>
element (loop-[num_el]-times): 
<td>
[dir_link][dir_name/][sub_dirs_num/][/dir_link]
<br></td>
dir_link:
-begin<a href="[#value]">
-end</a>
dir_name:
[#value]
sub_dir_num:
&пbsp([#value])
Итак, у нас есть Template1.??? и html-rules1.???
Ещё должен быть php файл Php-rules1.php, содержащий обработчики полей присутствующих типов - cfg и calc.
Вот у нас и есть полноценный набор файлов, представляющих собой совершенно независимый шаблон.

Вооот...
Как же это должно работать?
Допустим есть некая система, которая на лету позволяет подключать шаблоны. Вот краткий сценарий:
1. Инсталлируем новый шаблон работы со структурой директорий:
- указываем путь к папке с шаблоном
- система запрашивает у пользователя имя шаблона и добавляет элемент <name>TypedName</name> в Template1.???
- система парсит шаблон и создаёт под него соотв. базу данных с именем TypedName и полями ID и name (поля типов cfg и calc не создаются, т.к. они расчитываются в дальнейшем по своим правилам)
2. Заполняем базу
- система, на основе Template1.??? создаёт интерфейс для добавления/удаления/редактирования элементов по своим внутренним правилам
3. Просматриваем результаты
- В лоадер Php-rules1.php передается параметр cur_dir, затем загружается и исполняется файл Html-rules.??? - на экран выводятся поддиректории текущей (cur_dir). Вуаля!


Вот собственно то, что я вижу. То, как это должно работать.
...
ВНИМАНИЕ.
Вопрос.

Очень очень очень очень сильно не хочу придумывать с нуля языки шаблонов, правил и т.п. Я знаю, что уже есть готовые средства и механизмы создания подобных извращений (если вам так показалось) и не использовать их было бы грех. Как мне показалось, под мои нужды целиком и полностью подходят PHP+mySQL vs XML vs XSLT. Кто нибудь может нарисовать, с использованием этих технологий сделать данный пример? Я практик, и теорию начинаю усваивать и делать частью своего мышления только в случае, если ясно вижу способы использования. Сейчас это так, но не до конца, поэтому прошу совета/помощи. Возможно я не прав, и XMS+XSLT нужно оставить в стороне, использовав Smarty-templates. В любом случае жду совета.

Thx!

Crossposted to DeForum
 

Alexandre

PHPПенсионер
Кто нибудь может нарисовать, с использованием этих технологий сделать данный пример
Думаю это реально.
правила преобразования в html должны быть максимально просто описаны,
Если хочешь приминить свои правила преобразования к некому механизму а он на основе их сконструировал шаблон, то мое мнение правила должны быть тоже в xml

А вообще надо еще 100 раз подумать, как что и как строить.
 

andygray

Guest
Originally posted by Alexandre
А вообще надо еще 100 раз подумать, как что и как строить.
Я думаю ещё где то в 8й раз, но думаю, что не меньше сотни буду думать это точно :)

Насчёт

Originally posted by Alexandre
Если хочешь приминить свои правила преобразования к некому механизму а он на основе их сконструировал шаблон, то мое мнение правила должны быть тоже в xml.
думаю, всё же XSLT должен подойти как никто другой. Взять, к примеру, файл Html-rules1.??? - я в XSLT не силён, но уж бооольно он на него смахивает, так зачем придумывать своё? :)


Да,.. и по поводу реальности - как мы можем это устроить? К сожалению, я в Питере бываю редко, поэтому на пиво раньше, чем через пол-года расчитывать вряд ли прийдётся...
 

andygray

Guest
Originally posted by maxim
Все твои ответы здесь
http://serge.design.ru/
Максим, помимо того, что линк твой не имеет ни малейшего отношения к обсуждаемой (точнее пытающейся стать обсуждаемой) теме, ты ещё не внимательно прочёл (точнее вобще не прочёл) вопросы. Мои. А они были применительно именно к моему случаю. Я не хочу учить XML & XSLT. Я не программист. Мне просто нужно увидеть, как то, что я задумал, можно реализовать с помощью этих двух уже готовых технологий. Матчасть я читал в оригинале, но это меня не радовало. В любом случае спасибо за активность.

Андрей
 

maxim

Новичок
andygray
---------------------
Как мне показалось, под мои нужды целиком и полностью подходят PHP+mySQL vs XML vs XSLT. Кто нибудь может нарисовать, с использованием этих технологий сделать данный пример?
----------------------

Если я правильно понял тебе нужен пример как из
<structure>
<line>
<num_el type="cfg">$n</num_el>
<element>
<dir_name>$dir_name</dir_name>
<dir_link type="calc">$dir_link</dir_link>
</element>
</line>
</structure>

получить хтмл таблицу

В т ой ссылке есть статья как с помощью XSLT получить
почти то что тебе надо.

Извини если я тебя не так понял
 

Alexandre

PHPПенсионер
Если я правильно понял тебе нужен пример как из
<structure>...
получить хтмл таблицу
Как я понял - нужно разработать механизм, который бы облегчил жизнь дизайнерам,
и мог бы каким то образом ... (здесь я что-то упустил)
строить на основе преобразований выходной HTML,

возможно, что еще что-то ??? типа, создовал - шаблонные файлы и клал их в соответствующие директории.
 

andygray

Guest
Вот такой набросок:


НАБРОСОК============================
XML файл свойств модуля - используется:
а) для инсталляции модуля в систему - он содержит тип модуля, список необходимых компонент, структуру хранения данных для создания новой (ых) таблиц в ВБ и т.п.
б) php лоадером для построения view, т.е. преобразования данных базы по XML'ному шаблону, используя преобразователь на XSLT в html
в) для редактирования информационных элементов модуля. В моём случае - редактирование структуры (1-раз), редактирование элементов (2-два). Система генерит формы редактирования на основе типа данных и их формата. Например - для редактирования элемента генериться форма, а для редактирования структуры - дерево. В свою очередь, в системе уже должны быть установлены модули для работы с подобными типами информационных элементов.
г) ещё оооочень много применений. см. ниже.

XSLT файл используется лишь для представления данных, структура которых описана в XML файле, а сами они храняться в базе, в html. При чём, в одном модуле могут быть несколько XSLT шаблонов, для вывода данных в разных стилях (для разных скинов, лейаутов и т.п.)

Php файл содержит логику работы элемента и связи с другими модулями. По сути представляет класс moduleName.

Связи с другими модулями, описаные в XML файле свойств, и реализованые в Php логике, образуют объектную структуру приложения.

Допустим, на том же примере ( http://phpclub.ru/talk/showthread.p...;threadid=57042 ) я стою приложение для создания и работы с каталогами (директориями) под названием DirectoryScript. Каталоги могут содержать элементы произвольных типов (ссылки, статьи, документы, галерею изображений с автомат. генерацией табнейлов, и т.п.). Вот структура модулей:

PHP:
(1)DirectoryScript 
-- (1.1.)SubDirs 
-- (1.2.)Elements 
    --- (1.2.1.)ElementType1 
    --- (1.2.2.)ElementType2 
    --- (1.2.n.)ElementTypeN
Каждый из этих модулей содержит XMLинфо, XSLTпредставление(я) и PHPлогику.

Сам скрипт DirectoryScript не может делать ничего, но он от начала до конца описывает работу Каталога, хранящего различные элементы.

Теперь я хочу создать приложение DirectoryManager, позволяющее создавать различные каталоги, управлять ими, а так же подключать любые типы элементов, шаблоны вывода директорий и т.п. Приложение DirectoryManager содержит ИСЛЮЧИТЕЛЬНО БИЗНЕС ЛОГИКУ. Выше я называл подобные прложения "системой" и частично его описал. Поэтому допустим, что мы подключили DirectoryScript к DirectoryManager'u и создали каталог DVD дисков. Для этого разработчик сделал следующие вещи:
1) создал новую каталог.
2) подключил новый XSLT шаблон отображения каталога дисков
3) подключил XSLT шаблон отображения элемента типа DVD диск
4) нажал кнопку GENERATE и тут произошло нечто интересное - в отдельной папочке создался готовый скрипт каталога DVD дисков с админкой, а так же его инсталляшка. Весело?
/НАБРОСОК============================

Но, как говориться - правильно поставленный вопрос - это уже ответ на него. Неточно поставленый - попытка его найти. Пока писал всё это - много о чём подумал, и уже определился, что мне XSLT & XML подходят как ничто другое.

Едиснственное, что меня смущает - правильно ли я делаю, что собираюсь использовать XML исключительно как описание структуры данных, а сами данные собираюсь хранить в базе?
 
Сверху