Как разместить все родительские категории на одной странице со ссылками на их дочерние категории, структура примерно такая:
На одной странице находятся все родительские категории; Когда вы нажимаете на категорию, ее новые категории отображаются на новой странице.
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?
Вы можете сделать это следующим образом:
Ваш контроллер:
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
Других решений пока нет …