条件 HTML 类,具体取决于页面


Conditional HTML class depending on page

我正在寻找一种将其引入PHP的方法:

如果用户在"联系人.php"上,则插入"..."

现在,我有这个:

<?php
if(stripos($_SERVER['REQUEST_URI'], '/contact.php'))
{echo '<li class="current">';}
else{echo '<li>';} ?>

但是,由于某种原因,这似乎不起作用。

另外,我想知道是否有办法在不使用"数组"的情况下将其应用于多个页面(在目录中),所以基本上说:

如果用户在目录 A 中的文件上,则回显"..."。如果没有,则回显"..."。

编辑:我想出了为什么它不起作用,但我不明白。基本上,我编辑了一个HTML5模板,并将每个页面的通用脚本替换为页眉.php和页脚.php。但是,class="current"在每个单独的HTML页面上都位于不同的位置,现在是1个常见的PHP标头。当我链接到标题时.php我的标题中的函数在我像这样链接到标题时起作用:

<?php
require "header.php";
?>

但是当我像这样链接到我的标题时它不起作用:

<?php
require "http://localhost/header.php";
?>

但是,我的标题中的所有其他信息.php都通过..我相信只是这个功能停止工作。我在这里错过了一些非常简单的东西吗?如果是这样的话,请原谅我...

您的代码可能不起作用,因为如果在开头找到字符串"/contact.php",stripos 将返回 0,然后将其解释为 false。您应该使用 !== 运算符检查 stripos 的结果与 false 。

if(stripos($_SERVER['REQUEST_URI'], '/contact.php') !== false) { ... }

关于你的另一个问题:只需将REQUEST_URI字符串拆分为多个部分,并检查倒数第二个元素是否与您的目录匹配。尽管通常可能有更好的方法来解决您的问题。

编辑:根据Can Celik的评论,我建议您使用parse_url()函数[1]来分解整个请求URI。然后,您可以从返回的数组中访问URL的任何部分,并按照我之前的建议拆分"路径"部分:

$parts = parse_url($_SERVER['REQUEST_URI']);
$segments = explode("/", $parts["path"]);
$parent_dir = ""
if(count($segments) > 1) {
    $parent_dir = $segments[count($segments)-2]
}
if($parent_dir == "my_parent_dir") {
    echo '<li class="current">';
} else {
    echo '<li>';
}

[1] http://php.net/manual/en/function.parse-url.php

stripos() 应该很难与 FALSE 进行比较,以确定它是否真的找到了该项目。

与数组一样,字符串中的第一个字符是 0(零),而不是 1。如果针串的位置在干草堆串的开头,那么 stripos() 将返回 0,因为 0 是干草堆的第一个位置。但是 if() 会将 0 视为与 false 相同。

所以你应该说

if(stripos($_SERVER['REQUEST_URI'], '/contact.php') !== false)

http://php.net/manual/en/function.stripos.php

试试这个:

if($_SERVER['REQUEST_URI'] == 'contact.php'){
    echo '<li class="current">';
} else{
    echo '<li>';
}

如果您的联系页面有任何参数,则可以删除这些参数。

$urlParts = explode('?', $_SERVER['REQUEST_URI'], 2);
$page = $urlParts[0]; // <-- This will give you just contact.php for your example.