[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
12 202
+11

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

Марат Марабар
09 августа 2015, 20:13
0
Тестирую Fenom в MODX? настройка pdotools_fenom_parser включена. Есть уже вызовы, типа
{$modx->getChunk('header')}
Если обновиться — сломается?
    Василий Наумкин
    09 августа 2015, 21:05
    +1
    Нет, если настройка pdotools_fenom_modx включена, то переменная {$modx} доступна как и раньше.
      Марат Марабар
      21 августа 2015, 21:17
      0
      Сейчас функция strftime() не доступна, получается.
      До обновления работали такие конструкции.
      {time()}
      {time()|date_format:"%H:%M"}
      Сейчас же всю страницу ломает.
Виталий Батушев
09 августа 2015, 21:52
0
Пишу
{$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
    0
    Читай внимательнее
    {$_modx->resource} — массив (не объект!) с текущим ресурсом
    А чуть ниже пример вызова.
      Виталий Батушев
      09 августа 2015, 22:25
      +1
      Тьфу, я идиот — это же не объекты, а массивы.
      Григорий Коленько
      10 августа 2015, 16:40
      0
      Наследование это очень круто, спасибо. Правда если подключать чанки через {include 'head'}, то параметры чанка по-умолчанию не отрабатываются
        Василий Наумкин
        10 августа 2015, 16:56
        0
        Подумаю про параметры по умолчанию, спасибо.

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

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

              Ну а так, автор Fenom предусмотрел тег ignore и пропуск выражений типа { expr } — то есть, с пробелами возле скобок.
            Павел Гвоздь
            12 августа 2015, 07:28
            0
            Ещё бы дать возможность запускать сниппеты кешированными и можно полностью заменить стандартный парсер.
              Василий Наумкин
              12 августа 2015, 07:51
              2
              +4
              Возможность такая есть, хоть и не совсем очевидная:
              {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
                1
                +4
                А вообще, это издевательство, конечно!

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

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

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

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

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

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

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

                    Вопрос не конкретно к Павлу, а ко всем.
                Sergey Leleko
                31 августа 2015, 15:10
                0
                Для фенома пхп не ниже 5.4 нужен?
                Sergey Leleko
                31 августа 2015, 15:24
                0
                хм. А почему может эррорить вот так и не выводить ничего?
                [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
                  0
                  Еще один… Ну прочитай ты хоть предыдущие комментарии в этой же теме.

                  Этот вызов не виноват, где-то у тебя там еще есть {id:, что похоже на тег Fenom, но им не является. Ищи и экранируй.
                    Sergey Leleko
                    31 августа 2015, 15:55
                    0
                    ясно, спасибо
                      Sergey Leleko
                      31 августа 2015, 16:02
                      0
                      а яваскрипт может подпадать под обработку? просто нашел яваскрипт который как раз с этого куска и начинается
                        Василий Наумкин
                        31 августа 2015, 16:02
                        0
                        А ты попробуй его убрать и посмотреть, что получится?
                          Sergey Leleko
                          31 августа 2015, 16:12
                          0
                          понял, нашел эти проблемные места просто добавил пробелы в яваскриптах и эти ошибки пропали.
                          Но теперь по сути этого вызова появились аналогичные
                          [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
                            0
                            Ну выше же рабочий пример вызова с массивом. Это прям нереально сложно взять и проверить?

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

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

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

                            Можно ли в подоьном виде использовать её потом. Или нужно будет через $_modx->runSnippet()?
                            [[pdoResources?
                            &parents=`{$relativeCategoryId}`
                            &tpl=`relativeCategoryItem`
                            ]]
                              Воеводский Михаил
                              29 ноября 2015, 01:05
                              0
                              Можно, но зачем? Что мешает переписать вызов сниппета в формате фенома?
                                Андрей
                                29 ноября 2015, 13:22
                                0
                                Конечно не проблема переписать в нужно форме. Просто в таком виде, как я привел, $relativeCategoryId не видна сниппету.
                              Воеводский Михаил
                              29 ноября 2015, 03:38
                              0
                              Пару дней назад хотел предложить добавить в $_modx метод getResource, но забыл об этом. Смотрю сейчас обновление (2.1.17), которое было выпущено не более суток назад — именно этот метод и оказался добавлен.
                              Василий, спасибо!
                              Андрей
                              29 ноября 2015, 19:08
                              0
                              Хочу спросить, кто-нибудь разобрался как подключить fenom к PhpStorm, чтобы не его специфический синтаксис не подчеркивался, как синтаксическая ошибка?
                              Виталий Греков
                              22 декабря 2015, 23:31
                              0
                              есть Чанк (страница товара) в этом Чанке вызывается другой Чанк (таблица характеристик) вызывается он так
                              {$_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
                                0
                                Помогите пожалуйста!
                                Решил попробовать 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
                                  0
                                  Вроде всё ок. Может, кэш нужно почистить, чтобы применились изменения в системных настройках?

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

                                    Да, Вы правы. До этого чистил кэш через админку, а вот удалил вручную и все заработало.
                                    Большое спасибо.
                                  Антон Соловьёв
                                  04 января 2016, 11:24
                                  0
                                  Пробую для теста прописать в шаблоне
                                  {$_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
                                    +1
                                    А теперь вызови этот же сниппет без Fenom и убедись, что он работает точно также. Стоит подумать над тем, откуда берётся description для прибавления, если документ кэшируется — а вдруг из кэша?!

                                    А как например мне вызвать аналог [[!*pagetitle]] т.е. не сниппет, а тег некешированным вызвать?
                                    Теги не кэшируются вообще, а напрямую выводятся данные из $modx->resource. Документация.
                                      Антон Соловьёв
                                      04 января 2016, 12:37
                                      0
                                      Понял, спасибо. Действительно, цифра в дескрипшн обновляется, если смотреть в документ в админке, но через {$_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
                                        0
                                        В смысле «куда-то»? Все ресурсы кэшируются в /core/cache/resource/контекст/resources/айди.cache.php. Если открыть этот файл, то там все параметры ресурса, именно они и выводятся при modX::getObject().

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

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

                                        Лично я всё это заметил, когда пытался сохранять просмотры в ресурс для Tickets. Поэтому там сейчас отдельная таблица просмотров и никаких проблем нет.
                                      Володя
                                      04 января 2016, 12:07
                                      0
                                      замени первую строчку
                                      $doc = $modx->getObject('modResource', $modx->resource->id);
                                    TITAN-UZ
                                    19 января 2016, 00:40
                                    0
                                    Если включить $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
                                      0
                                      А у меня такого нет. Может, кэш?
                                        TITAN-UZ
                                        22 января 2016, 21:00
                                        0
                                        Кэш почистил
                                          nekto
                                          19 августа 2017, 14:52
                                          0
                                          У меня ссылки почему то кешируются.
                                          Если я захожу на первый страницу вставляется
                                          <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
                                            0
                                            Такая же проблема
                                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                        74