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+] и т.д.