Меню категорий сделано виджетом, при первой загрузке страницы с категориями они не залетают в навбар.
После обновления страницы всё отображается и работает. Ошибка возникает если страницу не трогать в течении часа где-то, а потом снова обновить, то категории пропадут. Помогите понять как это исправить и почему так происходит.
Код экшна:
public function renderCategories($categories, $is_parent, $is_sub_sub_category, $inner_counter, $prev_parent_id)
{
if ($inner_counter >= 3) {
return;
}
//If current category is not parent category
if (!$is_parent) {
$parent_id = $categories[0]['parent_id'];
//If current category is a neighbour to a prev category
if ($parent_id !== $prev_parent_id) {
$inner_counter++;
}
if ($is_sub_sub_category) {
$output .= '<ul class="dropdown-block sub-sub-category">';
} else {
$output .= '<ul class="dropdown-block">';
}
foreach ($categories as $category) {
$is_children_empty = empty($category['subcategories']);
$output .= '<li class="dropdown-block__item">';
$output .= '<a class="dropdown-block__item-link" href="' . $category['further_url'] . '" title="' . $category['title'] . '">';
$output .= $category['title'];
if (!$is_children_empty && $inner_counter < 3) {
$output .= '<i class="ti ti-chevron-right"></i>';
}
$output .= '</a>';
if (!$is_children_empty) {
$output .= $this->renderCategories($category['subcategories'], false, true, $inner_counter, $category['parent_id']);
}
$output .= '</li>';
}
$output .= '</ul>';
}
//If a current category is a one of main category
if ($is_parent) {
$output = '<ul class="dropdown-flex">';
foreach ($categories as $category) {
$output .= '<li class="dropdown-flex__item">';
$output .= '<a class="dropdown-flex__item-link" href="' . $category['further_url'] . '" title="' . $category['title'] . '">';
$output .= $category['title'];
$output .= '</a>';
if (!empty($category['subcategories'])) {
$output .= $this->renderCategories($category['subcategories'], false, false, 0, $category['parent_id']);
}
$output .= '</li>';
}
$output .= '</ul>';
}
return $output;
}
JQuery:
$(document).ready(function () {
const blockItems = $(".dropdown__container .dropdown-flex__item");
$(blockItems).on("mouseenter", function (e) {
const dropdownBlock = $(this).find("ul.dropdown-block")[0];
if (dropdownBlock) {
const itemRect = dropdownBlock.getBoundingClientRect();
const blockRight = window.innerWidth - itemRect.right;
const blockWidth = itemRect.width;
const isSmallRightSpace = blockRight <= (blockWidth * 2);
if (isSmallRightSpace) {
const itemLinks = $(dropdownBlock).find(".dropdown-block__item-link");
$(itemLinks).addClass("reverse");
$(itemLinks).find("i.ti.ti-chevron-right").removeClass("ti-chevron-right").addClass("ti-chevron-left");
$(dropdownBlock).find(".dropdown-block.sub-sub-category").addClass("left");
$(dropdownBlock).addClass("left");
}
}
});
});