else if的使用:在PHP代码中进行多条件判断。checkbox的处理:在表单和数据库中处理多选框。- 综合应用场景:将两者结合,实现一个常见的需求——根据文章的多个属性(用checkbox勾选)来显示不同的内容。
第一部分:else if 在织梦中的使用
else if 是PHP中的条件控制语句,用于在 if 条件不满足时,继续判断下一个条件,这在织梦的模板文件(.php 文件)或自定义字段处理中非常常见。

(图片来源网络,侵删)
基本语法:
if (条件1) {
// 如果条件1为真,执行这里的代码
} elseif (条件2) {
// 如果条件1为假,但条件2为真,执行这里的代码
} elseif (条件3) {
// 如果条件1和2都为假,但条件3为真,执行这里的代码
} else {
// 如果以上所有条件都为假,执行这里的代码
}
织梦中的常见应用场景:
假设你在文章列表页(arclist)中,想根据文章的某个自定义字段(flag)来显示不同的前缀或图标。
示例: 根据文章的“推荐位”属性显示不同文字。
- 假设你有一个自定义字段
flag,存储了推荐位信息,'c'代表“首页推荐”,'h'代表“头条”。 - 在模板文件中(
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 主要涉及两个步骤:后台添加字段 和 前台模板调用。
后台添加字段
- 进入织梦后台 -> 核心 -> 内容模型管理 -> 选择你使用的模型(文章”)-> 管理字段。
- 点击 添加新字段。
- 字段名称:填写英文名,如
tags_list。 - 字段别名:可以和名称一样,用于在代码中调用。
- 字段类型:选择“多选checkbox”。
- 选项(一行一个):填写你的选项,每行一个。
热门 精品 新品 促销 - 保存。
前台模板调用
添加完字段后,在发布文章时你就可以看到这个多选框了,在文章内容页(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),我们希望在文章列表中,如果文章同时被勾选了“热门”和“精品”,就显示“火精品”的徽章;如果只勾选了“热门”,就显示“热门”徽章;如果都没有,就不显示任何徽章。
实现步骤:
-
按照第二部分的方法,创建一个名为
article_flags的多选checkbox字段,选项为“热门,精品,新品”。 -
在列表页模板(
list_article.htm)中,结合else if和checkbox的值进行判断。
{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() 函数拆分字符串后处理。 |
将两者结合,你就可以在织梦模板中实现非常灵活和复杂的显示逻辑,让你的网站内容更具表现力。
