Функция 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'.
Заключение
Эта функция полезна для навигации по иерархической структуре категорий, предоставляя гибкий способ получения родительских категорий в зависимости от типа запрошенного результата.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 18:42
- Последнее обновление: 21.01.2025 18:42