Поиск нужного блока среди страниц пагинации (pdoPage).

Подскажите пожалуйста, каким образом можно получить ссылку на нужный, к примеру коммент (лежит не на странице пагинации), среди страниц пагинации (pdoPage) и естественно потом на него попасть (уже на самой странице с пагинацией)? может у кого промелькнет светлая мысль, поделитесь.
Юрий Фомин
07 сентября 2018, 15:19
modx.pro
2
908
0

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

Pavel Zarubin
10 сентября 2018, 03:46
0
А более подробнее? Какой коммент? вы про тикетс? Это никак на мысль не наводит?
    Юрий Фомин
    10 сентября 2018, 09:13
    0
    нет это не Tickets, комментарии привел ради примера, прошу прощения если сбил с толку.
    Просто страницы выведенные через pdoResources (пагинация pdoPage). Вот и нужно попасть на вывод определенной «плитки» в определенной странице пагинации.
    Юрий Фомин
    10 сентября 2018, 12:35
    0
    Вопрос решился.

    1. создаем тв-шку в которой укажем количеством блоков на странице (она нужна для синхронизации работы сниппетов по разбиению на страницы). не забываем привязать и заполнить ее (у меня она привязвна к каталогу тех самых страниц которые будем пагинировать).

    2. создаем сниппет к примеру «paginSearch» для подсчета на какой странице находиться нужный блок:
    <?php
    // получаем нужные ресурсы у родителя
    if(!$docs = $modx->getCollection('modResource', array(
        'parent' => 8,
        'published' => 1,
        'hidemenu' => 0,
        'template' => 10
    ))){return;}
    
    // получаем поле публикации в юникоде и загоняем их в массив
    $resrs = array();
    foreach($docs as $doc){
        $resid = $doc->get('id');
        $resPubDate = strtotime($doc->get('publishedon'));
        array_push($resrs, $resPubDate);
    }
    // получаем значение твшки для разбиения (сравни пагинации)
    $pagiRes = $modx->getObject('modResource', 8);
    $pagiNum = $pagiRes->getTVValue('pagiNum');
    
    // сортируем массив с датами публикации по датам а не по ключам
    asort($resrs);
    // дробим массив словно пагинируя его
    $resrs2 = array_chunk($resrs, $pagiNum);
    // получаем дату публикации отдельного ресурса в юникоде
    $res = $modx->getObject('modResource', $id);
    $resPub = strtotime($res->get('publishedon'));
    
    $output;
    $i = 0;
    
    // перебором получаем в каком по счету массиве ("странице") находиться нужный нам ресурс
    foreach ($resrs2 as $arr) {
        $i += 1;
        if ( in_array($resPub, $arr) ) {
            $output = $i;
        }
    }
    // выводим "страницу" пагинации
    print_r($output);

    3. в ссылке при выводе отдельного блока указываем (это не та страница на которой выводятся блоки с пагинацией. к примеру на главной они в слайдере (об этом речь), а на странице каталога их ищем :):
    {var $paginpage = '!paginSearch' | snippet : ['id'=>$id]}
    <a href="{8 | url}{if $paginpage > 1}?page={$paginpage}{/if}#review_{$id}">Читать полностью</a>

    4. в выводе блоков на странице указываем лимит через ту самую твшку из пункта 1:
    {var $pagiNum = 8 | resource : 'pagiNum'}
    {'!pdoPage' | snippet : [
        'parents'=>8,
        'limit'=>$pagiNum,
        'sortby'=>'publishedon',
        'sortdir'=>'ASC'
    ]}

    Если у кого возникнет мысль по коррекции кода, буду рад советам. Заранее спасибо.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3