Поддержать Проект

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • Дополнения
  • avatar
    • Автор: Aharito
    • OpenGraphTags

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

  • Дополнения
  • DLSiblings
1985

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

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

Скачивать здесь: DLSiblings

Параметры сниппета:

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

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

ВНИМАНИЕ:

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

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

ПРИМЕРЫ

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

[[DLSiblings?
    &idType=`parents`
    &parents=`152`
    &tpl=`@CODE: <a href="[+url+]">[+tv_h1+]</a><br>`
    &Qty=`2`
    &tvList=`h1`
]]

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

[[DLSiblings?
    &idType=`parents`
    &parents=`152`
    &thumbSnippet=`sgThumb`
    &thumbOptions=`{"tv.article_intro_img":{"small":"280x160","medium":"700x400"}}`   //Здесь НЕ надо менять точку на подчеркивание (это не шаблон)
    &ownerTPL=`@CODE:<div class="row latest-news inline-showcase">[+wrap+]</div><hr>`                                       
    &tpl=`@CODE:
    <div class="column col-1-1-2-4-4 margin-bottom-30">   //А здесь везде надо менять (это шаблон)              
        <div class="article-announce-img">
            <img class="img-responsive" src="[+tv_article_intro_img_medium+]" alt="[+e_title+] | [(cfg_company_brand_name)]">               
        </div>
        <div class="article-announce-content">
            <div class="article-announce-header">
                <a href="[+url+]">[+tv_h1+]</a>
            </div>
        </div>
        <a href="[+url+]" class="wrapper-link"></a>
    </div>`
    &Qty=`2`
    &tvList=`article_intro_img,h1`
    &prepare=`FastImagePreviews`
]]

Примечание: Это только примеры. Для того, чтобы они заработали на вашем сайте, у вас должны быть такие же 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 тыс. ресурсов), для больших сайтов требуется другое решение