Yii2 Хлебные крошки полностью

105
14 октября 2021, 18:10

Вообщем народ у меня такая проблема с хлебными крошками на данный момент в товаре хлебные крошки, выглядят примерно так:

$this->params['breadcrumbs'][] = [
        'template' => "<li><b>{link}</b></li>\n", //  шаблон для этой ссылки
        'label' => 'Каталог', // название ссылки
        'url' => ['/catalog/index'] // сама ссылка
    ];
$this->params['breadcrumbs'][] = ['label' => $currentCatName, 'url' => ['catalog/category', 'id' => $currentProd->category_id]];
$this->params['breadcrumbs'][] = ['label' => $currentProd->title];

Т.е. грубо говоря у меня есть главная, категория и сам товар, но это не подходит, поскольку у меня может быть бесконечная вложенность я создал рекурсию и ей тяну все категории начиная с той в которой находится товар и заканчивая основной вот код:

$categories = self::getBreadcrumbsCategory($currentProd->category_id);
public function getBreadcrumbsCategory($category_id = 0) {
    $category = [];
    $item = Category::find()->where(['id' => $category_id])->asArray()->one();
    $category['id'] = $item['id'];
    $category['title'] = $item['title'];
    if ($item['parent_id'] != 0) {
        $category['children'] = self::getBreadcrumbsCategory($item['parent_id']);
    }
    return $category;
}

Проблема в том, что как мне теперь сделать всё наоборот, у меня получается категория должна быть первой стоит на определённой глубине вложенности, и заранее я не знаю на какой. Вот так:

Array
(
    [id] => 17449
    [title] => Ленточнопильные станки и полотна
    [children] => Array
        (
            [id] => 15094
            [title] => Станки
            [children] => Array
                (
                    [id] => 2
                    [title] => Станки
                )
        )
)

Может кто-знает как это всё дело развернуть ??

Answer 1

Всё я нашел как решить проблему, надо было всего, формировать массив по другому , а потом развернуть его, вообщем вот код:

function getBreadcrumbsCategory($category_id = 0) {
    $category = [];
    $item = Category::find()->where(['id' => $category_id])->asArray()->one();
    $category[] = $item['title'] . '_' . $item['id'];
    if ($item['parent_id'] != 0) {
        $other_cat = self::getBreadcrumbsCategory($item['parent_id']);
        $category = array_merge($category, $other_cat);
    }
    return $category;
}
$categories_back = array_reverse(self::getBreadcrumbsCategory($currentProd->category_id));
READ ALSO
mysql вывести группируя по полю

mysql вывести группируя по полю

в таблице main есть записи,

68
Решите пожалуйста задачу по массивам

Решите пожалуйста задачу по массивам

Введите с клавиатуры целое число XВыведите на экран номер элемента массива, который равен X

192
Как проверить какой цвет на кнопках

Как проверить какой цвет на кнопках

На активности есть кнопки Оранжевого цвета, мне нужно все кнопки оранжевого цвета заменить на белыйПотому-что у меня есть другие кнопки,...

115