Как узнать уровень вложенности ресурса
Подсчет уровня вложенности ресурса с помощью PHP кода, метода modX::getParentIds
и с помощью шаблонизатора Fenom.
Оглавление
Если вам необходимо узнать уровень вложенности ресурса, можно воспользоваться штатным методом системы MODx — modX::getParentIds
, который получает массив родительских идентификаторов ресурса. В качестве параметров, этот метод принимает идентификатор ресурса, глубину вложенности подсчета (от 0 до 10) и контекст, в котором метод будет искать ресурсы.
<?php
$ids = $modx->getParentIds($id, 10, array('context' => 'web'));
Принцип работы метода
Метод modX::getParentIds
возвращает массив идентификаторов родительских ресурсов. Если у ресурса нет родителя или подсчет завершен — последний результат метода будет 0. Таким образом метод завершает свою работу, говоря нам, что больше родителей нет.
Представим, что у нас следующая иерархия ресурсов:
├── О нас
│ ├── Наши работы
│ │ ├── Отзывы
При попытке найти всех родителей ресурса «Отзывы», метод вернет нам примерно следующий результат:
Array
(
[0] => 3
[1] => 2
[2] => 0
)
Ресурс «Наши работы» будет иметь идентификатор — 3, ресурс «О нас» — 2 и далее последний ключ со значением — 0. Это значит что больше родителей у ресурса «Отзывы» — нет.
Считаем вложенность через сниппет
Теперь нам нужно подсчитать количество значений в массиве результата работы метода. Таким образом мы и узнаем вложенность ресурса, просто подсчитав сколько он имеет родителей. Создаем сниппет и пишем в нем следующий код:
<?php
$level = count($modx->getParentIds($id, 10, array('context' => 'web')));
return $level;
Вызов сниппета:
/* modParser */
[[!getLevel? &id=`[[*id]]`]]
/* pdoParser */
{$_modx->runSnippet('!getLevel', [
'id' => $_modx->resource.id
])}
В параметре передаем идентификатор ресурса, чей уровень вложенности нужно подсчитать. Сниппет подсчитает уровень и вернет нам число.
Однако делать сниппет ради подсчета уровня вложенности на фронте — не очень хорошая идея. Если вам нужно написать некую логику на PHP — тогда это решение имеет право на жизнь. Для вывода уровня вложенности на фронт, можно воспользоваться шаблонизатором Fenom.
Считаем вложенность через Fenom
Тут все намного проще. Автор pdoTools вынес метод в класс micromodx, так что мы смело можем писать данный метод прямо при шаблонизации, а с помощью модификатора count, подсчитать количество элементов в массиве не прибегая к PHP.
{$_modx->getParentIds($_modx->resource.id, 10) | count}
Таким образом мы и получим уровень вложенности ресурса в шаблонизаторе. Теперь мы можем сделать любую необходимую нам логику основываясь на уровне вложенности ресурса, не создавая ради этого сниппет и не прибегая к PHP.
Время запросов: 0,3391 s
Количество запросов: 28
Источник: cache