Выводы категорий с подкатегориями

Как разместить все родительские категории на одной странице со ссылками на их дочерние категории, структура примерно такая:

На одной странице находятся все родительские категории; Когда вы нажимаете на категорию, ее новые категории отображаются на новой странице.

CategoryController:

public function actionIndex(){
return $this->render('index', [
'model' => $this->outTree($id)
]);
}

public function getAllArray(){
$all = Category::find()->all();
$array = array();
foreach($all as $v){
$array[$v->parentId][] = $v;
}
return $array;
}

public function outTree($parentId) {
$array = $this->getAllArray();
if(isset($array[$parentId])){
echo '<div>';
foreach($array[$parentId] as $v){
echo '<div>'.$v->name.'</div>';
echo '<div>'.$v->id.'</div>';
echo '<div>'.$v->parentId.'</div>';
$this->outTree($v->id);
}
echo '</div>';
}
}

protected function findModel($alias)
{
if (($model = Category::findOne(['alias' => $alias, 'active' => 1])) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}

Отношения родительских категорий с детьми:

public function getParent()
{
return $this->hasOne(Category::className(), ['id' => 'parentId']);
}

Как мне сделать такой вывод в виде, теперь вывод идет в контроллер? На данный момент все родительские категории и их дочерние категории отображаются на одной странице. Нужно ли что-то регистрировать в UrlManager?

0

Решение

Вы можете сделать это следующим образом:

Ваш контроллер:

public function actionIndex($parentId = null){
$models = Category::find()->andWhere(['parent_id' => $parentId])->all();

return $this->render('index', [
'models' => $models
]);
}

public function actionGetChilds($parentId){
$models = Children::find()->andWhere(['parent_id' => $parentId])->all();

return $this->render('childs', [
'models' => $models
]);
}

Вы просматриваете страницу (индекс):

foreach($models as $model):
echo Html::a($model->name, Url::to(['index', 'parentId' => $model->parent_id]));
endforeach;

Ваша страница просмотра (ребенок):

foreach($models as $model):
echo Html::a($model->name, Url::to(['get-childs', 'parentId' => $model->parent_id]));
endforeach;

Примечание: я думаю, что вы еще одно отношение с именем GetChildern в категории
Модель, вы можете использовать его в действии индекса, чтобы получить все дочерние для категории по
этот $model->childern

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector