Задать вопрос
Ballly
@Ballly

Как сделать, чтобы при переходе по родительскому элементу отображались материалы дочерних категорий?

Всем здравствуйте! Подскажите как сделать так, чтобы при клике на родительский элемент получать вывод всех материалов дочерних категорий? Код приведенный ниже написан не мною, но я его использую для вывода меню категорий, данный код написан как виджет.
public $tpl;
    public $model;
    public $data;
    public $tree;
    public $menuHtml;

    public function init(){
        parent::init();
        if( $this->tpl === null ){
            $this->tpl = 'menu';
        }
        $this->tpl .= '.php';
    }

    public function run(){
        if($this->tpl == 'menu.php'){
            $menu = Yii::$app->cache->get('menu');
            if($menu) return $menu;
        }

        $this->data = Category::find()->indexBy('id')->orderBy('position')->asArray()->all();
        $this->tree = $this->getTree();
        $this->menuHtml = $this->getMenuHtml($this->tree);
        
        if($this->tpl == 'menu.php'){
            set cache
            Yii::$app->cache->set('menu', $this->menuHtml, 60);
        }

        return $this->menuHtml;
    }

    protected function getTree(){
        $tree = [];
        foreach ($this->data as $id=>&$node) {
            if (!$node['parent_id'])
                $tree[$id] = &$node;
            else
                $this->data[$node['parent_id']]['childs'][$node['id']] = &$node;
        }
        return $tree;
    }

    protected function getMenuHtml($tree, $tab = ''){
        $str = '';
        foreach ($tree as $category) {
            $str .= $this->catToTemplate($category, $tab);
        }
        return $str;
    }

    protected function catToTemplate($category, $tab){
        ob_start();
        include __DIR__ . '/menu_tpl/' . $this->tpl;
        return ob_get_clean();
    }

Файл отвечающий за вывод меню категорий
<li>
	<a href="<?= \yii\helpers\Url::to(['category/view', 'alias_cat' => $category['alias']]) ?>">
	<?= $category['name'] ?>
	<?php if ( isset($category['childs']) ): ?>
		
	<?php endif; ?>
	</a>
	<?php if ( isset($category['childs']) ): ?>
		<ul>
			<?= $this->getMenuHtml($category['childs']) ?>
		</ul>
	<?php endif; ?>
</li>
  • Вопрос задан
  • 52 просмотра
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Onskills
    PHP: базовый курс
    1 месяц
    Далее
  • teamcoding
    TC200PY Разработка PHP веб-приложений на Yii2. Шаблон приложения advanced
    3 месяца
    Далее
  • FructCode
    Yii2 Фреймворк
    2 месяца
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы