Pdopage через снипет при ajaxMode

Допустим, есть снипет в шаблоне, вызов такой:

<div id="pdopage">
    <div class="row grid">
        {$_modx->runSnippet('@FILE snippets/lenta.php', [
            'pagetitle' => $_modx->resource.pagetitle, 
            'id' => $_modx->resource.id, '
            publishedon' => $_modx->resource.publishedon, 
            'description' => $_modx->resource.description, 
            'parent' => $_modx->resource.parent | resource: 'id' 
            ])}
    </div>
    {'page.nav' | placeholder}
</div>


Снипет lenta.php
$params = array(
  'ajaxMode'          => 'scroll',
  'ajaxElemRows' => '#pdopage .row',
  'ajaxHistory' => 1,
  'parents'           => '0',
  'sortby'            => 'publishedon',
  'includeTVs'        => '',
  'where'             => '',
  'resources'         => '',
  'templates'         => '2',
  'tpl'               => '@FILE chunks/giftpl.chunk.tpl',
  'tplWrapper'        => '@INLINE {$output}',
  'pageLimit'         => '10',
  'limit'             => '32',
...
);

//Вставляем после второго блока блок РСЯ
function insert_div($html)
{
  // 1. Найти позицию
  $pos = strpos($html, 'div class="grid-item"', strpos($html, 'div class="grid-item"', strpos($html, 'div class="grid-item"') + 1) + 1);
  // 2. Скопировать часть до позиции
  $result = substr($html, 0, $pos - 1);
  // 3. Добавить блок
  $result .= '
  <div class="grid-item" >
//Тут что-то
  </a>
</div>
  ';
  // 4. Добавить оставшуюся часть
  $result .= substr($html, $pos - 1);

  return $result;
}

$output = insert_div ($modx->runSnippet('pdoPage', $params) );
return   $output;
В двух словах по снипету: код полученный от pdoPage передаётся в функцию, которая после второго блока вставляет ещё один блок и результат отправляет обратно в шаблон.

Проблема в том, что данный снипет прекрасно работает при отключенной ajaxMode. Также работает и при включении ajaxMode, но дополнительный блок вставляется только на первой странице, а на подгруженных через ajax эти блоки не вставляются.

Помогите, пожалуйста, решить эту проблему.
Алексей
17 сентября 2023, 13:20
modx.pro
409
0

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

Ivan
17 сентября 2023, 17:39
0
А почему просто в чанке не вставить {if $idx == 1}ДОП БЛОК{/if}
Ну если феном не работает то можно даже так схитрить
Вызвать
[[$chunk_rsya_[[+idx]]

И создать чанк chunk_rsya_1 и в нем вставить нужный вам код
    Алексей
    17 сентября 2023, 18:51
    0
    А почему просто в чанке не вставить {if $idx == 1}ДОП БЛОК{/if}
    Не знал об этом способе, спасибо. Вставил в чанк{if $idx == 4}… Он появляется на четвертой позиции. Но эффект тот же. Он только на первой странице.
    Алексей
    17 сентября 2023, 18:24
    0
    Удалено
      Ivan
      17 сентября 2023, 18:54
      0
      Выведите {$idx} посмотрите что выведет. Возможно пдопейдж некешированным вызывается.
        Алексей
        17 сентября 2023, 19:17
        0
        Большое спасибо Иван!
        Поставил {if $idx == 4 or $idx % 32 == 0}
        Всё заработало.
          Ivan
          17 сентября 2023, 22:57
          0
          Не уверен, но там может быть доступна переменная {$total}, и тогда лучше сделать % $total == 0
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6