我正在尝试将菜单放在一起,以便感知哪个页面已加载。此站点不是在CMS中完成的,而是直接的PHP / HTML代码。
我目前的导航工作主要链接。有一个下拉,我遇到了问题。我需要能够查看父项或任何下拉列表中的子项是否处于活动状态。如果其中一个孩子活跃。在下面的例子中,这是“FAQ”,孩子们是“FAQ1”,“FAQ2”和“FAQ3”。
对于这个例子,我正在使用一个名为“active。”的CSS状态。
<style>
a{color:red;}
.active{color:blue;}
</style>
以下是用于菜单的脚本。家庭,产品和联系人的链接正在按预期工作。
<ul>
<li><a href="index.php" id="homenav" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="active"';?>>Home</a></li>
<li><a href="products.php" id ="prodnav" <?php if (strpos($_SERVER['PHP_SELF'], 'products.php')) echo 'class="active"';?>>Products</a></li>
<li><a href="faq.php" id ="faqnav" <?php if (strpos($_SERVER['PHP_SELF'], 'faq.php, faq1.php, faq2.php, faq3.php')) echo 'class="active"';?>>FAQ</a>
<ul>
<li><a href="faq1.php">FAQ1</a></li>
<li><a href="faq2.php">FAQ2</a></li>
<li><a href="faq3.php">FAQ3</a></li>
</ul>
</li>
<li><a href="contact.php" id ="connav" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="active"';?>>contact us</a></li>
</ul>
我可以请一些关于我应该如何编写这一行的帮助,让它以其他人的方式工作吗?
<li>
<a href="faq.php" id ="faqnav"
<?php
if (strpos($_SERVER['PHP_SELF'], 'faq.php, faq1.php, faq2.php, faq3.php'))
echo 'class="active"';
?>
>FAQ</a>
</li>
答案 0 :(得分:2)
strpos()每个参数只接受一个字符串,你不能给它一个列表。 试试这个:
<?php if (in_array(basename($_SERVER['PHP_SELF']), array('faq.php', 'faq1.php', 'faq2.php', 'faq3.php'))) echo 'class="active"';?>
basename()
从文件名中删除路径,因此您只有纯文件名in_array()
然后检查此路径是否在数组中array()
生成要移交给in_array()
的字符串数组。请注意,您的代码中有4个单独的字符串,而不是一个长字符串。答案 1 :(得分:0)
为此目的使用in_array
:
if (in_array($_SERVER['PHP_SELF'], array('faq.php', 'faq1.php', 'faq2.php', 'faq3.php')) echo 'class="active"';
答案 2 :(得分:0)
如果您没有包含faq
的任何其他网页,您只需使用:
if (strpos($_SERVER['PHP_SELF'], 'faq') !== false)
请注意,我使用!== false
,strpos
可以在字符串开头找到0
时返回faq
。您也应该将其用于其他比较。
否则,请使用@MrTweek的in_array
解决方案。