kamuz 16 апреля 2015 2 15
Задача состоит в том чтобы быстро менять внешнее оформление целого сайта, при этом в каждом отдельном шаблоне могут быть разная 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 есть определённая выгода, но при этом какой-то разницы в скорости работы я не увидел. Я понимаю что здесь нагрузка минимальная — вывод содержимого одной странички, но всё же.

А теперь сам вопрос — всё ли я делаю правильно?

Если что-то делаю не так, тогда подскажите как нужно.

Тоесть мне нужно назначать отдельный шаблон — отдельным ресурсам.
15 комментариев
k
kamuz 16 апреля 2015г в 20:44 #
Если нужно могу скинуть доступы к сайту, но вроде как всё подробно описал
Fi1osof1
Fi1osof 16 апреля 2015г в 20:52 #
Советую изучить вот это. Там показано как правильно переопределять оформление за счет расширяющих скинов.

но при этом какой-то разницы в скорости работы я не увидел.
А на чем разницу смотреть? Во-первых, сайт вообще пустой. Во-вторых, вызывая через [[smarty? &tpl=`index.tpl`]] практически ничего не меняется, используется родной механизм MODX-а.
Вот мы сейчас выполняли нагрузочное тестирование нашего нового новостного портала на 75 000 пользователей, 2000 пользователей онлайн фигачили, и кратко результаты такие (более подробный отчет я позже напишу, когда мне вышлют логи теста): 43+ тысячи запросов на сервер и только восемь ошибок было. Ни один ответ не превысил секунды. Переведите это на стандартные MODX-теги, и уверяю, разница в скорости будет ощущаться.

А теперь сам вопрос — всё ли я делаю правильно?
Если все работает как вы хотите, вероятно все правильно. Если нет — то нет.
k
kamuz 16 апреля 2015г в 20:57 #
В принципе всё сделал так как написанно в указанной заметке по изменению шаблона. Тоесть я правильно создаю шаблоны для modxSmarty, которые потом могу назначить отдельным ресурсам.

[[smarty? &tpl=`index.tpl`]]
k
kamuz 16 апреля 2015г в 20:58 #
Это был вопрос, а то звучит как утверждение
k
kamuz 16 апреля 2015г в 21:00 #
Пока просто другого варианта я не придумал как можно назначать отдельные шаблоны, отдельным ресурсам
Fi1osof1
Fi1osof 16 апреля 2015г в 21:04 #
Можно через выбор шаблона, а можно создать ТВ-поле, которое будет учитываться при выполнении шаблона.
k
kamuz 16 апреля 2015г в 21:06 #
А вот второй вариан не савсэм понятен. Плюс вопрос — есть ли какое-то преимущество по сравнению с первым вариантом?
Fi1osof1
Fi1osof 16 апреля 2015г в 21:16 #
Есть. В том, что Смарти компиллирует шаблоны в пхп-код, а чистый php-код быстрее выполняется, чем разбор строк с поиском MODX-тегов и замены плейсхолдеров результатами. Но тема эта избита, я не готов ее щас повторно всесторонне пережевывать.
k
kamuz 16 апреля 2015г в 22:02 #
на счёт варианта — я имел это ввиду
можно создать ТВ-поле, которое будет учитываться при выполнении шаблона
Fi1osof1
Fi1osof 16 апреля 2015г в 22:07 #
Вот у тебя есть вызов [[smarty? &tpl=`index.tpl`]]
Ну и сделай другой сниппет, который будет вызывать нужный шаблон. Что-то типа
if(!$tpl = $modx->resource->tv_name){
    $tpl = 'index.tpl';
}
return $modx->runSnippet(array(
    "tpl"    => $tpl,
));

Тогда можно будет в документе указывать шаблон отображения конкретно для этого документа.
k
kamuz 16 апреля 2015г в 22:48 #
Этот вариант позволит сайту работать быстрее? Или это просто другая реализация моей задачи — тоесть задание определённого шаблона для отдельного ресурса
Fi1osof1
Fi1osof 16 апреля 2015г в 22:53 #
Это реализация вашей задачи. Один из многих вариантов. Но вам уже выбирать что и как делать, какой вариант более удобен.
k
kamuz 16 апреля 2015г в 22:58 #
Коля давай на ты, а то я не такой уже и старый и мне как то так удобней. Спасибо тебе большое. Ты мне очень помог
Fi1osof1
Fi1osof 16 апреля 2015г в 22:59 #
ОК.
Пожалуйста.
k
kamuz 16 апреля 2015г в 22:03 #
На счёт
Смарти компиллирует шаблоны в пхп-код, а чистый php-код быстрее выполняется, чем разбор строк с поиском MODX-тегов и замены плейсхолдеров результатами
про это в курсе. Я не являюсь активным учасником сообществ, но уроки твои смотрю и пересматриваю регулярно.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.