【问题标题】:Multilevel submenu codeigniter多级子菜单代码点火器
【发布时间】:2016-05-11 09:12:03
【问题描述】:

我必须将现有菜单扩展到多级菜单。我很难理解它,所以我希望有人可以帮助我。

  1. 首先,我在数据库中添加了另一个名为 parent_id 的表。

  2. 那我想看看这栏是不是填了,所以大于>0。

  3. 当然,还要检查 id == parent_id。

如果是这样,我想在父项悬停时显示我的子菜单。

我当前的菜单是多语言菜单。

这是我目前的模型:

var $default_order_by = array('position');

function findView($page)
{
    $language = $this->config->item('language');
    $p = new Page();
    $p->where('url_' . $language, $page)->get();
    return $p->view;
}

function findPageMenu($page)
{
    $language = $this->config->item('language');
    $p = new Page();
    $p->where('url_' . $language, $page)->get();
    return $p->menu;
}

function findAllByView()
{
    $pages = new Page();
    $result = array();
    foreach ($pages->get() as $page)
        $result[$page->view] = $page;

    return $result;
}

function getMenu()
{
    $pages = new Page();
    if ($this->session->userdata('is_admin'))
        return $pages->where('position >', 0)->get();
    else
        return $pages->where('position >', 0)->where('admin', 0)->get();
}

function getUrlByView($view)
{
    $page = new Page();
    $page->where('view', $view)->get();
    $language = $this->config->item('language');
    return $page->{'url_' . $language};
}

这是我的观点:

   <ul class="primary-nav">
    <?php foreach($menu as $page): ?>
     <li class="primary-nav__item">
        <a class="primary-nav__link" <?php if ($page_menu == $page->view): ?>class="active" <?php endif; ?>href="<?php echo base_url() . $this->config->item('language_abbr') . '/' . $page->{'url_' . $this->config->item('language')}; ?>"> 
            <?php echo mb_strtoupper($page->{'title_' . $this->config->item('language')}, 'UTF-8'); ?>
        </a>
    </li>

    <?php endforeach; ?>

我正在考虑做这样的事情:

function getSubMenu()
{
      if ($this->session->userdata('is_admin'))
        return $pages->where('position >', 0 && 'parent_id >', 0)->get();
    else
        // return $pages->where('position >', 0 && 'parent_id >', 0)->get();
        echo '<h1> yay </h1>';
}

(忽略耶,哈哈)但这显然还没有开始削减它。

【问题讨论】:

  • 请显示您的页面方法

标签: php html codeigniter multidimensional-array


【解决方案1】:

建议:可以在同一张表中添加“parent_id”。如果有父级,则用父级 ID 或 0 填充它。

答案:将您的数据作为一维数组获取,其中包含所有具有父 ID 的行。然后使用下面的函数创建一个有父子的多维数组。

function formatTree($tree, $parent = NULL) {
    $treeArray = array();
    foreach ($tree as $item) {
        if ($item['menu_parent'] == 0) {
            $treeArray[$item['menu_id']] = $item;
        }
        else {
            $treeArray[$item['menu_parent']]['sub'][] = $item;
        }
    }
    return $treeArray;
}

现在使用下面的函数来制作一个预期的父子菜单的ul-li列表

function buildMenu($menu_array, $is_sub = FALSE) {
    $attr = (!$is_sub) ? ' class="sidebar-menu"' : ' class="treeview-menu"';
    $menu = "<ul>"; // Open the menu container
    foreach ($menu_array as $id => $properties) {
        if (!isset($properties['sub'])) {
            $is_sub = TRUE;
        }
        elseif (empty($properties['sub'])) {
            $is_sub = TRUE;
        }
        foreach ($properties as $key => $val) {
            if (is_array($val) && !empty($val)) {
                $sub = $this -> buildMenu($val, TRUE);
            }
            else {
                $sub = NULL;
                $$key = $val;
            }
        }
        if ($properties['menu_url']) {
            $url = $properties['menu_url'];
        }
        $menu .= "<li>" . $menu_name . "</li>";
        unset($url, $menu_name, $sub);
    }
    return $menu . "</ul>";
}

我在我的应用程序中使用它。菜单数据的数组结构应该是

array(
  [0] => array(
    'menu_name' => 'name',
    'menu_url' => 'url',
    'menu_id' => 'id',
    'menu_parent' => 'parent id'
  ),
 [1] => array(
    'menu_name' => 'name',
    'menu_url' => 'url',
    'menu_id' => 'id',
    'menu_parent' => 'parent id'
 )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2012-02-09
    • 2011-06-04
    • 2016-01-28
    • 2012-06-30
    相关资源
    最近更新 更多