Передать 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 пуст. Почему так и как это можно решить?
Александр
18 декабря 2017, 12:07
modx.pro
2 268
0

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

Александр
19 декабря 2017, 17:07
0
Подскажите, пожалуйста, кто сталкивался или знает.
Наверняка, ничего сложного, но не вижу, где ошибка.
    Евгений Шеронов
    19 декабря 2017, 18:37
    +1
    Лучше вот так сделайте:
    {'!mFilter2' | snippet : [
    	...
    	'prepareSnippet' => 'newProductsIds',
    	'newProductsIdsArr'=> ($newProductsIds | split : ',')
    ]}
    
    //И это значение будет доступно в указанном prepareSnippet так:
    $pdoTools->config['newProductsIdsArr']
    
    //Соответственно и выставить в чанк можно будет просто:
    $row['newProductsIdsArr'] = $pdoTools->config['newProductsIdsArr'];
    
    //про prepareSnippet есть в документации pdoTools
      Александр
      19 декабря 2017, 21:09
      0
      Евгений, большое спасибо за помощь. Всё работает!

      Только в журнале ошибок появилось вот это:
      [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>
      Получается, что вроде всё нормально, но предупреждения появляются.
        Евгений Шеронов
        19 декабря 2017, 21:14
        +1
        в mFilter2 просто prepareSnippet всё подряд обрабатывает)

        сделайте проверку там такую:
        if(isset($row['id']) && isset($pdoTools->config['newProductsIdsArr'])) {
            $row['newProductsIds'] = $pdoTools->config['newProductsIdsArr'];
        }
          Александр
          19 декабря 2017, 21:27
          0
          Понял)
          Теперь порядок. Спасибо!!!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5