多个 "或 "语句设置CSS类的语法。

问题描述 投票:0回答:1

我对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语句更好?有没有更简洁的方法?

干杯

史蒂夫

php class if-statement insert switch-statement
1个回答
2
投票

如果你想检查一个值是否在一个集合中,一个简单的选择是使用... ... in_array 函数。

if(in_array(basename($_SERVER['PHP_SELF']), ['index.php', 'shop.php', 'news.php']))

1
投票

如果你处理的是比较复杂的条件类或大量的动态属性,你可以考虑在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>
© www.soinside.com 2019 - 2024. All rights reserved.