DLSiblings

    DLSiblings: Вывод соседних ресурсов с шаблонизацией

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

    Вывод соседних ресурсов с шаблонизацией (множественная кольцевая перелинковка)

    Автор: Aharito

    &idType, &parents, &documents, &ignoreEmpty

    - как в ДокЛистере.

    &Qty

    (целое), кол-во предыдущих и следующих соседей. Имеет приоритете над &prevQty и &nextQty.

    Если &Qty=`3`, то общее кол-во будет 6 - то есть 3 перед и 3 после.

    Значение по умолчанию: 2.

    &prevQty

    Кол-во соседей-предшественников. Приоритет меньше $Qty

    Значение по умолчанию:default 2

    &nextQty

    Кол-во соседей-последователей. Приоритет меньше $Qty

    Значение по умолчанию: 2

    Также можно использовать унаследованные от DocLister (такие же, как у него): условия выборки &addWhereList и &filters, условия сортировки &orderBy, глубина выборки &depth, prepare, многие другие параметры.

    Нужно лишь понимать, имеют ли смысл эти параметры в вызове. Например, если задать &idType=`documents` и &documents=`1,2,3` (всего 3 документа), а &Qty задать как 6, то выводиться все равно будут всегда эти 3 документа - смысла в этом нет.

    Параметры-исключения:

    • режим api принудительно устанавливается в 1 (нет смысла задавать в сниппете)
    • режим debug устанавливается в 0 (также нет смысла задавать).
    • параметр &display принудительно устанавливается в &display=`0`, так как за кол-во отвечают параметры &Qty, &prevQty и &nextQty.

    Шаблоны сниппета

    • &ownerTPL, шаблон-обертка аналогично DocLister, но плейсхолдер НЕ , а . Значение по умолчанию null (вывод не оборачивается в ownerTPL).
    • &tpl, &tplOdd и &tplEven, &tplIdN, &tplFirst и &tplLast Шаблоны элемента как в DocLister в порядке увеличения приоритета.
    • &noneTPL Шаблон с информацией, что ничего нет, как в DocLister. По умолчанию - пусто.
    • &noneWrapOuter Как в DocLister, оборачивать ли шаблон noneTPL в обёртку ownerTPL. Параметр &noneWrapOuter имеет смысл, только если ничего не нашлось и при этом задан ownerTPL.

    Другие шаблоны DL не используются.

    ВНИМАНИЕ:

    !!! В шаблонах сниппета плейсхолдеры ТВ-параметров записываются НЕ через точку, а через нижнее подчеркивание. То есть, будет не , а . То же самое касается экстендеров, например экстендера e: вместо пишем .

    В общем, в плейсхолдерах шаблонов (только в них!) все точки меняем на нижнее подчеркивание (см. примеры вызова сниппета ниже).

    ПРИМЕРЫ

    Пример 1: Простой вызов сниппета.

    
    

    Пример 2: Более сложный пример с prepare и превьюшками FastImage

    
    

    Примечание: Это только примеры. Для того, чтобы они заработали на вашем сайте, у вас должны быть такие же TV и такие же prepare-сниппеты.

    Результат работы примера 2

    siblings_demo_1

    Скорость работы

    1) Кол-во запросов и т.д. при кешированном вызове сниппета на кешированном ресурсе на микро-сайте, выборка 4 из 8 статей с сортировкой

    &orderBy=`if(pub_date=0,createdon,pub_date) DESC`

    siblings_requests

    2) Кол-во запросов и т.д. при некешированном вызове сниппета на кешированном ресурсе на микро-сайте, выборка 4 из 8 статей с сортировкой

    &orderBy=`if(pub_date=0,createdon,pub_date) DESC`

    siblings_requests_nocache

    Недостатки

    • Длинная JSON-строка, содержащая все поля, в том числе контент (расход памяти)
    • Формирование доп. индексного массива $ids (время)
    • В результате сниппет подойдет для не очень больших выборок (навскидку до 1-2 тыс. ресурсов), для больших сайтов требуется другое решение