嘿伙计们!
目前,我正在编写一个用于为每个页面生成导航栏的类,我只需更改此PHP脚本。
我正在使用静态函数生成代码。第一个参数必须是绝对URL的其余部分(不良描述......我不知道如何描述函数被调用的地方:()。
所以目前,我正在使用if-clauses来检查后续的listitem是否应该是活动的(可视)。只有当导航条目的绝对路径与绝对路径的组成和给定的文件路径参数之间存在相等时,脚本才会回显“活动”。 css课。否则它不会。
验证使用关联数组来获取相应html文件的绝对文件路径。
这是一个示例代码碎片,我希望它会更清晰,因为我的声明不是很好,而且我来自德国可能会导致英语不好:)
echo "<ul class='dropdown-menu'>\n";
if($use.$filepath == $urls['netOv']){
echo "<li class='active'>";
}else{
echo "<li>";
}
echo "<a href='" . $urls['netOv'] . "'>Overview</a></li>\n";
if($use.$filepath == $urls['netFut']){
echo "<li class='active'>";
}else {
echo "<li>";
}
echo "<a href='" . $urls['netFut'] . "'>Functions</a></li>\n";
(&#39; $ urls&#39;是数组,我已经说过了,其中绝对路径已经存放)
我真的不知道这是否是我问题的最佳解决方案,因为每个菜单项都有很多if-clauses。
这是非常无形的,不是吗?
提前感谢帮助
答案 0 :(得分:0)
我认为不是多次回应,你可以把一个变量添加到if else条件中。最后回显该变量的整体内容。如果性能是您正在寻找的,那么这将导致比现有性能更好的性能。
答案 1 :(得分:0)
您需要进行更多PHP预处理。限制直接在模板中实现的逻辑量并坚持最简单的方法是一种很好的做法。
有很多方法可以实现这一点,但是与您的代码兼容的简单方法是将它们全部存储在数组中并在模板中循环它。
<?php
// I'm not sure whether `$urls` contains URLs from other pages than the menu and I'll assume that it's the case. Let's create a separate array for menu URLs:
$menuItems = array(
$urls['netOv'] => array(
'label' => 'Overview',
'class' => '',
),
$urls['netFut'] => array(
'label' => 'Functions',
'class' => '',
),
);
// Let's set the current active page
if (!empty($menuItems[$use.$filepath])) {
$menuUrls[$use.$filepath]['class'] = ' class="active"';
}
// Now let's print it all
foreach ($menuItems as $menuUrl => $menuItem) {
echo '<li' . $menuItem['class'] . '><a href="' . $menuUrl . '">' . $menuItem['label'] . '</a></li>';
}
这样,如果您将来需要添加更多菜单,只需将它们添加到$menuItems
数组即可。如您所见,我只使用了一个if
语句:)
答案 2 :(得分:0)
感谢给大家!
我现在找到了解决方案。它是性能最高的,但使用JavaScript。 php脚本只打印导航的html,所以没有'echos',只需要纯HTML作为php-function。
在每个站点上都有一个php生成的JavaScript,将该类添加到当前文件中,该文件已打开。
对我来说,这个解决方案令人满意。关闭JavaScript的人无需查看哪个网站已启用:)
再次感谢 帮助。我会记住这些解决方案,并会有另一种情况可以使用......