首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于设置CSS类的多个"or“语句的语法

问用于设置CSS类的多个"or“语句的语法
EN

Stack Overflow用户
提问于 2020-06-19 10:55:36
回答 2查看 42关注 0票数 0

我是PHP的新手。问题是,我需要在特定页面的nav中插入一个CSS类。这就是我现在的方式:

代码语言:javascript
复制
<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语句更好?)。有没有一种更干净的方法呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-19 11:00:06

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

代码语言:javascript
复制
if(in_array(basename($_SERVER['PHP_SELF']), ['index.php', 'shop.php', 'news.php']))
票数 2
EN

Stack Overflow用户

发布于 2020-06-19 11:58:45

如果要处理更复杂的条件类或大量动态属性,可以考虑在PHP数组中定义这些类,并动态构建整个类字符串,而不是使用各种内联条件。

例如:

代码语言:javascript
复制
<?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>

您可以使用implode将数组转换为空格分隔的列表。如果类包含用户输入的值或其他有问题的值,那么也应该使用htmlentities来转义输出。

您甚至可以将所有属性构建为多维关联数组并将其输出。这种方法对于许多应用程序来说可能是多余的,但在更复杂的模板或组件框架中可能是实用的。

代码语言:javascript
复制
<?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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62462538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档