Кэшируются чанки внутри сниппета
Друзья, спасайте. Весь мозг сломал, не понимаю причины, по которой внутри сниппета кэшируются getChunk() и process().
Есть чанк Adv (это упрощенная версия, смысл в том, что в определенный шаблон вставляется случайная реклама):
Пробовал getChunk — та же самая петрушка. :(
Есть чанк Adv (это упрощенная версия, смысл в том, что в определенный шаблон вставляется случайная реклама):
<div>[[!GetRandomAdv]]</div>Есть сниппет:$studios = $modx->getCollection('modResource', $q);
foreach ($studios as $s)
{
...
// Во вторую и каждую десятую записи подставляем рекламу из чанка Adv
if ($n == 2 || ($n-2)%10 == 0){
$adv = $modx->getParser()->getElement('modChunk', 'Adv');
$adv->setCacheable(false);
$adv->_processed = false;
$props['Advertisment'] = $adv->process();
}
$html .= $modx->getChunk($tpl, $props);
}
return($html);Почему-то во всех вставках на странице реклама появляется одна и та же. Я уже вставил в сниппет uniqid() вместо рекламы — во всех рекламных местах появляется один и тот же идентификатор, значит вывод чанка кэшируется. С чем это может быть связано?Пробовал getChunk — та же самая петрушка. :(
Комментарии: 14
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
В pdoTools так и работает.
Видимо нужно искать этот объект в исходниках и смотреть, что же там такого кривого делается… :(
на
Сниппет GetStudios выводит ресурсы из базы, при этом в определенные места 2, 12, 22 и т.д. он добавляет рекламу путем вставки чанка Adv. Чанк нужен для внешнего оформления рекламы (отсупы, бордеры, и т.д.). Внутри этого чанка идет вызов еще одного сниппета (GetRandomAdv), он выдает случайную картинку с рекламой. Получается схема:
Adv — чанк, который является оберткой для второго снипета. Если бы он не кэшировался — я бы получил в 3 местах разную рекламу, но она ВСЕГДА динаковая.
Все работает идеально, в 3 местах разная реклама, но:
1. Я не понимаю, как все-таки избавиться от такого навязчивого кэширования чанков.
2. Я не смогу использовать нормальный, в принципе, чанк Adv в других местах своего проекта, поскольку его придется менять на:
1. Оно не отвечает на вопрос «Откуда здесь берется кэширование?» Это мне важно для понимания принципов ModX, а фраза «чанк в этой конструкции абсолютно лишний» не дает разъяснений. Можете пояснить, что я сделал неправильно в предыдущем решении?
2. Решение, которое вы рекомендуете подразумевает вызовы:
вместо
Второй вариант проще и нагляднее для стороннего человека. За это и сражаюсь.
Решение, которое я рекомендую