[pdoTools] Версия 2.1 - улучшения Fenom

Привет друзья! Хочу представить вам новую версию pdoTools с улучшениями работы шаблонизатора Fenom.

Функциональность vs Безопасность

Я долго думал, как бы разрешить менеджерам запускать чанки и сниппеты, но при этом не пускать их к объектам MODX. Потому что, если включить системную настройку pdotools_fenom_modx, то любой менеджер сможет сделать в чанке вот так:
{if $res = $modx->getObject('modResource', 1)}
	$res->remove();
{/if}
Нам бы этого не хотелось, правда?

С другой стороны, я не хочу придумывать очередной псевдоязык команд, типа
{runSnippet('name', [params => data])}
или
{'name' [params => data] | snippet}
Поэтому я добавил специальную переменную {$_modx}, которая ссылается на небольшой безопасный класс, где есть только нужные менеджерам функции и свойства:
  • {$_modx->placeholders} — массив с системными плейсхолдерами
  • {$_modx->config} — массив с системными настройками
  • {$_modx->context} — массив (не объект!) с текущим контекстом
  • {$_modx->user} — массив (не объект!) с текущим пользователем
  • {$_modx->resource} — массив (не объект!) с текущим ресурсом
  • {$_modx->lexicon} — служба загрузки лексиконов
  • {$_modx->lexicon()} — функция для вывода строки из лексикона
  • {$_modx->runSnippet()} — запуск сниппета
  • {$_modx->runProcessor()} — запуск процессора
  • {$_modx->getChunk()} — вывод чанка
  • и т.д., смотрите исходник.

Немного примеров:
{$_modx->runSnippet('pdoMenu', [
    'parents' => 0,
    'level' => 2
])}

<p>
{$_modx->lexicon->load('ms2gallery:default')}
Проверка словарей ms2Gallery: {$_modx->lexicon('ms2gallery_err_gallery_exists')}
</p>

