首页 > 解决方案 > 使用数组和 foreach 的 PHP 页面导航,类别级别的问题 = 活动

问题描述

因此,在另一篇文章中,CBroe 非常有帮助,与 @MeathCoder 一起说明了所需的更改。从那以后我已经能够完成整个事情,它看起来很棒,但是我很难将类别设置为活动!下面是我的代码,不确定如何更改内容以将活动添加到类别 div 的类中。

我添加了 cat_options 数组,所以我可以循环遍历它,然后循环遍历下一个数组是 cat['category'] is = to $nav['category']。我添加了一些选项,因为我不希望所有页面都在导航中可见。

上一篇供参考:PHP 页面导航优化 - 在导航项上设置“活动”

因此,例如,如果活动页面属于类别 1,我需要将其设置为“<div class="menu-item has-sub active">”

我已将 HTML 中的位置标记为下面的“<div class="menu-item has-sub $CAT_ACTIVE">”。

这里有一张图片供参考,由于没有激活,类别不会扩展,我可以手动扩展它,但这对很多人来说并不直观。 在此处输入图像描述

<?

/**
 * Set active navigation page (highlighted in navigation menu) based on which page we're on.
 */ 

$cat_options = [
    ['category' => '1', 'category_image' => 'fa fa-th-large', 'category_name' => 'Dashboard'],
    ['category' => '2', 'category_image' => 'fas fa-battery-half', 'category_name' => 'Health'],
    ['category' => '3', 'category_image' => 'fas fa-wrench', 'category_name' => 'Tools'],
    ['category' => '4', 'category_image' => 'fas fa-user-secret', 'category_name' => 'Administration'],
];

$nav_options = [ 
    ['page_link' => 'index.php',                  'category' => '1', 'link_display' => 'yes', 'link_text' => 'Home' ],
    ['page_link' => 'checklist.php',              'category' => '1', 'link_display' => 'yes', 'link_text' => 'Health Checks' ],
    ['page_link' => 'outages.php',                'category' => '1', 'link_display' => 'yes', 'link_text' => 'Outage Management' ],
    ['page_link' => 'outage_detail.php',          'category' => '1', 'link_display' => 'no',  'link_text' => 'Outage Details' ],
    ['page_link' => 'outage_add.php',             'category' => '1', 'link_display' => 'no',  'link_text' => 'Add Outage' ],
    ['page_link' => 'tasks.php',                  'category' => '1', 'link_display' => 'yes', 'link_text' => 'Tasks/Issues' ],
    ['page_link' => 'tasks_closed.php',           'category' => '1', 'link_display' => 'yes', 'link_text' => 'Closed Tasks' ],
    ['page_link' => 'task_detail.php',            'category' => '1', 'link_display' => 'no',  'link_text' => 'Task Details' ],
    ['page_link' => 'task_add.php',               'category' => '1', 'link_display' => 'no',  'link_text' => 'Add Task' ],
    ['page_link' => 'links.php',                  'category' => '1', 'link_display' => 'yes', 'link_text' => 'Common Links' ], 
    ['page_link' => 'health/tunnel_status.php',   'category' => '2', 'link_display' => 'yes', 'link_text' => 'AGC Tunnel Status' ],
    ['page_link' => 'health/qcall_status.php',    'category' => '2', 'link_display' => 'yes', 'link_text' => 'qCall Status' ],
    ['page_link' => 'health/ata_status.php',      'category' => '2', 'link_display' => 'yes', 'link_text' => 'ATA Status' ],
    ['page_link' => 'health/fax_status.php',      'category' => '2', 'link_display' => 'yes', 'link_text' => 'Fax Status' ],
    ['page_link' => 'health/tandem_health.php',   'category' => '2', 'link_display' => 'yes', 'link_text' => 'Tandem Health (CICS)' ],
    ['page_link' => 'health/oosagc.php',          'category' => '2', 'link_display' => 'yes', 'link_text' => 'AGC OOS MTAs' ],
    ['page_link' => 'health/total_oos_graph.php', 'category' => '2', 'link_display' => 'yes', 'link_text' => 'Total OOS MTAs' ],
    ['page_link' => 'health/dialogic.php',        'category' => '2', 'link_display' => 'yes', 'link_text' => 'Dialogic Status' ],
    ['page_link' => 'health/netscreen.php',       'category' => '2', 'link_display' => 'yes', 'link_text' => 'Netscreen Status' ],
    ['page_link' => 'health/telovations.php',     'category' => '2', 'link_display' => 'yes', 'link_text' => 'Telovations Status' ],
    ['page_link' => 'tools/password-gen.php',     'category' => '3', 'link_display' => 'yes', 'link_text' => 'Password Generator' ],
    ['page_link' => 'tools/pcmm_check.php',       'category' => '3', 'link_display' => 'yes', 'link_text' => 'PCMM Host Check' ],
    ['page_link' => 'tools/elements.php',         'category' => '3', 'link_display' => 'yes', 'link_text' => 'Network Elements' ],
    ['page_link' => 'tools/passwords.php',        'category' => '3', 'link_display' => 'yes', 'link_text' => 'Password Vault' ],
    ['page_link' => 'admin/users.php',            'category' => '4', 'link_display' => 'yes', 'link_text' => 'User Admin' ],
    ['page_link' => 'admin/checks.php',           'category' => '4', 'link_display' => 'yes', 'link_text' => 'Health Check Admin' ],
    ['page_link' => 'admin/reports.php',          'category' => '4', 'link_display' => 'yes', 'link_text' => 'Health Check Reports' ]  
];

