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

Mem: 3.75 mb, MySQL: 0.0026 s, 2 req., PHP: 0.0392 s, all: 0.0418 s, cache.