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>
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы