在控制器中创建菜单项并将其显示在 cakephp 3 的视图中
Creating menu item in controller and display it in view in cakephp 3
我正在控制器中创建菜单,只是想在视图中显示该菜单(在我的例子中它是一个元素)但问题是控制器正在创建的菜单部分没有附加到已经在视图中创建。我不太了解在控制器中创建 html 代码并在 Cakephp 中呈现视图。请帮助解决我的问题。我的代码片段是:
Controller Code:
public function sub_categories($id){
$categories = $this->Categories->find('all',array('conditions'=>array('parent IN'=>$id)))->toArray();
$i=0;
foreach($categories as $p_cat){
$cat_id=$p_cat['category_id'];
$categories[$i]['sub'] = $this->sub_categories($cat_id);
$i++;
}
return $categories;
}
public function get_categories()
{
$categories = $this->Categories->find('all',array('conditions'=>array('parent IN'=>'0')))->toArray();
$i=0;
foreach($categories as $p_cat){
$categories[$i]['sub'] = $this->sub_categories($p_cat['category_id']);
$i++;
}
return $categories;
}
public function fetch_menu($data){
foreach($data as $menu){
echo "<li class='dropdown menu__item'>";
echo "<a href=# class='dropdown-toggle menu__link' data-toggle='dropdown' role='button' aria-haspopup='true' aria-expanded='false'>".$menu->category_name."<span class='caret'></span></a>";
if(!empty($menu->sub)){
echo "<ul class='dropdown-menu multi-column columns-3'>";
echo "<div class='agile_inner_drop_nav_info'>";
echo $this->fetch_sub_menu($menu->sub);
echo "<div class='clearfix'></div>";
echo "</div>";
echo "</ul>";
}
echo "</li>";
}
}
public function fetch_sub_menu($sub_menu){
foreach($sub_menu as $menu){
echo "<div class='col-sm-3 multi-gd-img'>";
echo "<ul class='multi-column-dropdown'>";
echo "<li><a href='mens.html'>";
echo $menu->category_name;
echo "</a></li>";
echo "</ul>";
echo "</div>";
if(!empty($menu->sub)){
echo "<ul class='multi-column-dropdown'>";
echo "<li>";
echo $this->fetch_sub_menu($menu->sub);
echo "</li>";
echo "</ul>";
}
}
}
public function display()
{
$data = $this->get_categories();
$menu=$this->fetch_menu($data);
$this->set(compact('menu'));
}
View Code:
<li class=" menu__item"><a class="menu__link" href="#">About</a></li>
<?php
echo $menu;
?>....
请像这样更新您的 fetch_menu 功能
在这里,我只是用变量和单引号替换了双引号,双引号替换为单引号。 return 变量
public function fetch_menu($data){
$menu = "";
foreach($data as $val){
$menu.= '<li class="dropdown menu__item">';
$menu.= '<a href="#" class="dropdown-toggle menu__link" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$val->category_name.'<span class="caret"></span></a>';
if(!empty($val->sub)){
$menu.='<ul class="dropdown-menu multi-column columns-3">';
$menu.='<div class="agile_inner_drop_nav_info">';
$menu.=$this->fetch_sub_menu($val->sub);
$menu.='<div class="clearfix"></div>';
$menu.='</div>';
$menu.='</ul>';
}
$menu.='</li>';
}
return $menu;
}
我正在控制器中创建菜单,只是想在视图中显示该菜单(在我的例子中它是一个元素)但问题是控制器正在创建的菜单部分没有附加到已经在视图中创建。我不太了解在控制器中创建 html 代码并在 Cakephp 中呈现视图。请帮助解决我的问题。我的代码片段是:
Controller Code:
public function sub_categories($id){
$categories = $this->Categories->find('all',array('conditions'=>array('parent IN'=>$id)))->toArray();
$i=0;
foreach($categories as $p_cat){
$cat_id=$p_cat['category_id'];
$categories[$i]['sub'] = $this->sub_categories($cat_id);
$i++;
}
return $categories;
}
public function get_categories()
{
$categories = $this->Categories->find('all',array('conditions'=>array('parent IN'=>'0')))->toArray();
$i=0;
foreach($categories as $p_cat){
$categories[$i]['sub'] = $this->sub_categories($p_cat['category_id']);
$i++;
}
return $categories;
}
public function fetch_menu($data){
foreach($data as $menu){
echo "<li class='dropdown menu__item'>";
echo "<a href=# class='dropdown-toggle menu__link' data-toggle='dropdown' role='button' aria-haspopup='true' aria-expanded='false'>".$menu->category_name."<span class='caret'></span></a>";
if(!empty($menu->sub)){
echo "<ul class='dropdown-menu multi-column columns-3'>";
echo "<div class='agile_inner_drop_nav_info'>";
echo $this->fetch_sub_menu($menu->sub);
echo "<div class='clearfix'></div>";
echo "</div>";
echo "</ul>";
}
echo "</li>";
}
}
public function fetch_sub_menu($sub_menu){
foreach($sub_menu as $menu){
echo "<div class='col-sm-3 multi-gd-img'>";
echo "<ul class='multi-column-dropdown'>";
echo "<li><a href='mens.html'>";
echo $menu->category_name;
echo "</a></li>";
echo "</ul>";
echo "</div>";
if(!empty($menu->sub)){
echo "<ul class='multi-column-dropdown'>";
echo "<li>";
echo $this->fetch_sub_menu($menu->sub);
echo "</li>";
echo "</ul>";
}
}
}
public function display()
{
$data = $this->get_categories();
$menu=$this->fetch_menu($data);
$this->set(compact('menu'));
}
View Code:
<li class=" menu__item"><a class="menu__link" href="#">About</a></li>
<?php
echo $menu;
?>....
请像这样更新您的 fetch_menu 功能 在这里,我只是用变量和单引号替换了双引号,双引号替换为单引号。 return 变量
public function fetch_menu($data){
$menu = "";
foreach($data as $val){
$menu.= '<li class="dropdown menu__item">';
$menu.= '<a href="#" class="dropdown-toggle menu__link" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$val->category_name.'<span class="caret"></span></a>';
if(!empty($val->sub)){
$menu.='<ul class="dropdown-menu multi-column columns-3">';
$menu.='<div class="agile_inner_drop_nav_info">';
$menu.=$this->fetch_sub_menu($val->sub);
$menu.='<div class="clearfix"></div>';
$menu.='</div>';
$menu.='</ul>';
}
$menu.='</li>';
}
return $menu;
}