Дата публикации
11 Мая 2020
Дата изменения
5 Июля 2020
Уникальных просмотров
1.794

Оглавление

Если вам необходимо узнать уровень вложенности ресурса, можно воспользоваться штатным методом системы 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
Время запросов: 0,3391 s
Количество запросов: 28
Источник: cache