Передать placeholder в чанк
Здравствуйте.
Вроде бы задача простая, но что-то не выходит.
В шаблоне выставляю placeholder:
Вроде бы задача простая, но что-то не выходит.
В шаблоне выставляю placeholder:
{set $newProductsIds = 'msProducts' | snippet : [
'parents' => 0,
...
'returnIds' => 1
]}
{$_modx->setPlaceholder('newProductsIdsArr', $newProductsIds | split : ',')}
Далее вызов сниппета:{'!mFilter2' | snippet : [
'class' => 'msProduct',
'paginator' => 'pdoPage',
'element' => 'msProducts',
'tpl' => 'tpl.msProducts.row',
...
'limit' => 12,
'ajaxMode' => 'scroll'
]}
Чанк tpl.msProducts.row:...
{$_modx->getPlaceholder('newProductsIdsArr')}
...
В результате placeholder «newProductsIdsArr» выводится только при загрузке страницы (для первых 12 элементов). А дальше, при скроллинге, placeholder пуст. Почему так и как это можно решить? Комментарии: 5
Подскажите, пожалуйста, кто сталкивался или знает.
Наверняка, ничего сложного, но не вижу, где ошибка.
Наверняка, ничего сложного, но не вижу, где ошибка.
Лучше вот так сделайте:
{'!mFilter2' | snippet : [
...
'prepareSnippet' => 'newProductsIds',
'newProductsIdsArr'=> ($newProductsIds | split : ',')
]}
//И это значение будет доступно в указанном prepareSnippet так:
$pdoTools->config['newProductsIdsArr']
//Соответственно и выставить в чанк можно будет просто:
$row['newProductsIdsArr'] = $pdoTools->config['newProductsIdsArr'];
//про prepareSnippet есть в документации pdoTools
Евгений, большое спасибо за помощь. Всё работает!
Только в журнале ошибок появилось вот это:
Только в журнале ошибок появилось вот это:
[2017-12-19 21:03:56] (ERROR @ /public_html/core/cache/includes/elements/modsnippet/65.include.cache.php : 3) PHP warning: Illegal string offset 'newProductsIdsArr'
Добавил в сниппет, указанный в prepareSnippet: echo '';print_r($row); die; В итоге среди прочего есть: <code> [newProductsIdsArr] => Array ( [0] => 192 [1] => 191 [2] => 176 [3] => 175 [4] => 163 [5] => 162 [6] => 161 [7] => 160 [8] => 159 [9] => 158 [10] => 157 [11] => 156 ) </code> Получается, что вроде всё нормально, но предупреждения появляются.
в mFilter2 просто prepareSnippet всё подряд обрабатывает)
сделайте проверку там такую:
сделайте проверку там такую:
if(isset($row['id']) && isset($pdoTools->config['newProductsIdsArr'])) {
$row['newProductsIds'] = $pdoTools->config['newProductsIdsArr'];
}
Понял)
Теперь порядок. Спасибо!!!
Теперь порядок. Спасибо!!!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.