16 апр. 2015 г., 16:41

Как использовать modxSmarty

Задача состоит в том чтобы быстро менять внешнее оформление целого сайта, при этом в каждом отдельном шаблоне могут быть разная HTML структура, тоесть нужно менять не просто CSS, но и шаблоны. По умолчанию все шаблоны сохраняются в БД и если сделать их статичними, то можно просто копировать с заменой tpl файлы. Но это отчасти не удобно, ведь старые шаблоны при этом затираются.
Другое дело использовать для этих целей modxSmarty, ведь там можно просто указать путь к другому шаблону, при этом и овцы целы и волк сыт, тоесть старый шаблон мы не удаляем, а просто указываем с какой директории брать файлы для нового шаблона. Весьма удобно.
Просмотрев уроки Николая я понял что там существовали некие тормоза из за использования стандарного подхода, когда шаблон сохраняется в БД и используются стандартные MODX теги.
При этом проверив файлы кеша по одному и второму ресурсу я не обраружил там стандартных тегов как было в уроке — видно разработчики MODX уже поправили это дело.
Вот ссылка на тестовый сайт — http://614937.doskadpk.web.hosting-test.net/
Главная страница со modxSmarty шаблоном
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{config name="site_name"} - {field name="pagetitle"}</title> </head> <body> <h1>{field name="pagetitle"}</h1> {snippet name="Wayfinder" params="startId=`0`"} {field name="content"} <ul> <li>[^qt^] - Query Time - Shows how long MODx took talking to the database</li> <li>[^q^] - Query Count -Shows how many database queries MODX made</li> <li>[^p^] - Parse Time - Shows how long MODX took to parse the page</li> <li>[^t^] - Total Time - Shows the total time taken to parse/ render the page</li> <li>[^s^] - Source - Shows the source of page, whether is database or cache.</li> </ul> </body> </html>
А Не главная — обычный шаблон MODX, который хранится в БД
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>[[++site_name]] - [[*pagetitle]]</title> </head> <body> <h1>[[*pagetitle]]</h1> [[Wayfinder? &startId=`0`]] [[*content]] <ul> <li>[^qt^] - Query Time - Shows how long MODx took talking to the database</li> <li>[^q^] - Query Count -Shows how many database queries MODX made</li> <li>[^p^] - Parse Time - Shows how long MODX took to parse the page</li> <li>[^t^] - Total Time - Shows the total time taken to parse/ render the page</li> <li>[^s^] - Source - Shows the source of page, whether is database or cache.</li> </ul> </body> </html>
Для создания Smarty шаблона я создал обычный шаблон, где вызывается сниппет modxSmarty со следующим содержимым
[[smarty? &tpl=`index.tpl`]]
При таком подходе использования modxSmarty есть определённая выгода, но при этом какой-то разницы в скорости работы я не увидел. Я понимаю что здесь нагрузка минимальная — вывод содержимого одной странички, но всё же.
А теперь сам вопрос — всё ли я делаю правильно?
Если что-то делаю не так, тогда подскажите как нужно.
Тоесть мне нужно назначать отдельный шаблон — отдельным ресурсам.
Если нужно могу скинуть доступы к сайту, но вроде как всё подробно описал
Советую изучить вот это. Там показано как правильно переопределять оформление за счет расширяющих скинов.
но при этом какой-то разницы в скорости работы я не увидел.
А на чем разницу смотреть? Во-первых, сайт вообще пустой. Во-вторых, вызывая через [[smarty? &tpl=`index.tpl`]] практически ничего не меняется, используется родной механизм MODX-а. Вот мы сейчас выполняли нагрузочное тестирование нашего нового новостного портала на 75 000 пользователей, 2000 пользователей онлайн фигачили, и кратко результаты такие (более подробный отчет я позже напишу, когда мне вышлют логи теста): 43+ тысячи запросов на сервер и только восемь ошибок было. Ни один ответ не превысил секунды. Переведите это на стандартные MODX-теги, и уверяю, разница в скорости будет ощущаться.
А теперь сам вопрос — всё ли я делаю правильно?
Если все работает как вы хотите, вероятно все правильно. Если нет — то нет.
В принципе всё сделал так как написанно в указанной заметке по изменению шаблона. Тоесть я правильно создаю шаблоны для modxSmarty, которые потом могу назначить отдельным ресурсам.
[[smarty? &tpl=`index.tpl`]]
Это был вопрос, а то звучит как утверждение
Пока просто другого варианта я не придумал как можно назначать отдельные шаблоны, отдельным ресурсам
Можно через выбор шаблона, а можно создать ТВ-поле, которое будет учитываться при выполнении шаблона.
А вот второй вариан не савсэм понятен. Плюс вопрос — есть ли какое-то преимущество по сравнению с первым вариантом?
Есть. В том, что Смарти компиллирует шаблоны в пхп-код, а чистый php-код быстрее выполняется, чем разбор строк с поиском MODX-тегов и замены плейсхолдеров результатами. Но тема эта избита, я не готов ее щас повторно всесторонне пережевывать.
на счёт варианта — я имел это ввиду
можно создать ТВ-поле, которое будет учитываться при выполнении шаблона
На счёт
Смарти компиллирует шаблоны в пхп-код, а чистый php-код быстрее выполняется, чем разбор строк с поиском MODX-тегов и замены плейсхолдеров результатами
про это в курсе. Я не являюсь активным учасником сообществ, но уроки твои смотрю и пересматриваю регулярно.
Вот у тебя есть вызов [[smarty? &tpl=`index.tpl`]] Ну и сделай другой сниппет, который будет вызывать нужный шаблон. Что-то типа
if(!$tpl = $modx->resource->tv_name){ $tpl = 'index.tpl'; } return $modx->runSnippet(array( "tpl" => $tpl, ));
Тогда можно будет в документе указывать шаблон отображения конкретно для этого документа.
Этот вариант позволит сайту работать быстрее? Или это просто другая реализация моей задачи — тоесть задание определённого шаблона для отдельного ресурса
Это реализация вашей задачи. Один из многих вариантов. Но вам уже выбирать что и как делать, какой вариант более удобен.
Коля давай на ты, а то я не такой уже и старый и мне как то так удобней. Спасибо тебе большое. Ты мне очень помог

Добавить комментарий