【问题标题】:How to set Parent and Sub-menu class as active如何将父菜单和子菜单类设置为活动
【发布时间】:2018-05-29 16:17:37
【问题描述】:

当前问题:激活父菜单和子菜单类。

基本上,我有一个包含当前页面布局的 json 数组。我想循环遍历数组并查找它是否与当前页面匹配。由于某种原因,它根本不匹配,当我让它匹配时,它输出的页面名称不是“活动”或“_活动”?

任何更好的方法将不胜感激:)

json页面数组:

{
    "Pages":{
        "Home":"Dashboard",
        "USD Market":{
            "Current-Trades":"USD-Current-Trades",
            "Exchange-Trades":"USD-Exchange-Trades"
        }
    }
}

在页眉中:

<?php   
    $directoryURI = $_SERVER['REQUEST_URI'];
    $path = parse_url($directoryURI, PHP_URL_PATH);
    $components = explode('/', $path);
    $pagename = $components[1];
?>

功能:

    public function pages($pagename)
{
    if ($pagename == array($config['Pages']))
    {
        print 'yes';
    } else {
        print 'no';
    }
}

菜单:

            <div class="menu">
            <ul class="list">
                <li class="header">MAIN NAVIGATION</li>
                <li class="<?php print $dash->pages($pagename); ?>">
                    <a href="/Dashboard">
                        <i class="material-icons">home</i>
                        <span>Home</span>
                    </a>
                </li>
                <li>
                    <a href="javascript:void(0);" class="menu-toggle">
                        <i class="material-icons">trending_down</i>
                        <span>USD ($) - Market Trades</span>
                    </a>
                    <ul class="ml-menu">
                        <li class="<?php print $dash->pages($pagename); ?>">
                            <a href="/USD-Current-Trades">
                                <span>Current Trades</span>
                            </a>
                        </li>
                        <li>
                            <a href="javascript:void(0);">
                                <span>Exchange Trades</span>
                            </a>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>

感谢您提供的任何意见:)

【问题讨论】:

    标签: php css arrays json


    【解决方案1】:

    public function pages() 中,您检查一下:

    if ($pagename == array($config['Pages']))
    

    但是$config从来没有在那个方法中定义过,也没有传入,所以它永远是假的。如果您查看您的 error_log,如果您设置了 error_reporting,您可能会看到一条通知。 (将 error_reporting 设置为 -1!)

    我猜你的意思是 json_decode($json, true) 某处,并将其作为第二个参数传递。

    <?php
    
    $pages = json_decode('{
        "Pages":{
            "Home":"Dashboard",
            "USD Market":{
                "Current-Trades":"USD-Current-Trades",
                "Exchange-Trades":"USD-Exchange-Trades"
            }
        }
    }', true);
    
    class Z
    {
        private $pages;
    
        private $currentPage;
    
        public function setConfig($currentPage, array $config)
        {
            $this->currentPage = $currentPage;
            $this->pages = [];
            $this->addToPageList($config['Pages']);
        }
    
        public function pages($linkName)
        {
            return $this->pages[$linkName];
        }
    
        public function addToPageList(array $pages)
        {
            foreach ($pages as $key => $page) {
                if (is_array($page)) {
                    $this->addToPageList($page);
                } else {
                    $active = ($page == $this->currentPage) ? 'active' : 'inactive';
                    $this->pages[$page] = $active;
                }
            }
        }
    }
    
    $z = new Z();
    $z->setConfig('USD-Exchange-Trades', $pages); // current page, page config
    echo $z->pages('USD-Exchange-Trades') . "\n";
    echo $z->pages('USD-Current-Trades') . "\n";
    echo $z->pages('Dashboard') . "\n";
    

    输出:

    active 
    inactive 
    inactive
    

    在这里玩https://3v4l.org/PtAiF

    【讨论】:

    • $config 在另一个文件中定义,并使用 require_once $config = json_decode($json, true); 调用,它正在函数页面中调用。
    • 好的,但是它永远不会传递到该类方法中,这意味着它超出了范围,并且无法访问。
    • 你能不能让我在正确的方向上把它解析成类函数?
    • 调整您的方法以获取第二个参数作为更新,然后无论您调用pages($pageName),添加配置!
    • 是否有更好的方法来做到这一点?由于我坚持父名称为 $config['Pages]['USD Market'] 而子菜单为 $config['Pages']['USD Market']['USD-Current-Trades'] 我需要使两个类都处于活动状态,只有子菜单类处于活动状态。
    猜你喜欢
    • 2015-12-20
    • 2019-03-23
    • 2019-01-22
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多