【问题标题】:Trouble with Dynamic Menu on Codeigniter, using Array and MySQLCodeigniter 上的动态菜单出现问题,使用数组和 MySQL
【发布时间】:2014-04-30 19:47:08
【问题描述】:

我尝试在这个问题上实现@Tomas 答案 > PHP foreach create menu from array

我在下面有模型:

<?php
class Menu_model extends CI_Model{
    function __construct(){
        parent::__construct();
        $this->load->database();
    }

    function getCategory($lang){
        $sql = "SELECT * FROM category WHERE category.lang='".mysql_real_escape_string($lang)."'";
        $result = $this->db->query($sql);
        return $result;
    }

    function getSubCategory($lang){
        $sql = "SELECT * FROM subcategory WHERE subcategory.lang='".mysql_real_escape_string($lang)."'";
        $result = $this->db->query($sql);
        return $result;
    }

}
?>

然后我用这个Controller来扔数据:

<?php
$_SESSION['lang'] = 'EN';

class Home extends CI_Controller {
    function __construct(){
        parent::__construct();
        $this->load->database();
        $this->load->model("menu_model");
    }

    public function index()
    {
        $data["category"] = $this->menu_model->getCategory($_SESSION['lang']);
        $data["subcategory"] = $this->menu_model->getSubCategory($_SESSION['lang']);

        $this->load->view('leftmenu_view',$data);//Left Menu
    }
}

这是我显示菜单的视图:

<?php
                foreach($category->result() as $menu){
                echo "<li><a class=\"sf-with-ul\" href=\"category/".$menu->urlcategory."\">".$menu->namecategory."</a></li>";
                    foreach($subcategory->result() as $key=>$submenu){
                        if ($menu->idcategory == $submenu->idcategory){
                            if ($key > 0){
                            echo "</li>";
                            }
                            echo "<ul class=\"sub-menu\"><a href=\"category/".$submenu->urlsubcategory."\">".$submenu->namesubcategory."</a><li>";
                        }
                    }
                }
                        ?>

单个菜单在循环上效果很好,但是当菜单有子菜单时,循环在结构上变得错误。

ul
  li-a--Single Menu--/a-/li ->Have no SubMenu, Works Good
  li-a--Single Menu--/a-/li ->Have no SubMenu, Works Good
  li-a--Single Menu--/a-/li ->Have SubMenu, False Structure
    ul-class=submenu
       a-Sub Menu-/a
       li--/li
       ul-class=submenu
         a-Sub Menu-/a
         li--/li
    /ul
ul

菜单结构应该是这样的:

ul
  li-a--Single Menu--/a-/li
  li-a--Single Menu--/a-/li
  li-a-Single Menu With Sub Menu-/a-/li
    ul-class=submenu
      li-a-Sub Menu-/a-/li
      li-a-Sub Menu-/a-/li
      li-a-Sub Menu-/a-/li
    /ul
  li-a--Single Menu--/a-/li
  li-a--Single Menu--/a-/li
ul

【问题讨论】:

  • 您是否将所有变量都转储出来以查看$data["category"] 中的内容?只需确保您的 $menu-&gt;namesubcategory 不能为 NULL
  • 嗨@JofryHS,我今天更新并编辑了我的脚本。我使用 $data["category"] 和 $data["subcategory"] 来抛出数据。是的,$data["category"] 不是 NULL。
  • @Tomas 的结构我认为是不同的......

标签: mysql codeigniter drop-down-menu submenu


【解决方案1】:
foreach($category->result() as $menu){
echo "<li><a class=\"sf-with-ul\" href=\"category/".$menu->urlcategory."\">".$menu->namecategory."</a>";
$subcat = $subcategory->result();
if(count($subcat) > 0){

    echo "<ul class=\"sub-menu\">";
        foreach($subcat as $submenu){ 
        if ($menu->idcategory == $submenu->idcategory){
            echo "<li class=\"menu-item menu-item-type-taxonomy menu-item-object-category\" style=\"white-space: normal; float: none; width: auto;\"><a class=\"sf-with-ul\" href=\"http://travellingbali.com/category/".$menu->urlcategory."/".$submenu->urlsubcategory."/\" style=\"float: none; width: auto;\">".$submenu->namesubcategory."</a>";                                   

            echo "</li>";
        }
    }
    echo "</ul>";

}
echo "</li>";
}

试试这个。也许对你有用..

【讨论】:

    【解决方案2】:

    @plain-简。我试过你的循环,但他们打印:

    <li><a>--</a></li> ->True
    <li><a>--</a></li> ->True
      <ul class="submenu">--</ul> ->False
    <li>--</li> ->False
      <ul class="submenu">--</ul> ->False
    <li>--</li> ->False
    

    在您的循环中,所有子菜单都成为第一个菜单。他们应该变成这样:

    <li><a>-Menu-</a></li>
    <li><a>-Menu-</a></li>
      <ul class="submenu">
        <li><a>-SubMenu-</a></li>
        <li><a>-SubMenu-</a></li>
        <li><a>-SubMenu-</a></li>
      </ul>
    <li><a>-Menu-</a></li>
    

    【讨论】:

      【解决方案3】:

      您在子菜单中打印 ul li 的结构似乎是错误的

      试试这个

         foreach($category->result() as $menu)
          {
             echo "<li><a class=\"sf-with-ul\" href=\"category/".$menu->urlcategory."\">".$menu->namecategory."</a>";
             /*check whether sub menu is there if so first print <ul> then <li><a>*/
             if(count($subcategory->result()) > 0 && is_array($subcategory->result()))
             {
                   echo "<ul class=\"sub-menu\">";
                   foreach($subcategory->result() as $key=>$submenu)
                   {
                     if ($menu->idcategory == $submenu->idcategory){
                      echo "<li><a href=\"category/".$submenu->urlsubcategory."\">".$submenu->namesubcategory."</a></li>";
                      }
                   }
                  echo "</ul>";
              }
              echo "</li>";
          }
      

      【讨论】:

      • 谢谢@plain-jane。我试过你的循环,但它们仍然打印错误。
      • 我试过你编辑的代码,但它们仍然打印错误的结构。现在所有子菜单都打印在菜单顶部,然后主菜单打印在菜单底部。所以子菜单和主菜单的样式相同,都变成了主菜单。
      • 下面这个结构中的真假是什么?
      • 您确定您的第二个菜单项中有 3 个子菜单吗?
      【解决方案4】:

      你可以这样做:这里是创建下拉菜单的功能它与创建动态菜单的方法相同 please check here

      这个可以帮到你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2013-10-10
        相关资源
        最近更新 更多