我对PHP很陌生。问题是,我需要在特定页面的导航中插入一个CSS类。 我现在的方法是这样的。
<nav class="navbar navbar-expand-md navbar-light fixed-top scrolling-navbar
<?php if (basename($_SERVER['PHP_SELF']) === 'index.php' || basename($_SERVER['PHP_SELF']) === 'shop.php' || basename($_SERVER['PHP_SELF']) === 'news.php') { echo "navbar-transparent"; } ?>
">
可以用,但感觉很乱。 我打算继续研究一下(也许用switch语句更好?有没有更简洁的方法?
干杯
史蒂夫
如果你想检查一个值是否在一个集合中,一个简单的选择是使用... ... in_array
函数。
if(in_array(basename($_SERVER['PHP_SELF']), ['index.php', 'shop.php', 'news.php']))
如果你处理的是比较复杂的条件类或大量的动态属性,你可以考虑在PHP数组中定义这些条件,并动态地构建整个类的字符串,而不是各种内联条件。
比如说
<?php
$classes=["navbar", "navbar-expand-md", "navbar-light", "fixed-top", "scrolling-navbar"];
if(in_array(basename($_SERVER['PHP_SELF']), ['index.php', 'shop.php', 'news.php']))
$classes[]="navbar-transparent"; //Equivalent to array_push($classes, "navbar-transparent")
?>
<nav class="<?= implode(' ', $classes) ?>"></nav>
你可以使用 内爆 来将数组转换为一个以空格分隔的列表。如果类中包含用户输入或其他可疑的值,你应该使用 htmlentities 来转义输出。
你甚至可以把所有的属性都建立为一个多维关联数组并输出。这种方法对于许多应用来说可能是过度的,但对于一个更复杂的模板或组件框架来说可能是实用的。
<?php
function encodeAttributes(array $attributes): string{
$encoded="";
foreach($attributes as $key=>$value){
$encoded.=' '.htmlentities($key);
if($value!==null){ //Allow for attributes without values(for instance disabled or checked)
if(is_array($value))
$value=implode(' ', $value);
$encoded.='="'.htmlentities($value).'"';
}
}
return $encoded;
}
$attributes=[
"id"=>"main_nav",
"class"=>["navbar", "navbar-expand-md", "navbar-light", "fixed-top", "scrolling-navbar"]
];
?>
<nav<?= encodeAttributes($attributes) ?>></nav>