<p>
{if $_modx->isAuthenticated('web')}
    Привет, {$_modx->user.fullname}!
{else}
    Вам нужно авторизоваться =(
{/if}
</p>

<p>Текущий контекст: {$_modx->context.key}</p>
Таким образом, теперь можно использовать основные функции MODX из Fenom безопасно, не давая доступ к ядру сайта менеджерам и не рискуя удалением объектов из чанков.

В отличии от {$modx}, {$_modx} доступен всегда, во все чанках и не зависит от системных настроек. Он просто добавяляет нужные фукнции от MODX шаблонизатору, чтобы можно было выводить данные текущего юзера или ресурса.

Есть еще одна подобная служебная переменная (просто напоминаю) — {$_pls}, в ней вы можете найти все значения, переданные в чанк сниппетом.

Расширение шаблонов

Второе большое изменение — внедрение собственного провайдера шаблонов в Fenom, чтобы он научился самостоятельно загружать и использовать чанки MODX.

Теперь вы можете делать в своих чанках и шаблонах вот так:
{include 'имя чанка'}
или
{include 'template:имя шаблона'}
Подробнее про include в документации автора, но лично мне было интереснее, чтобы заработал extends.

Включаем системную настройку pdotools_fenom_parser и пишем новый шаблон Fenom Base:
<!DOCTYPE html>
<html lang="en">
<head>
	{include 'head'}
</head>
<body>
	{block 'navbar'}
		{include 'navbar'}
	{/block}
	<div class="container">
		<div class="row">
			<div class="col-md-10">
				{block 'content'}
				    {$_modx->resource.content}
				{/block}
			</div>
			<div class="col-md-2">
				{block 'sidebar'}
					Sidebar
				{/block}
			</div>
		</div>
		{block 'footer'}
        		{include 'footer'}
		{/block}
	</div>
</body>
</html>
Как видите, он включает обычные чанки (в которых, кстати, обычные плейсхолдеры MODX от Theme.Bootstrap) и определяет несколько блоков (block), которые можно расширить в другом шаблоне!

Пишем второй шаблон Fenom Extended:
{extends 'template:Fenom Base'}

{block 'content'}
    <h3>{$_modx->resource.pagetitle}</h3>
    <div class="jumbotron">
	    {parent}
    </div>
{/block}
Здесь происходит расширение базового шаблона — меняется блок с контентом страницы.

Теперь проверяем один и тот же ресурс, назначая ему эти шаблоны по очереди:
Теперь вы можете написать один базовый шаблон и расширить его дочерними. Точно также можно писать и расширять чанки, только обратите внимание, что для работы с modTemplate нужно указывать префикс template:, а для чанков нет — они работают по умолчанию во всех include и extends.

Более подробно работу с Fenom я освещал на последнем платном курсе занятий, так что повторяться не буду.

Заключение

Пока англоязычное сообщество спорит, каким должен быть MODX 3, мы продолжаем работать с MODX 2.3 и наращивать его функционал дополнениями.

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

Обновляемся, тестируем, пишем о багах. Не забудьте обновить и редактор Ace, чтобы появилась подсветка синтаксиса Fenom!


Обновление от 12.08.2015

С версии 2.1.1-pl, все обычные вызовы сниппетов становятся кэшированными:
{$_modx->runSnippet('pdoResources')}

Некэшированный вызов, понятно дело, вот такой:
{$_modx->runSnippet('!pdoResources')}

Также добавил поддержку наборов параметров:
{$_modx->getChunk('Name@PropertySet')}
{$_modx->runSnippet('NameName@PropertySet')}

{include 'Name@PropertySet'}
{include 'template:TemplateName@PropertySet'}
Если набор параметров не указан, то чанкам и шаблонам подгружается «умолчательный».

И pdoParser, наконец-то, больше не считается экспериментальным и включен по умолчанию.
Василий Наумкин
Василий Наумкин
09 августа 2015, 12:17
modx.pro
13 723
Реклама

Комментарии: 74

Марат Марабар
Марат Марабар Старожил
09 августа 2015, 20:13
Тестирую Fenom в MODX? настройка pdotools_fenom_parser включена. Есть уже вызовы, типа
{$modx->getChunk('header')}
Если обновиться — сломается?
    Василий Наумкин
    Василий Наумкин Администратор
    09 августа 2015, 21:05
    Нет, если настройка pdotools_fenom_modx включена, то переменная {$modx} доступна как и раньше.
      Марат Марабар
      Марат Марабар Старожил
      21 августа 2015, 21:17
      Сейчас функция strftime() не доступна, получается.
      До обновления работали такие конструкции.
      {time()}
      {time()|date_format:"%H:%M"}
      Сейчас же всю страницу ломает.
        Василий Наумкин
        Василий Наумкин Администратор
        22 августа 2015, 02:00
        Включи pdotools_fenom_php — это оно.
    Виталий Батушев
    09 августа 2015, 21:52
    Пишу
    {$modx->resource->pagetitle}
    Работает.
    Пишу
    {$_modx->resource->pagetitle}
    Не работает.
    В логе пишет:
    [2015-08-09 21:49:57] (ERROR @ /index.php) Unexpected token ':' in dbccdb164f95db466d6a1767b77d8439 line 100, near '{"published":' <- there
    [2015-08-09 21:49:57] (ERROR @ /index.php) Unexpected tag 'id' in eb0d35336142950cde89e17358f5feb1 line 492, near '{id:' <- there
    [2015-08-09 21:49:57] (ERROR @ /index.php) Unexpected tag 'id' in eb0d35336142950cde89e17358f5feb1 line 492, near '{id:' <- there
      Василий Наумкин
      Василий Наумкин Администратор
      09 августа 2015, 22:06
      Читай внимательнее
      {$_modx->resource} — массив (не объект!) с текущим ресурсом
      А чуть ниже пример вызова.
        Виталий Батушев
        09 августа 2015, 22:25
        Тьфу, я идиот — это же не объекты, а массивы.
        Григорий Коленько
        10 августа 2015, 16:40
        Наследование это очень круто, спасибо. Правда если подключать чанки через {include 'head'}, то параметры чанка по-умолчанию не отрабатываются
          Василий Наумкин
          Василий Наумкин Администратор
          10 августа 2015, 16:56
          Подумаю про параметры по умолчанию, спасибо.

          Пока что можно передавать свои переменные прямо при вызове include — смотри документацию Fenom.
            Василий Наумкин
            Василий Наумкин Администратор
            12 августа 2015, 09:32
            В версии 2.1.1-pl поддерживаются наборы параметров и значения по умолчанию — см. обновление внизу заметки.
          Павел Гвоздь
          Павел Гвоздь Старожил
          11 августа 2015, 07:40
          Замечательное обновление, которое я давно ждал. Спасибо, Василий, ты как всегда во время!
            Григорий Коленько
            11 августа 2015, 20:48
            Обнаружил еще такую багу:
            в чанке, который вызывается через инклюд
            [[pdoResources?
                        &parents=`19`
                        &depth=`0`
                        &tpl=`slider.row`
                        &where=`{"isfolder":1}`
            
                        ]]
            из-за строчки &where=`{«isfolder»:1}` все крашится
              Василий Наумкин
              Василий Наумкин Администратор
              11 августа 2015, 21:00
              Прям бага-бага!

              Документацию к Fenom хоть почитай, что ли.
                Василий Наумкин
                Василий Наумкин Администратор
                12 августа 2015, 05:48
                Вот, проверил — можно даже прямо массивы указывать, безо всяких JSON:
                {$_modx->runSnippet('pdoResources', [
                    'parents' => 19,
                    'depth' => 0,
                    'where' => ['isfolder' => 0],
                    'showLog' => 1,
                ])}

                Ну а так, автор Fenom предусмотрел тег ignore и пропуск выражений типа { expr } — то есть, с пробелами возле скобок.
                  Григорий Коленько
                  12 августа 2015, 10:21
                  А, про тег игнор я что-то забыл. Спасибо.
                Павел Гвоздь
                Павел Гвоздь Старожил
                12 августа 2015, 07:28
                Ещё бы дать возможность запускать сниппеты кешированными и можно полностью заменить стандартный парсер.
                  Василий Наумкин
                  Василий Наумкин Администратор
                  12 августа 2015, 07:51
                  Возможность такая есть, хоть и не совсем очевидная:
                  {if !$snippet = $_modx->cacheManager->get('cache_key')}
                      {set $snippet = $_modx->runSnippet('pdoResources', [
                          'parents' => 0,
                          'tpl' => '@INLINE {$id} - {$pagetitle}',
                          'showLog' => 1,
                      ])}
                      {set $null = $_modx->cacheManager->set('cache_key', $snippet, 1800)}
                  {/if}
                  
                  {$snippet}
                  С одной стороны — нужно самому управлять кэшем, а с другой стороны — можно произвольно задавать параметры кэширования: ключ, время кэширования (в примере полчаса) и т.д.
                  Посмотреть этот кэш можно в /core/cache/default/.

                  set $null
                  при выставлении кэша нужно, чтобы не выводилась 1 при успешной работе $_modx->cacheManager->set.
                    Василий Наумкин
                    Василий Наумкин Администратор
                    12 августа 2015, 09:26
                    А вообще, это издевательство, конечно!

                    С версии 2.1.1-pl, все обычные вызовы сниппетов становятся кэшированными:
                    {$_modx->runSnippet('pdoResources')}

                    Некэшированный вызов, понятно дело, вот такой:
                    {$_modx->runSnippet('!pdoResources')}
                    Можно обновляться.

                    Если очень хочется самому управлять кэшем — то верхний пример по-прежнему работает.
                      Павел Гвоздь
                      Павел Гвоздь Старожил
                      12 августа 2015, 13:22
                      Великолепно! С Fenom-ом, особенно с крайней версией pdoTools, MODX Revo стал совершенно иным. Гораздо удобнее и лучше! Хотелось бы, чтоб разработчики в 3 версии позаботились о шаблонизаторе из коробки.

                      Спасибо за нововведения, Василий!
                        Василий Наумкин
                        Василий Наумкин Администратор
                        12 августа 2015, 13:26
                        Насколько я знаю, они планирует сделать работу через Composer.

                        Это привнесёт поддержку не только Fenom, но и еще тысяч других классов и шаблонизаторов.
                  Павел Гвоздь
                  Павел Гвоздь Старожил
                  13 августа 2015, 10:36
                  Помоему нашёл баг. Когда использую Minifyx не кешированный — {$_modx->runSnippet('!MinifyX' — всё норм. Когда кешированный — первый запуск — норм, последующие — не выводит. Будто вообще не срабатывает этот сниппет.
                    TITAN-UZ
                    TITAN-UZ Старожил
                    21 января 2016, 00:09
                    Решили проблему?
                      Павел Гвоздь
                      Павел Гвоздь Старожил
                      21 января 2016, 07:26
                      Это к Василию. Я отключаю настройку cache_resource и этот баг пропадает, насколько я помню.
                        Роман Садоян
                        Роман Садоян Старожил
                        27 февраля 2016, 13:16
                        Переписываю сайт на феном, проблема по прежнему присутствует. Если отключать настройку cache_resource то ресурсы не будут кэшироваться на всём сайте.

                        Как быть если необходимо кэширование ресурсов?

                        Причем. На некоторых страницах некэшированный вызов {$_modx->runSnippet('MinifyX' отрабатывает нормально.

                        Вопрос не конкретно к Павлу, а ко всем.
                    Sergey Leleko
                    Sergey Leleko Старожил
                    31 августа 2015, 15:10
                    Для фенома пхп не ниже 5.4 нужен?
                    Sergey Leleko
                    Sergey Leleko Старожил
                    31 августа 2015, 15:24
                    хм. А почему может эррорить вот так и не выводить ничего?
                    [2015-08-31 15:23:10] (ERROR @ /index.php) Unexpected tag 'id' in 079514a82982ed70e4d46eeed06b9ffc line 542, near '{id:' <- there
                    а сам вызов:
                    {$_modx->runSnippet('pdoResources', array(
                            'parents' => 2,
                            'prepareTVs' => 1,
                            'includeTVs' => 'price,image,new',
                            'limit' => 10,
                            'tpl' => 'productTpl',
                            'showLog' => true,
                            'where' => json_encode(
                                                array("template" => 3, 
                                                    "new" => 1
                                                        )
                                                    )
                           ))}
                      Василий Наумкин
                      Василий Наумкин Администратор
                      31 августа 2015, 15:44
                      Еще один… Ну прочитай ты хоть предыдущие комментарии в этой же теме.

                      Этот вызов не виноват, где-то у тебя там еще есть {id:, что похоже на тег Fenom, но им не является. Ищи и экранируй.
                        Sergey Leleko
                        Sergey Leleko Старожил
                        31 августа 2015, 15:55
                        ясно, спасибо
                          Sergey Leleko
                          Sergey Leleko Старожил
                          31 августа 2015, 16:02
                          а яваскрипт может подпадать под обработку? просто нашел яваскрипт который как раз с этого куска и начинается
                            Василий Наумкин
                            Василий Наумкин Администратор
                            31 августа 2015, 16:02
                            А ты попробуй его убрать и посмотреть, что получится?
                              Sergey Leleko
                              Sergey Leleko Старожил
                              31 августа 2015, 16:12
                              понял, нашел эти проблемные места просто добавил пробелы в яваскриптах и эти ошибки пропали.
                              Но теперь по сути этого вызова появились аналогичные
                              [2015-08-31 16:10:10] (ERROR @ /index.php) Unexpected token 'array' in argument list in fdf6dbbf3bad08067ea6f10375cbf820 line 1092, near '{$_modx->runSnippet('pdoResources', array' <- there
                              Пхп у меня как раз 5.3 и я так думаю квадратными скобками я не смогу воспользоваться
                                Василий Наумкин
                                Василий Наумкин Администратор
                                31 августа 2015, 16:16
                                Ну выше же рабочий пример вызова с массивом. Это прям нереально сложно взять и проверить?

                                Если ты решил, что здесь чистый синтаксис PHP, то ты не прав — это синтаксис Fenom и указание массивов как ['key' => 'value'] не требует PHP 5.4
                                  Sergey Leleko
                                  Sergey Leleko Старожил
                                  31 августа 2015, 16:51
                                  Понятно, спасибо. Все получилось!
                        Alexander V
                        Alexander V Старожил
                        11 октября 2015, 11:54
                        Василий, а можно ли в шаблоне с помощью Fenom вызвать чанк из файла, не создаваю его в админке, как статический?
                        Немного сумасшедший эксперимент провожу, хочу перевести все чанки и шаблоны на файлы.
                          Василий Наумкин
                          Василий Наумкин Администратор
                          11 октября 2015, 11:58
                          Конечно:
                          {$chunk = $_modx->getChunk('@FILE my_chunk.tpl')}

                          Файл my_chunk.tpl должен лежать в MODX_ASSETS_PATH. 'elements/chunks/', то есть, по умолчанию, в /assets/elements/chunks/.
                            Alexander V
                            Alexander V Старожил
                            11 октября 2015, 12:08
                            &tplPath не получится указать, как в pdoTools?
                              Василий Наумкин
                              Василий Наумкин Администратор
                              11 октября 2015, 12:15
                              В методе getChunk его просто негде указывать, но можно написать свой сниппет, который будет запускать pdoTools, менять в нём tplPath и возвращать $pdoTools->getChunk(имячанка);

                              Дальше всё примерно так же:
                              {$chunk = $_modx->runSnippet('getChunk', [
                              	'chunk' => 'mychunk.tpl',
                              	'tplPath' => '/my/path/'
                              ])}
                                Alexander V
                                Alexander V Старожил
                                11 октября 2015, 12:25
                                Василий, подскажи пожалуйста, как я могу добавить к пути системную настройку?
                                {$_modx->config.site_template}, чтобы получить @FILE [[++site_template]]/my_chunk.tpl
                                  Alexander V
                                  Alexander V Старожил
                                  11 октября 2015, 12:59
                                  Решил малость по-другому.
                                    Павел Гвоздь
                                    Павел Гвоздь Старожил
                                    11 октября 2015, 19:47
                                    {$chunk = $_modx->getChunk('@FILE '~ $_modx->config.site_template ~'/my_chunk.tpl', [])}
                            Alexander V
                            Alexander V Старожил
                            13 октября 2015, 23:28
                            Вот такой фокус не прокатил с @FILE. Так и должно быть?
                            {$_modx->runSnippet('!HybridAuth', [
                            'providers' => 'Yandex',
                            'logoutTpl' => '@FILE hybridauth/tpl.HybridAuth.logout.tpl'
                            ]
                            )}
                              Максим Кузнецов
                              17 ноября 2015, 12:55
                              Можно ли каким-либо образом указать методу makeUrl() параметр schema, по аналогии с [[~[[*id]]? &scheme=`full`]]?
                              Василий Столейков
                              26 ноября 2015, 20:40
                              В плагине на OnPageNotFound посылаю письмо и подтягиваю body из чанка. Так вот, этот чанк не понимает Fenom! Подозреваю, что феном подгружается чуть позже.
                              Как использовать Fenom в чанках из-под плагина? В каком событии?
                                Василий Столейков
                                26 ноября 2015, 20:51
                                Интересно что обычные MODX плейсхолдеры работают без проблем.
                                Андрей
                                Андрей Старожил
                                28 ноября 2015, 23:06
                                Подскажите плиз. Если присвоить переменной значение
                                {set $relativeCategoryId = $_modx->config['some_category_id']}

                                Можно ли в подоьном виде использовать её потом. Или нужно будет через $_modx->runSnippet()?
                                [[pdoResources?
                                &parents=`{$relativeCategoryId}`
                                &tpl=`relativeCategoryItem`
                                ]]
                                  Воеводский Михаил
                                  29 ноября 2015, 01:05
                                  Можно, но зачем? Что мешает переписать вызов сниппета в формате фенома?
                                    Андрей
                                    Андрей Старожил
                                    29 ноября 2015, 13:22
                                    Конечно не проблема переписать в нужно форме. Просто в таком виде, как я привел, $relativeCategoryId не видна сниппету.
                                  Воеводский Михаил
                                  29 ноября 2015, 03:38
                                  Пару дней назад хотел предложить добавить в $_modx метод getResource, но забыл об этом. Смотрю сейчас обновление (2.1.17), которое было выпущено не более суток назад — именно этот метод и оказался добавлен.
                                  Василий, спасибо!
                                  Андрей
                                  Андрей Старожил
                                  29 ноября 2015, 19:08
                                  Хочу спросить, кто-нибудь разобрался как подключить fenom к PhpStorm, чтобы не его специфический синтаксис не подчеркивался, как синтаксическая ошибка?
                                  Виталий Греков
                                  Виталий Греков Старожил
                                  22 декабря 2015, 23:31
                                  есть Чанк (страница товара) в этом Чанке вызывается другой Чанк (таблица характеристик) вызывается он так
                                  {$_modx->getChunk('demo.propert')}
                                  просто этот Чанк еще используется для вывода на отдельный tab с помощью AjaxSnippet вот код вызова
                                  {$_modx->runSnippet('AjaxSnippet@PropertySet', ['snippet' => 'msProducts',  'element' => 'pdoResources', 'parents' => 0, 'limit' => 1, 'as_target' => '#propert', 'as_mode' => 'onload', 'wrapper' => 'ajax_obert', 'tpl' => 'demo.propert',])}
                                  Возникла проблема с выводом в Чанк и через AjaxSnippet, если прописываю в demo.propert
                                  <dd><a href="{$_modx->makeUrl($_pls['vendor.resource'])}">текст</a> ({$_pls['vendor.name']})</dd>
                                  то в Чанке товара не выводится а через AjaxSnippet все в порядке
                                  прописывал еще так
                                  {$_modx->getPlaceholder('vendor.name')}
                                  в этом случае наоборот в Чанке в порядке а через AjaxSnippet не выводит.
                                  Подскажите пожалуйста решение.
                                    Алексей
                                    Алексей Старожил
                                    24 декабря 2015, 18:17
                                    Помогите пожалуйста!
                                    Решил попробовать fenom на своем сайте, в результате fenom работает при вызове pdoPage, но не работает на страницах и шаблонах сайта. Пытался выводить следующее:
                                    {$_modx->resource.id}
                                    {$_modx->makeUrl(15)}
                                    {$_modx->config.site_name}
                                    {if true}
                                        <p>Привет</p>
                                    {else}
                                        <p>Пока</p>
                                    {/if}
                                    Собственно все это он и выводит на странице как есть, без включения парсера. Настройки вроде правильные:
                                    parser_class-pdoParser
                                    parser_class_path-{core_path}components/pdotools/model/pdotools/
                                    pdotools_fenom_cache-Нет
                                    pdotools_fenom_default-Да
                                    pdotools_fenom_modx-Да
                                    pdotools_fenom_parser-Да
                                    pdotools_fenom_php-Нет
                                    Версия pdoTools — 2.1.20-pl
                                    Почитал форум, про подобные проблемы и конфликты со скобками, создал пустой шаблон и создал ресурс на этом шаблоне с тем, что писал выше и результат тот же — выводит как есть. Подозреваю, что что то с настройками.
                                      Василий Наумкин
                                      Василий Наумкин Администратор
                                      24 декабря 2015, 18:21
                                      Вроде всё ок. Может, кэш нужно почистить, чтобы применились изменения в системных настройках?

                                      И еще журнал ошибок проверить, может где-то правило неверное.
                                        Алексей
                                        Алексей Старожил
                                        24 декабря 2015, 18:25
                                        Журнал ошибок был чист, лог левел стоял на дебаг.

                                        Да, Вы правы. До этого чистил кэш через админку, а вот удалил вручную и все заработало.
                                        Большое спасибо.
                                      Антон Соловьёв
                                      Антон Соловьёв Старожил
                                      04 января 2016, 11:24
                                      Пробую для теста прописать в шаблоне
                                      {$_modx->runSnippet('!test')}
                                      Код сниппета test
                                      $doc = $modx->resource;
                                      $desc = (int) $doc->get('description');
                                      $doc->set('description',++$desc);
                                      $doc->save();
                                      По задумке сниппет должен считать обновления страницы, чисто чтобы видно было, что каждое обновление — сработал некешируемый сниппет. Но сниппет кешируется и считает только если в документе убрать галко «Кэшируемый» или просто перед каждым обновлением руками обновлять кеш.
                                      А как например мне вызвать аналог [[!*pagetitle]] т.е. не сниппет, а тег некешированным вызвать? В смарти есть такая штука {nocache}
                                      В fenom чет ничего подобного не вижу github.com/fenom-template/fenom/blob/master/docs/ru/readme.md
                                      Версия модх 2.4.2-pl, последняя. Версия пдотулз тоже крайняя.
                                        Василий Наумкин
                                        Василий Наумкин Администратор
                                        04 января 2016, 11:58
                                        А теперь вызови этот же сниппет без Fenom и убедись, что он работает точно также. Стоит подумать над тем, откуда берётся description для прибавления, если документ кэшируется — а вдруг из кэша?!

                                        А как например мне вызвать аналог [[!*pagetitle]] т.е. не сниппет, а тег некешированным вызвать?
                                        Теги не кэшируются вообще, а напрямую выводятся данные из $modx->resource. Документация.
                                          Антон Соловьёв
                                          Антон Соловьёв Старожил
                                          04 января 2016, 12:37
                                          Понял, спасибо. Действительно, цифра в дескрипшн обновляется, если смотреть в документ в админке, но через {$_modx->resource.description} || [[!*description]] выводится кешированное значение почему-то. Т.е. в дескрипшине уже 32, а на странице выводится только 1 || 1. И при этом, если выводить тупо через echo дескрипшн сниппетом, то да, при каждом обновлении страницы — новое значение.
                                          Значит, данные там в $modx->resource кешируются как-то? Занятно.
                                          Написал второй сниппет test2 с таким содержимом
                                          echo $modx->getObject('modResource', $modx->resource->id)->description;
                                          и вызвал его не кешированным.
                                          Адекватно показывает свежее состояние description.
                                          При этом, $modx->resource->description содержит старое значение.
                                            Василий Наумкин
                                            Василий Наумкин Администратор
                                            04 января 2016, 12:43
                                            В смысле «куда-то»? Все ресурсы кэшируются в /core/cache/resource/контекст/resources/айди.cache.php. Если открыть этот файл, то там все параметры ресурса, именно они и выводятся при modX::getObject().

                                            Для этого и придуман параметр cacheable — сохранять данные в кэш, или нет. Многие думают, что там только кэшированные сниппеты или шаблон страницы, но нет — там все свойства объекта.

                                            И да, кэш ресурсов очищается при их сохранении в админке, может поэтому у тебя там иногда обновляются данные.

                                            Лично я всё это заметил, когда пытался сохранять просмотры в ресурс для Tickets. Поэтому там сейчас отдельная таблица просмотров и никаких проблем нет.
                                          Володя
                                          Володя Старожил
                                          04 января 2016, 12:07
                                          замени первую строчку
                                          $doc = $modx->getObject('modResource', $modx->resource->id);
                                            Антон Соловьёв
                                            Антон Соловьёв Старожил
                                            04 января 2016, 12:13
                                            Да вроде пробовал уже, однохренственно.
                                          TITAN-UZ
                                          TITAN-UZ Старожил
                                          19 января 2016, 00:40
                                          Если включить $pageLinkScheme то выводить в header 2 разных link -> prev, link -> next
                                          <link rel="prev" href="news/page/3"/>
                                          <link rel="next" href="news/page/5"/>
                                          <link rel="prev" href="news/page/4?page=3"/>
                                          <link rel="next" href="news/page/4?page=5"/>
                                          Как убрать эту часть
                                          <link rel="prev" href="news/page/4?page=3"/>
                                          <link rel="next" href="news/page/4?page=5"/>
                                            Василий Наумкин
                                            Василий Наумкин Администратор
                                            20 января 2016, 06:14
                                            А у меня такого нет. Может, кэш?
                                              TITAN-UZ
                                              TITAN-UZ Старожил
                                              22 января 2016, 21:00
                                              Кэш почистил
                                                nekto
                                                nekto Старожил
                                                19 августа 2017, 14:52
                                                У меня ссылки почему то кешируются.
                                                Если я захожу на первый страницу вставляется
                                                <link rel="next" href="o-nas/novosti/page-2/"/>
                                                Но если потом захожу на page-2, то вставляется
                                                <link rel="next" href="o-nas/novosti/page-2/"/>
                                                <link rel="prev" href="o-nas/novosti/page-1/"/>
                                                <link rel="next" href="o-nas/novosti/page-3/"/>
                                                Никто не сталкивался с таким?
                                                  Павел
                                                  Павел Старожил
                                                  25 сентября 2017, 19:25
                                                  Такая же проблема
                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                              74