checkbox值不同,else if如何实现织梦条件判断?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 织梦建站 正文
  1. else if 的使用:在PHP代码中进行多条件判断。
  2. checkbox 的处理:在表单和数据库中处理多选框。
  3. 综合应用场景:将两者结合,实现一个常见的需求——根据文章的多个属性(用checkbox勾选)来显示不同的内容。

第一部分:else if 在织梦中的使用

else if 是PHP中的条件控制语句,用于在 if 条件不满足时,继续判断下一个条件,这在织梦的模板文件(.php 文件)或自定义字段处理中非常常见。

织梦else if checkbox
(图片来源网络,侵删)

基本语法:

if (条件1) {
    // 如果条件1为真,执行这里的代码
} elseif (条件2) {
    // 如果条件1为假,但条件2为真,执行这里的代码
} elseif (条件3) {
    // 如果条件1和2都为假,但条件3为真,执行这里的代码
} else {
    // 如果以上所有条件都为假,执行这里的代码
}

织梦中的常见应用场景:

假设你在文章列表页(arclist)中,想根据文章的某个自定义字段(flag)来显示不同的前缀或图标。

示例: 根据文章的“推荐位”属性显示不同文字。

  1. 假设你有一个自定义字段 flag,存储了推荐位信息,'c' 代表“首页推荐”,'h' 代表“头条”。
  2. 在模板文件中(list_article.htm,你可以这样写:
{dede:arclist titlelen='30' row='10'}
    <li>
        <!-- 这里使用 else if 进行判断 -->
        [field:id runphp='yes']
            $flag = GetOneArchive(@me); // 获取文章信息,包括自定义字段
            $flagValue = $flag['flag']; // 假设自定义字段名为 'flag'
            if ($flagValue == 'h') {
                @me = "<span class='hot'>[头条]</span> ";
            } elseif ($flagValue == 'c') {
                @me = "<span class='commend'>[推荐]</span> ";
            } else {
                @me = "";
            }
        [/field:id]
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

代码解释:

  • [field:id runphp='yes']:这是一个非常强大的用法,允许你在模板中直接执行PHP代码。
  • GetOneArchive(@me):获取ID为 @me(当前文章ID)的文章完整信息。
  • $flagValue = $flag['flag'];:获取我们自定义的 flag 字段的值。
  • if / elseif / else:根据 flag 的值,给 @me 赋予不同的HTML字符串。
  • 这段PHP代码的输出(@me)就会显示在文章标题前面。

第二部分:checkbox 在织梦中的处理

checkbox(复选框)用于让用户从多个选项中选择一个或多个,在织梦中处理 checkbox 主要涉及两个步骤:后台添加字段前台模板调用

后台添加字段

  1. 进入织梦后台 -> 核心 -> 内容模型管理 -> 选择你使用的模型(文章”)-> 管理字段
  2. 点击 添加新字段
  3. 字段名称:填写英文名,如 tags_list
  4. 字段别名:可以和名称一样,用于在代码中调用。
  5. 字段类型选择“多选checkbox”
  6. 选项(一行一个):填写你的选项,每行一个。
    热门
    精品
    新品
    促销
  7. 保存

前台模板调用

添加完字段后,在发布文章时你就可以看到这个多选框了,在文章内容页(article_article.htm)或列表页调用时,需要特殊处理。 页调用:**

假设字段名为 tags_list

<h3>文章属性:</h3>
<p>
    {dede:field.tags_list runphp='yes'}
        $options = explode(',', @me); // 将逗号分隔的字符串转换为数组
        $result = '';
        foreach ($options as $option) {
            $option = trim($option); // 去除空格
            if (!empty($option)) {
                // 给每个选项加上一个标签样式
                $result .= "<span class='label label-primary'>" . $option . "</span> ";
            }
        }
        @me = $result; // 将处理后的结果赋值给 @me
    {/dede:field.tags_list}
</p>

代码解释:

  • explode(',', @me):织梦将checkbox的值以逗号分隔存入数据库,所以这里用 explode 函数把它拆分成一个数组。
  • foreach ($options as $option):遍历这个数组。
  • @me = $result:将拼接好的HTML字符串重新赋值给 @me 进行显示。

第三部分:综合应用场景(else if + checkbox

这是一个非常实用的例子:根据文章勾选的多个属性(checkbox),来显示不同的组合样式或文字。

需求: 文章有“热门”、“精品”、“新品”三个属性(checkbox),我们希望在文章列表中,如果文章同时被勾选了“热门”和“精品”,就显示“火精品”的徽章;如果只勾选了“热门”,就显示“热门”徽章;如果都没有,就不显示任何徽章。

实现步骤:

  1. 按照第二部分的方法,创建一个名为 article_flags 的多选checkbox字段,选项为“热门,精品,新品”。

  2. 在列表页模板(list_article.htm)中,结合 else ifcheckbox 的值进行判断。

{dede:arclist titlelen='30' row='10'}
    <li>
        <!-- 使用 runphp 来处理复杂的逻辑 -->
        [field:id runphp='yes']
            // 1. 获取文章的所有信息,包括我们自定义的 checkbox 字段
            $arc = GetOneArchive(@me);
            $flags_str = $arc['article_flags']; // 获取到类似 "热门,精品" 这样的字符串
            // 2. 如果字段为空,直接不显示任何东西
            if (empty($flags_str)) {
                @me = "";
            } else {
                // 3. 将字符串拆分成数组
                $flags_array = explode(',', $flags_str);
                // 4. 使用 else if 进行逻辑判断
                if (in_array('热门', $flags_array) && in_array('精品', $flags_array)) {
                    // 同时包含“热门”和“精品”
                    @me = "<span class='badge badge-warning'>火精品</span> ";
                } elseif (in_array('热门', $flags_array)) {
                    // 只包含“热门”
                    @me = "<span class='badge badge-danger'>热门</span> ";
                } elseif (in_array('新品', $flags_array)) {
                    // 只包含“新品”
                    @me = "<span class='badge badge-success'>新品</span> ";
                } else {
                    // 包含其他组合(比如只有“精品”),或者不符合以上任何条件
                    @me = "";
                }
            }
        [/field:id]
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

代码解释:

  • GetOneArchive(@me):获取文章所有信息。
  • $flags_str = $arc['article_flags'];:获取checkbox字段存储的原始字符串。
  • explode(',', $flags_str):将其转换为数组,方便判断。
  • in_array('热门', $flags_array):检查数组中是否存在“热门”这个元素。
  • if / elseif / else:这里就是核心的 else if 逻辑,我们按照业务需求的优先级(先判断“火精品”,再判断“热门”,最后判断“新品”)来写,确保逻辑的正确性。
  • 根据不同的条件组合,生成不同的HTML徽章代码。
概念 作用 织梦中的实现方式
else if 逻辑判断:在多个条件中按顺序选择第一个为真的条件执行。 在模板中使用 [field:xxx runphp='yes'] 标签包裹PHP代码,或在PHP文件中直接使用。
checkbox 数据收集:允许用户选择多个值,数据通常以逗号分隔的字符串形式存入数据库。 后台:内容模型管理 -> 添加字段 -> 选择“多选checkbox”,前台:用 explode() 函数拆分字符串后处理。

将两者结合,你就可以在织梦模板中实现非常灵活和复杂的显示逻辑,让你的网站内容更具表现力。

-- 展开阅读全文 --
头像
织梦 dedecms 更换 后台模板
« 上一篇 12-06
织梦502错误,网关故障如何排查解决?
下一篇 » 12-07

相关文章

取消
微信二维码
支付宝二维码

目录[+]