![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
Использование xslt-шаблонов в реальных проектах09.11.2012 15:48
Holden
В статье вы не найдёте сравнительных тестов шаблонизаторов. Зато найдёте информацию об использовании xslt в качестве шаблонизатора на реальных проектах. Рассмотрены возможности именованных шаблонов, использование шаблонов-функций, справочников.
1. Структура проектаОбычно страница сайта состоит из нескольких общих блоков (меню, футер, ...) и контентной части, которую для общности будем называть основным блоком. Все эти блоки размещаются внутри некоторого индексного шаблона, который знает в каком месте какой блок отобразить: меню должно быть вверху, основной блок в центре, а футер внизу. Получаем следующую структуру
Контроллер главной страницы кабинета пользователя работает следующим образом:
Индексный шаблон /themes/index/main.xsl может выглядет следующим образом:
2. Именованные шаблоныШаблон xslt принимает данные в виде xml-документа. Это удобно тем, что мы можем оперировать целыми узлами. Например для вывода имени пользователя у нас может быть такой шаблон который располагается в файле /themes/models/user.xsl.
Мы можем использовать этот шаблон как для отображения текущего пользователя
так и для отображения списка пользователей
Такое единство отображения сущностей позволяет быстро изменять их отображение. Конечно не у всех пользователей есть картинка, а значит и выводить её нужно не для всех
3. Импорт шаблоновДля того чтобы в шаблоне блока иметь доступ к отображению сущности "пользователь" мы должны подключить файл /themes/models/user.xsl. Для шаблона /themes/cabinet/main.xsl подключение будет выглядеть так (xsl:import должен описываться сразу после xsl:stylesheet)
4. Ни строчки php-кода в представленииПатерн MVC предполагает разделение модели, логики и представления. Логика приложения запрашивает необходимые данные у модели и передаёт их в представление. Представление должно получить необходимое количество данных, чтобы их отобразить пользователю. Т.е. в представлении мы должны только вывести их и не должны как-либо ещё преобразовывать данные. Мы не должны получать имя пользователя по его id, не должны получать текущее время, и т.д. все эти данные уже должны быть доступны для представления. Если каких-либо данных не хватает, значит контроллер должен их предоставить. Xslt позволяет производить простейшие операции с данными: сравнение, подсчёт количества, сортировка, форматирование чисел, округление, арифметические операции, конкатенация,… Казалось бы, что это противоречит предыдущему абзацу. Но позвольте заметить, что в результате всех этих операций мы не получаем новых данных, а лишь преобразуем имеющиеся данные. Не всегда есть все необходимые средства для получения необходимого результата. Например, вывод окончания для числа. Думаю у многих есть подобная функция
И даже больше, xslt позволяет вызвать эту функцию прямо из шаблона
Но это не только противоречит заголовку раздела, но и является неким атавизмом. Лучше избегать вызовов php-функций внутри xslt-шаблонов. Что же делать? Есть 2 выхода:
Вызов функции будет выглядеть так
5. СправочникиВернёмся к выводу информации о пользователе. К примеру на странице форума нам нужно вывести
Можно решить задачу влоб. При получении каждого из списков делать LEFT JOIN users и получать необходимые данные для вывода информации о пользователе. Но есть и отрицательные моменты такого решения. Первое - возможная избыточность данных (пользователи из списков могут повторяться), второе - дополнительная нагрузка на sql-сервер. Другой вариант решения задачи. Получить все списки. Затем из этих списков получить набор user_id. И по этому набору сделать один запрос к таблице users. Результат сложить в xml по известному адресу, например /ref_users. Для вывода информации о пользователе сделаем такой именованный шаблон и сохраним его в /themes/models/user.xsl. Это шаблон для вывода пользователя по его id.
Вывести список постов с информацией о пользователе можно так
ЗаключениеСтатья получилась объёмной, поэтому не рассмотренными остались вопросы организации шаблонов для ajax, "абстрактные шаблоны", поддержка нескольких языков. А также вопросы скорости и кеширования. Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |