我正在尝试将一个菜单放在一起,它会感知加载的页面。这个站点不是在 CMS 中完成的,而是直接的 PHP/HTML 代码。
我目前有主要链接的导航。有一个下拉菜单,我遇到了问题。我需要能够查看父项或任何下拉子项是否处于事件状态。如果其中一个 child 很活跃。在下面的示例中,这是“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>
最佳答案
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 个单独的字符串,而不是代码中的一个长字符串。
关于php - 查看数组中的一项是否为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103039/