@extends('app') @php $seoKey = 'products'; // Вспомогательная рекурсивная функция: проверить, содержит ли поддерево узел с целевым slug/name if (!function_exists('categoryContainsTarget')) { function categoryContainsTarget($node, $target) { if (!$target || !$node) { return false; } if ((isset($node->slug) && $node->slug === $target) || (isset($node->name) && $node->name === $target)) { return true; } if (!isset($node->children)) { return false; } foreach ($node->children as $child) { if (categoryContainsTarget($child, $target)) { return true; } } return false; } } // Глобально вычислим выбранный sub_subcategory по сегменту URL или query, чтобы передавать в функцию рендера $selectedSubSubcategoryParamGlobal = request()->input('sub_subcategory'); if (!$selectedSubSubcategoryParamGlobal) { $pathParts = explode('/', trim(request()->path(), '/')); // ['products', cat, subcat, sub2] if (count($pathParts) >= 4 && $pathParts[0] === 'products') { $selectedSubSubcategoryParamGlobal = urldecode($pathParts[3]); } } function renderCategoryTreeRecursive($categories, $selectedCategory, $selectedSubcategory, $level = 0, $parentSlug = null, $rootCategorySlug = null, $selectedSubSubcategoryParam = null) { $selectedCategorySlug = $selectedCategory ? $selectedCategory->slug : null; $selectedSubcategorySlug = $selectedSubcategory ? $selectedSubcategory->slug : null; foreach($categories as $cat) { $isSelected = $selectedCategorySlug === $cat->slug && !$selectedSubcategorySlug; $isParentOfSelected = $selectedCategorySlug === $cat->slug && $selectedSubcategorySlug; $isChildSelected = $selectedSubcategorySlug === $cat->slug; // Совпадение непосредственно с выбранным sub_subcategory $isSubChildSelected = $selectedSubSubcategoryParam && (($selectedSubSubcategoryParam === $cat->slug) || ($selectedSubSubcategoryParam === $cat->name)); $hasChildren = $cat->children->count() > 0; // Проверяем, содержит ли поддерево текущей категории выбранный sub_subcategory $subtreeContainsSelectedSubSub = $selectedSubSubcategoryParam ? categoryContainsTarget($cat, $selectedSubSubcategoryParam) : false; $isOpened = $isParentOfSelected || $isSelected || $isChildSelected || $isSubChildSelected || $subtreeContainsSelectedSubSub; $inputName = $level === 0 ? 'category' : 'subcategory'; $inputChecked = ($isSelected || $isParentOfSelected || $isChildSelected) ? 'checked' : ''; // Если на странице задан sub_subcategory, отмечаем главную категорию/родителей, содержащих его if ($level === 0 && !$inputChecked && $subtreeContainsSelectedSubSub) { $inputChecked = 'checked'; } $dataParent = $parentSlug ? 'data-parent="'.$parentSlug.'"' : ''; // Определяем цвет только для активных категорий и их родителей, если выбран sub_subcategory внутри $colorStyle = ''; if ($isSelected || $isParentOfSelected || $isChildSelected || $isSubChildSelected || $subtreeContainsSelectedSubSub) { $colorStyle = 'color: var(--mainColor); font-weight: 600;'; } echo '