DLMenu

    Опис

    Заміна Wayfinder і DLBuildMenu. Особливості:

    • Система шаблонів і класів, схожа з Wayfinder;
    • Кількість запитів дорівнює кількості рівнів в меню (без урахування запитів на додавання tv-параметрів і підрахунок дочірніх документів)
    • Власне, можливість підрахувати кількість дочірніх ресурсів (для безпосередніх батьків);
    • Майже всі параметри можна задавати як для всіх рівнів меню, так і для конкретного рівня;
    • Можна використовувати prepare для обробки даних і підміни шаблонів; як і в DocLister можна за допомогою prepare виключати документи з виведення;
    • Можна будувати меню від декількох батьків;
    • Можна тримати розгорнутими певні гілки;
    • Можна вивести меню у вигляді json-масиву;
    • Кешування як вихідних даних, так і виведення при використанні компонента EvoTwig.

    Основні параметри

    Для сортування і обмеження вибірки слід використовувати параметри DocLister (sortBy, sortDir, orderBy, addWhereList і т.д.) За замовчуванням виконується сортування за зростанням значення поля menuindex, документи з hidemenu = 1 цієї статті не виводяться. Для того щоб виводилися документи, в яких параметр "Відображати в меню", неактивний, потрібно додати в виклик сніпепта параметр addWhereList з порожнім значенням (& addWhereList = '').

    Параметр prepare можна задати для певного рівня (наприклад, prepare2). Але в самому prepare-сніпеті дізнатися рівень можна з значення $ data [ 'level']. Параметр tvList також застосовується до всіх рівнів.

    В параметрах шаблонів слід вказувати рівень на 1 менше (наприклад, rowTpl2 буде застосований до документів третього рівня, а rowTpl0 - першого).

    documents

    Список id документів, які утворюють однорівневе меню. Щоб вивести в тому порядку, в якому вони перераховані, слід використовувати параметр sortType1 зі значенням "doclist".

    parents

    Список id документів, від яких будується багаторівневе меню, через кому. Якщо у зазначених документів різні батьки, то буде побудовано кілька меню. Щоб вивести в тому порядку, в якому перераховані батьки, слід використовувати параметр sortType1 зі значенням "doclist".

    Можливі значення - список id через кому.

    Значення за замовчуванням - id ресурсу, в якому викликаний сниппет.

    maxDepth

    Максимальна кількість рівнів в меню.

    Можливі значення - число від 1.

    Значення за замовчуванням - 10.

    showParent

    Якщо значення параметра дорівнює 1, то будуть показані документи, зазначені в параметрі parents.

    Можливі значення - 0 або 1.

    Значення за замовчуванням - 0.

    api

    Якщо значення параметра дорівнює 1, то результати будуть виведені у вигляді json-масиву.

    Можливі значення - 0 або 1.

    Значення за замовчуванням - 0.

    hideSubMenus

    Якщо значення параметра дорівнює 1, то неактивні гілки меню не показуються.

    Можливі значення - 0 або 1.

    Значення за замовчуванням - 0.

    openIds

    Результат аналогічний викликом з включеним параметром hideSubMenus, але можна вказати через кому id батьківських документів, чиї безпосередні нащадки будуть завжди на виду.

    Можливі значення - список id через кому.

    Значення за замовчуванням - не задано.

    countChildren

    Якщо значення параметра дорівнює 1, то буде обчислено кількість безпосередніх дочірніх документів для кожного ресурсу в меню.

    Можливі значення - 0 або 1.

    Значення за замовчуванням - 0.

    titleField

    Ім'я плейсхолдера, в якому задається назва документа.

    Значення за замовчуванням - title.

    joinMenus

    Якщо задано кілька батьків і відключений параметр showParent, то сніпет виведе стільки ж меню. За допомогою цього параметра їх можна об'єднати в одне.

    Можливі значення - 0 або 1.

    Значення за замовчуванням - 0.

    Кешування

    При використанні компонента EvoTwig можливо використовувати кеш для прискорення роботи DLMenu. При включеному кешуванні запити в БД для побудови меню виконуються тільки один раз, готове меню також кешируєтся, але тільки для активних пунктів меню (тобто загальна кількість відповідних записів в кеші буде дорівнює кількості пунктів меню плюс один запис для меню з неактивними пунктами, незалежно від кількості сторінок сайту, на яких це меню виводиться).

    cache

    Включає кешування.

    Можливі значення - 0 або 1.

    Значення за замовчуванням - 1.

    cacheLifetime

    Дозволяє кешувати дані на заданий час. Якщо значення дорівнює 0, то дані кешуються до тих пір, поки кеш не очистите.

    Можливі значення - кількість секунд.

    Значення за замовчуванням - 0.

    cacheStrategy

    Визначає режим кешування. При значенні user записи в кеші створюється два набори записів: для авторизованих і неавторизованих користувачів; при usergroup також враховуються групи, створені учасником.

    Можливі значення - user, usergroup.

    Значення за замовчуванням - порожньо.

    cacheKeyGenerator

    Дозволяє вказати функцію або статичний метод для побудови ключа кеша. При виклику використовуються аргументи modx (об'єкт DocumentParser) і DocLister (об'єкт контролера). За замовчуванням для побудови ключа використовує хеш параметрів, з якими був викликаний сніпет.

    Можливі значення - функція, статичний метод.

    Значення за замовчуванням - порожньо.

    Шаблони

    outerTpl

    Обгортка всього меню.

    Можливі значення - ім'я шаблону, вказане за правилами завдання шаблонів в DocLister.

    Значення за замовчуванням:

    @CODE:<ul[+classes+]>[+wrap+]</ul>

    rowTpl, rowHereTpl

    Шаблон для виведення пункту меню першого рівня без нащадків. Для поточного документа може бути заданий шаблон rowHereTpl.

    Можливі значення - ім'я шаблону, вказане за правилами завдання шаблонів в DocLister.

    Значення за замовчуванням:

    @CODE:<li[+classes+]><a href="[+url+]">[+title+]</a></li>

    parentRowTpl, parentRowHereTpl, parentRowActiveTpl

    Шаблон для виведення документа, у якого є нащадки. Для поточного документа може бути заданий шаблон parentRowHereTpl, для активного - parentRowActiveTpl.

    Можливі значення - ім'я шаблону, вказане за правилами завдання шаблонів в DocLister.

    Значення за замовчуванням:

    @CODE:<li[+classes+]><a href="[+url+]">[+title+]</a>[+wrap+]</li>

    innerTpl

    Обгортка блоку дочірніх документів.

    Можливі значення - ім'я шаблону, вказане за правилами завдання шаблонів в DocLister.

    Значення за замовчуванням - значення параметра outerTpl.

    innerRowTpl, innerRowHereTpl

    Шаблон для виведення дочірнього документа. Для поточного документа може бути заданий шаблон innerRowHereTpl.

    Можливі значення - ім'я шаблону, вказане за правилами завдання шаблонів в DocLister.

    Значення за замовчуванням - значення параметра rowTpl.

    categoryFolderTpl

    Шаблон для виведення категорії (документа з полем isfolder = 1 і шаблоном \ _blank або значенням поля link_attributes містить слово category).

    Можливі значення - ім'я шаблону, вказане за правилами завдання шаблонів в DocLister.

    Значення за замовчуванням - значення параметра parentRowTpl.

    Класи

    Задаються для документів:

    • rowClass - клас документа, задається значенням параметра rowClass;
    • firstClass - клас першого документа в групі, задається значенням параметра firstClass (за замовчуванням - first);
    • lastClass - клас останнього документа в групі, задається значенням параметра lastClass (за замовчуванням - last);
    • levelClass - клас рівня меню, задається значенням параметра levelClass, до якого додається номер рівня (за замовчуванням - level);
    • webLinkClass - клас документа-посилання, задається значенням параметра webLinkClass;
    • parentClass - клас документа-батька, задається значенням параметра parentClass;
    • hereClass - клас поточного документа, задається значенням параметра hereClass (за замовчуванням - current);
    • activeClass - клас активного документа, задається значенням параметра activeClass (за замовчуванням - active);
    • oddClass - клас непарного документа в групі, задається значенням параметра oddClass (за замовчуванням - odd);
    • evenClass - клас парного документа в групі, задається значенням параметра evenClass (за замовчуванням - even);
    • stateClass - задається значенням плейсхолдера [+state+].

    Можна також додати свої класи в prepare-сніпеті:

    $data['classes'] = array('myClass'=>'my');

    Задаються для обгорток:

    • innerClass - клас обгортки дочірніх документів, задається значенням параметра innerClass;
    • outerClass - класу обгортки всього меню, задається значенням параметра outerClass.

    Плейсходери

    • [+wrap+] - висновок дочірніх документів (в api-режимі - children); якщо значення плейсхолдера - масив, то він перетворюється в рядок із застосуванням відповідних шаблонів, якщо рядок - залишається без змін;
    • [+classNames+] - список класів, доступних в шаблоні (тільки імена);
    • [+classes+] - список класів, доступних в шаблоні (включаючи class = "");
    • [+level+] - рівень документа;
    • [+maxLevel+] - якщо встановлено, то вказує на те, що документ знаходиться в самому низу гілки, до якої належить;
    • [+iteration+] - порядковий номер документа в групі;
    • [+_display+] - загальна кількість документів в групі;
    • [+here+] - якщо встановлено, то документ є поточним документів;
    • [+active+] - якщо встановлено, то документ є активним документів;
    • [+state+] - якщо заданий параметр hideSubMenus, то плейсхолдер містить значення open для розгорнутої гілки і closed для згорнутої;
    • [+title+] - назва документа, так само полю menutitle, якщо воно не порожнє, або pagetitle;
    • [+url+] - посилання на документ;
    • [+count+] - кількість безпосередніх нащадків;
    • [+_renderRowTpl+] - якщо встановлено, то його значення буде використано як шаблон при виведенні документів;
    • [+_renderOuterTpl+] - якщо встановлено, то його значення буде використано як шаблон при виведенні обгортки дочірніх документів.

    Також доступні плейсхолдери, що встановлюються екстендером e, і плейсхолдери окремих класів: [+oddClass+], [+rowClass+] і т.д.