[pdoTools] Версия 2.1 - улучшения Fenom
Привет друзья! Хочу представить вам новую версию pdoTools с улучшениями работы шаблонизатора Fenom.
С другой стороны, я не хочу придумывать очередной псевдоязык команд, типа
Немного примеров:
В отличии от {$modx}, {$_modx} доступен всегда, во все чанках и не зависит от системных настроек. Он просто добавяляет нужные фукнции от MODX шаблонизатору, чтобы можно было выводить данные текущего юзера или ресурса.
Есть еще одна подобная служебная переменная (просто напоминаю) — {$_pls}, в ней вы можете найти все значения, переданные в чанк сниппетом.
Теперь вы можете делать в своих чанках и шаблонах вот так:
Включаем системную настройку pdotools_fenom_parser и пишем новый шаблон Fenom Base:
Пишем второй шаблон Fenom Extended:
Теперь проверяем один и тот же ресурс, назначая ему эти шаблоны по очереди:
Теперь вы можете написать один базовый шаблон и расширить его дочерними. Точно также можно писать и расширять чанки, только обратите внимание, что для работы с modTemplate нужно указывать префикс template:, а для чанков нет — они работают по умолчанию во всех include и extends.
Более подробно работу с Fenom я освещал на последнем платном курсе занятий, так что повторяться не буду.
Теперь вы можете писать довольно продвинутые чанки и шаблоны на своих сайтах, используя не только более удобный синтаксис, но и философию наследования и расширения.
Обновляемся, тестируем, пишем о багах. Не забудьте обновить и редактор Ace, чтобы появилась подсветка синтаксиса Fenom!
Некэшированный вызов, понятно дело, вот такой:
Также добавил поддержку наборов параметров:
И pdoParser, наконец-то, больше не считается экспериментальным и включен по умолчанию.
Функциональность 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, наконец-то, больше не считается экспериментальным и включен по умолчанию.
Комментарии: 74
Тестирую Fenom в MODX? настройка pdotools_fenom_parser включена. Есть уже вызовы, типа
{$modx->getChunk('header')}
Если обновиться — сломается?
Нет, если настройка pdotools_fenom_modx включена, то переменная {$modx} доступна как и раньше.
Сейчас функция strftime() не доступна, получается.
До обновления работали такие конструкции.
До обновления работали такие конструкции.
{time()}
{time()|date_format:"%H:%M"}
Сейчас же всю страницу ломает.
Включи pdotools_fenom_php — это оно.
Пишу
Пишу
В логе пишет:
{$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
Читай внимательнее
{$_modx->resource} — массив (не объект!) с текущим ресурсомА чуть ниже пример вызова.
Тьфу, я идиот — это же не объекты, а массивы.
Наследование это очень круто, спасибо. Правда если подключать чанки через {include 'head'}, то параметры чанка по-умолчанию не отрабатываются
Подумаю про параметры по умолчанию, спасибо.
Пока что можно передавать свои переменные прямо при вызове include — смотри документацию Fenom.
Пока что можно передавать свои переменные прямо при вызове include — смотри документацию Fenom.
В версии 2.1.1-pl поддерживаются наборы параметров и значения по умолчанию — см. обновление внизу заметки.
Это замечательно. Спасибо
Замечательное обновление, которое я давно ждал. Спасибо, Василий, ты как всегда во время!
Обнаружил еще такую багу:
в чанке, который вызывается через инклюд
в чанке, который вызывается через инклюд
[[pdoResources?
&parents=`19`
&depth=`0`
&tpl=`slider.row`
&where=`{"isfolder":1}`
]]
из-за строчки &where=`{«isfolder»:1}` все крашится
Прям бага-бага!
Документацию к Fenom хоть почитай, что ли.
Документацию к Fenom хоть почитай, что ли.
Вот, проверил — можно даже прямо массивы указывать, безо всяких JSON:
Ну а так, автор Fenom предусмотрел тег ignore и пропуск выражений типа { expr } — то есть, с пробелами возле скобок.
{$_modx->runSnippet('pdoResources', [
'parents' => 19,
'depth' => 0,
'where' => ['isfolder' => 0],
'showLog' => 1,
])}
Ну а так, автор Fenom предусмотрел тег ignore и пропуск выражений типа { expr } — то есть, с пробелами возле скобок.
А, про тег игнор я что-то забыл. Спасибо.
Ещё бы дать возможность запускать сниппеты кешированными и можно полностью заменить стандартный парсер.
Возможность такая есть, хоть и не совсем очевидная:
Посмотреть этот кэш можно в /core/cache/default/.
{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.
А вообще, это издевательство, конечно!
С версии 2.1.1-pl, все обычные вызовы сниппетов становятся кэшированными:
Некэшированный вызов, понятно дело, вот такой:
Если очень хочется самому управлять кэшем — то верхний пример по-прежнему работает.
С версии 2.1.1-pl, все обычные вызовы сниппетов становятся кэшированными:
{$_modx->runSnippet('pdoResources')}
Некэшированный вызов, понятно дело, вот такой:
{$_modx->runSnippet('!pdoResources')}
Можно обновляться.Если очень хочется самому управлять кэшем — то верхний пример по-прежнему работает.
Великолепно! С Fenom-ом, особенно с крайней версией pdoTools, MODX Revo стал совершенно иным. Гораздо удобнее и лучше! Хотелось бы, чтоб разработчики в 3 версии позаботились о шаблонизаторе из коробки.
Спасибо за нововведения, Василий!
Спасибо за нововведения, Василий!
Насколько я знаю, они планирует сделать работу через Composer.
Это привнесёт поддержку не только Fenom, но и еще тысяч других классов и шаблонизаторов.
Это привнесёт поддержку не только Fenom, но и еще тысяч других классов и шаблонизаторов.
Помоему нашёл баг. Когда использую Minifyx не кешированный — {$_modx->runSnippet('!MinifyX' — всё норм. Когда кешированный — первый запуск — норм, последующие — не выводит. Будто вообще не срабатывает этот сниппет.
Решили проблему?
Это к Василию. Я отключаю настройку cache_resource и этот баг пропадает, насколько я помню.
Переписываю сайт на феном, проблема по прежнему присутствует. Если отключать настройку cache_resource то ресурсы не будут кэшироваться на всём сайте.
Как быть если необходимо кэширование ресурсов?
Причем. На некоторых страницах некэшированный вызов {$_modx->runSnippet('MinifyX' отрабатывает нормально.
Вопрос не конкретно к Павлу, а ко всем.
Как быть если необходимо кэширование ресурсов?
Причем. На некоторых страницах некэшированный вызов {$_modx->runSnippet('MinifyX' отрабатывает нормально.
Вопрос не конкретно к Павлу, а ко всем.
Для фенома пхп не ниже 5.4 нужен?
Нет, 5.3.
хм. А почему может эррорить вот так и не выводить ничего?
[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
)
)
))}
Еще один… Ну прочитай ты хоть предыдущие комментарии в этой же теме.
Этот вызов не виноват, где-то у тебя там еще есть {id:, что похоже на тег Fenom, но им не является. Ищи и экранируй.
Этот вызов не виноват, где-то у тебя там еще есть {id:, что похоже на тег Fenom, но им не является. Ищи и экранируй.
ясно, спасибо
а яваскрипт может подпадать под обработку? просто нашел яваскрипт который как раз с этого куска и начинается
А ты попробуй его убрать и посмотреть, что получится?
понял, нашел эти проблемные места просто добавил пробелы в яваскриптах и эти ошибки пропали.
Но теперь по сути этого вызова появились аналогичные
Но теперь по сути этого вызова появились аналогичные
[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 и я так думаю квадратными скобками я не смогу воспользоваться
Ну выше же рабочий пример вызова с массивом. Это прям нереально сложно взять и проверить?
Если ты решил, что здесь чистый синтаксис PHP, то ты не прав — это синтаксис Fenom и указание массивов как ['key' => 'value'] не требует PHP 5.4
Если ты решил, что здесь чистый синтаксис PHP, то ты не прав — это синтаксис Fenom и указание массивов как ['key' => 'value'] не требует PHP 5.4
Понятно, спасибо. Все получилось!
Василий, а можно ли в шаблоне с помощью Fenom вызвать чанк из файла, не создаваю его в админке, как статический?
Немного сумасшедший эксперимент провожу, хочу перевести все чанки и шаблоны на файлы.
Немного сумасшедший эксперимент провожу, хочу перевести все чанки и шаблоны на файлы.
Конечно:
Файл my_chunk.tpl должен лежать в MODX_ASSETS_PATH. 'elements/chunks/', то есть, по умолчанию, в /assets/elements/chunks/.
{$chunk = $_modx->getChunk('@FILE my_chunk.tpl')}
Файл my_chunk.tpl должен лежать в MODX_ASSETS_PATH. 'elements/chunks/', то есть, по умолчанию, в /assets/elements/chunks/.
&tplPath не получится указать, как в pdoTools?
В методе getChunk его просто негде указывать, но можно написать свой сниппет, который будет запускать pdoTools, менять в нём tplPath и возвращать $pdoTools->getChunk(имячанка);
Дальше всё примерно так же:
Дальше всё примерно так же:
{$chunk = $_modx->runSnippet('getChunk', [
'chunk' => 'mychunk.tpl',
'tplPath' => '/my/path/'
])}
Василий, подскажи пожалуйста, как я могу добавить к пути системную настройку?
{$_modx->config.site_template}, чтобы получить @FILE [[++site_template]]/my_chunk.tpl
{$_modx->config.site_template}, чтобы получить @FILE [[++site_template]]/my_chunk.tpl
Решил малость по-другому.
{$chunk = $_modx->getChunk('@FILE '~ $_modx->config.site_template ~'/my_chunk.tpl', [])}
Вот такой фокус не прокатил с @FILE. Так и должно быть?
{$_modx->runSnippet('!HybridAuth', [
'providers' => 'Yandex',
'logoutTpl' => '@FILE hybridauth/tpl.HybridAuth.logout.tpl'
]
)}
Можно ли каким-либо образом указать методу makeUrl() параметр schema, по аналогии с [[~[[*id]]? &scheme=`full`]]?
Функция принимает несколько параметров на вход. Выбирай.
github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/_micromodx.php#L143
github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/_micromodx.php#L143
спасибо)
подскажите, как правильно параметр
&scheme=`full`
применить в этой ситуации {$_modx->makeUrl($_modx->resource.parent)}
Задайте 2 и 3 параметр пустыми строками, 4-й параметр — нужная Вам схема.
спасибо
{$_modx->makeUrl($_modx->resource.parent,'','','full')}
Все верно.
В плагине на OnPageNotFound посылаю письмо и подтягиваю body из чанка. Так вот, этот чанк не понимает Fenom! Подозреваю, что феном подгружается чуть позже.
Как использовать Fenom в чанках из-под плагина? В каком событии?
Как использовать Fenom в чанках из-под плагина? В каком событии?
Интересно что обычные MODX плейсхолдеры работают без проблем.
Подскажите плиз. Если присвоить переменной значение
{set $relativeCategoryId = $_modx->config['some_category_id']}
Можно ли в подоьном виде использовать её потом. Или нужно будет через $_modx->runSnippet()?
[[pdoResources?
&parents=`{$relativeCategoryId}`
&tpl=`relativeCategoryItem`
]]
{set $relativeCategoryId = $_modx->config['some_category_id']}
Можно ли в подоьном виде использовать её потом. Или нужно будет через $_modx->runSnippet()?
[[pdoResources?
&parents=`{$relativeCategoryId}`
&tpl=`relativeCategoryItem`
]]
Можно, но зачем? Что мешает переписать вызов сниппета в формате фенома?
Конечно не проблема переписать в нужно форме. Просто в таком виде, как я привел, $relativeCategoryId не видна сниппету.
Пару дней назад хотел предложить добавить в $_modx метод getResource, но забыл об этом. Смотрю сейчас обновление (2.1.17), которое было выпущено не более суток назад — именно этот метод и оказался добавлен.
Василий, спасибо!
Василий, спасибо!
На здоровье! =)
Хочу спросить, кто-нибудь разобрался как подключить fenom к PhpStorm, чтобы не его специфический синтаксис не подчеркивался, как синтаксическая ошибка?
Проблема решена путем установки плагина github.com/klkvsk/fenom-phpstorm-plugin
есть Чанк (страница товара) в этом Чанке вызывается другой Чанк (таблица характеристик) вызывается он так
прописывал еще так
Подскажите пожалуйста решение.
{$_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 не выводит.Подскажите пожалуйста решение.
Помогите пожалуйста!
Решил попробовать fenom на своем сайте, в результате fenom работает при вызове pdoPage, но не работает на страницах и шаблонах сайта. Пытался выводить следующее:
Почитал форум, про подобные проблемы и конфликты со скобками, создал пустой шаблон и создал ресурс на этом шаблоне с тем, что писал выше и результат тот же — выводит как есть. Подозреваю, что что то с настройками.
Решил попробовать 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Почитал форум, про подобные проблемы и конфликты со скобками, создал пустой шаблон и создал ресурс на этом шаблоне с тем, что писал выше и результат тот же — выводит как есть. Подозреваю, что что то с настройками.
Вроде всё ок. Может, кэш нужно почистить, чтобы применились изменения в системных настройках?
И еще журнал ошибок проверить, может где-то правило неверное.
И еще журнал ошибок проверить, может где-то правило неверное.
Журнал ошибок был чист, лог левел стоял на дебаг.
Да, Вы правы. До этого чистил кэш через админку, а вот удалил вручную и все заработало.
Большое спасибо.
Да, Вы правы. До этого чистил кэш через админку, а вот удалил вручную и все заработало.
Большое спасибо.
Пробую для теста прописать в шаблоне
{$_modx->runSnippet('!test')}
Код сниппета test
А как например мне вызвать аналог [[!*pagetitle]] т.е. не сниппет, а тег некешированным вызвать? В смарти есть такая штука {nocache}
В fenom чет ничего подобного не вижу github.com/fenom-template/fenom/blob/master/docs/ru/readme.md
Версия модх 2.4.2-pl, последняя. Версия пдотулз тоже крайняя.
{$_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, последняя. Версия пдотулз тоже крайняя.
А теперь вызови этот же сниппет без Fenom и убедись, что он работает точно также. Стоит подумать над тем, откуда берётся description для прибавления, если документ кэшируется — а вдруг из кэша?!
А как например мне вызвать аналог [[!*pagetitle]] т.е. не сниппет, а тег некешированным вызвать?Теги не кэшируются вообще, а напрямую выводятся данные из $modx->resource. Документация.
Понял, спасибо. Действительно, цифра в дескрипшн обновляется, если смотреть в документ в админке, но через {$_modx->resource.description} || [[!*description]] выводится кешированное значение почему-то. Т.е. в дескрипшине уже 32, а на странице выводится только 1 || 1. И при этом, если выводить тупо через echo дескрипшн сниппетом, то да, при каждом обновлении страницы — новое значение.
Значит, данные там в $modx->resource кешируются как-то? Занятно.
Написал второй сниппет test2 с таким содержимом
Адекватно показывает свежее состояние description.
При этом, $modx->resource->description содержит старое значение.
Значит, данные там в $modx->resource кешируются как-то? Занятно.
Написал второй сниппет test2 с таким содержимом
echo $modx->getObject('modResource', $modx->resource->id)->description;
и вызвал его не кешированным.Адекватно показывает свежее состояние description.
При этом, $modx->resource->description содержит старое значение.
В смысле «куда-то»? Все ресурсы кэшируются в /core/cache/resource/контекст/resources/айди.cache.php. Если открыть этот файл, то там все параметры ресурса, именно они и выводятся при modX::getObject().
Для этого и придуман параметр cacheable — сохранять данные в кэш, или нет. Многие думают, что там только кэшированные сниппеты или шаблон страницы, но нет — там все свойства объекта.
И да, кэш ресурсов очищается при их сохранении в админке, может поэтому у тебя там иногда обновляются данные.
Лично я всё это заметил, когда пытался сохранять просмотры в ресурс для Tickets. Поэтому там сейчас отдельная таблица просмотров и никаких проблем нет.
Для этого и придуман параметр cacheable — сохранять данные в кэш, или нет. Многие думают, что там только кэшированные сниппеты или шаблон страницы, но нет — там все свойства объекта.
И да, кэш ресурсов очищается при их сохранении в админке, может поэтому у тебя там иногда обновляются данные.
Лично я всё это заметил, когда пытался сохранять просмотры в ресурс для Tickets. Поэтому там сейчас отдельная таблица просмотров и никаких проблем нет.
замени первую строчку
$doc = $modx->getObject('modResource', $modx->resource->id);
Да вроде пробовал уже, однохренственно.
Если включить $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"/>
А у меня такого нет. Может, кэш?
Кэш почистил
У меня ссылки почему то кешируются.
Если я захожу на первый страницу вставляется
Если я захожу на первый страницу вставляется
<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/"/>
Никто не сталкивался с таким?
Такая же проблема
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.