php - 使用数组和 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 -->
解决方案
找到了一个简单的解决方案!
$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'];
}
推荐阅读
- javascript - 有什么方法可以在新窗口中用名称从 blob 打开 PDF
- angular - 由于优化,在 Angular 应用程序产品问题中使用使用 @angular/elements 制作的 customElements 库
- sql - 想在sql中将行转换为列
- c# - 在 C# 中执行多个 Select 语句时出现“ORA-00933:SQL 命令未正确结束”
- python - 过滤后重复的结果
- angular - 从资产中获取图像并将其转换为 base64
- python-3.x - Robot Framework - 从其他带有参数的 *.robot 脚本调用 *.robot 脚本
- apache-spark - 如何以编程方式从 ps -ef 杀死 spark 作业
- node.js - Nativescript build fails with error "Manifest merger failed "
- javascript - 如何编写组件中继器