$arr = [];



foreach( $nav_options as $key => $nav_opt ) {
    $url = BASE_PATH . '' . $nav_opt["page_link"];

    if( $_SERVER['PHP_SELF'] == $url ){
        // active
        $arr[$key]['css_class']    = 'active';
        $arr[$key]['link_href']    = $url;
        $arr[$key]['link_text']    = $nav_opt['link_text'];
        $arr[$key]['category']     = $nav_opt['category'];
        $arr[$key]['link_display'] = $nav_opt['link_display'];        
    } else {
        // not active 
        $arr[$key]['css_class']    = '';
        $arr[$key]['link_href']    = $url;
        $arr[$key]['link_text']    = $nav_opt['link_text'];
        $arr[$key]['category']     = $nav_opt['category'];
        $arr[$key]['link_display'] = $nav_opt['link_display'];        
    }
}


?>
<!-- BEGIN menu -->
                <div class="menu">
                    
                    <div class="menu-header">Navigation</div>
                    
                    <?
                    foreach ( $cat_options as $cat) {
                        echo "
                        <div class=\"menu-item has-sub $CAT_ACTIVE\">
                            <a href=\"javascript:;\" class=\"menu-link\">
                                <div class=\"menu-icon\">
                                    <i class=\"".$cat['category_image']."\"></i>
                                </div>
                                <div class=\"menu-text\">".$cat['category_name']."</div>
                                <div class=\"menu-caret\"></div>
                            </a>
                            <div class=\"menu-submenu\">";
                        
                            foreach ( $arr as $nav) {
                                if ($nav['category'] == $cat['category'] AND $nav['link_display'] == 'yes') {
                                    echo "
                                <div class=\"menu-item ".$nav['css_class']."\">
                                    <a href=\"".$nav['link_href']."\" class=\"menu-link \"><div class=\"menu-text\">".$nav['link_text']."</div></a>
                                </div>
                                    ";
                                }
                            }
                        
                    echo "
                            </div>
                        </div>"; 
                    }
                    
                    ?>                       
                    
                       

                    

                    
                    <!-- BEGIN minify-button -->
                    <div class="menu-item d-flex">
                        <a href="javascript:;" class="app-sidebar-minify-btn ms-auto" data-toggle="app-sidebar-minify"><i class="fa fa-angle-double-left"></i></a>
                    </div>
                    <!-- END minify-button -->
                </div>
                <!-- END menu -->

标签: phphtml

解决方案


找到了一个简单的解决方案!

    $cat_options = [
    ['category' => '1', 'active' => '', 'category_image' => 'fa fa-th-large', 
    'category_name' => 'Dashboard'],
    ['category' => '2', 'active' => '', 'category_image' => 'fas fa-battery-half', 
    'category_name' => 'Health'],
    ['category' => '3', 'active' => '', 'category_image' => 'fas fa-wrench', 
    'category_name' => 'Tools'],
    ['category' => '4', 'active' => '', 'category_image' => 'fas fa-user-secret', 
    'category_name' => 'Administration'],
    ];

向数组添加了一个新字段,然后在 page=page 的逻辑中,我将该字段设置为活动。

    if( $_SERVER['PHP_SELF'] == $url ){
        // active
        $arr[$key]['css_class']    = 'active';
        $cat_options[$nav_opt['category']]['active']     = 'active';
        $arr[$key]['link_href']    = $url;
        $arr[$key]['link_text']    = $nav_opt['link_text'];
        $arr[$key]['category']     = $nav_opt['category'];
        $arr[$key]['link_display'] = $nav_opt['link_display'];        
    }

推荐阅读