Функция cot_structure_parents в Cotonti

Описание функции cot_structure_parents
Эта функция возвращает массив родительских категорий для заданной категории в указанной области ($area). Можно получить либо весь путь к родительским категориям, либо только первую или последнюю родительскую категорию.

Код функции

/**
 * Gets an array of category parents
 *
 * @param string $area Area code
 * @param string $cat Cat code
 * @param string $type Type 'full', 'first', 'last'
 * @return string[]|string|null
 */
function cot_structure_parents($area, $cat, $type = 'full')
{
    if (empty($area) || empty($cat) || empty(Cot::$structure[$area]) || empty(Cot::$structure[$area][$cat])) {
        return null;
    }

    $pathcodes = explode('.', Cot::$structure[$area][$cat]['path']);

    if ($type == 'first') {
        return $pathcodes[0];
    } elseif ($type == 'last') {
        return (count($pathcodes) > 1) ? $pathcodes[count($pathcodes) - 2] : null;
    }

    return $pathcodes;
}


Разберём функцию cot_structure_parents подробно:


Параметры

$area (string): Код области. Это может быть код модуля или плагина, например, 'page' или 'forums'.
$cat (string): Код категории, для которой нужно найти родительские категории.
$type (string): Тип результата, который требуется:
'full' (по умолчанию): Возвращает полный путь из всех родительских категорий.
'first': Возвращает код первой (корневой) родительской категории.
'last': Возвращает код последней родительской категории перед текущей категорией.


Логика работы функции
Проверка валидности входных данных:


if (empty($area) || empty($cat) || empty(Cot::$structure[$area]) || empty(Cot::$structure[$area][$cat])) {
    return null;
}

Если код области $area или категории $cat пустой, или если структура для этой области или категории отсутствует, функция возвращает null.

Получение пути категории:


$pathcodes = explode('.', Cot::$structure[$area][$cat]['path']);

Путь категории из структуры разбивается на массив кодов категорий по символу .. Этот путь содержит коды всех родительских категорий и самой категории.

Обработка параметра $type:

Если $type равен 'first', функция возвращает первый элемент из массива путей, что соответствует корневой категории:


return $pathcodes[0];


Если $type равен 'last', функция возвращает предпоследний элемент массива (если он существует), что соответствует последней родительской категории перед текущей:

return (count($pathcodes) > 1) ? $pathcodes[count($pathcodes) - 2] : null;
Если $type равен 'full' или любому другому значению, функция возвращает полный массив путей:


return $pathcodes;


Пример использования

Предположим, у нас есть структура категорий:

 

- news (корневая)
  - tech (родительская категория)
    - gadgets (текущая категория)
    
    
Для категории 'gadgets' в области 'page':

cot_structure_parents('page', 'gadgets', 'full') вернёт ['news', 'tech', 'gadgets'].
cot_structure_parents('page', 'gadgets', 'first') вернёт 'news'.
cot_structure_parents('page', 'gadgets', 'last') вернёт 'tech'.

Заключение
Эта функция полезна для навигации по иерархической структуре категорий, предоставляя гибкий способ получения родительских категорий в зависимости от типа запрошенного результата.

2 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 18:42
  • Последнее обновление: 21.01.2025 18:42