核心概念
PHPCMS V9 的模板引擎基于 Smarty,所以其 if 语法与 Smarty 基本一致。if 语句允许你在模板中根据不同的条件显示不同的内容,实现动态页面的效果。

基本语法结构
if 语句由 if、elseif/else if、else 和 /if 这几个标签组成。
{if condition}
// 条件为真时执行的代码
{elseif condition}
// 第一个条件为假,且此条件为真时执行的代码
{else}
// 所有条件都为假时执行的代码
{/if}
重要提示:
- 所有的标签都必须用花括号 包围。
- 开始标签
{if}和结束标签{/if}必须成对出现。 elseif和else if是等价的,可以混用,但推荐使用一种以保持代码风格统一。
条件判断的写法
condition 部分是 if 语句的核心,可以包含变量、运算符和函数。
a. 简单变量判断
这是最常见的用法,直接判断一个变量是否存在或其值是否为“真”。

-
判断变量是否存在且不为空:
{if $username} 欢迎您,{$username}! {else} 您尚未登录,请先登录。 {/if}如果
$username变量被赋值且不是空字符串 、0、null或false,条件就为真。 -
判断变量是否等于某个值:
{if $user['groupid'] == 1} 您是管理员,可以访问此区域。 {/if}使用 进行“值相等”比较,注意,PHP/Smarty 中 不会比较数据类型(
1 == '1'为真),而 会(1 === '1'为假)。
(图片来源网络,侵删)
b. 使用比较运算符
可以使用标准的比较运算符:
- : 等于
- 或
<>: 不等于 >: 大于<: 小于>=: 大于或等于<=: 小于或等于
示例:
{if $age >= 18}
您已成年,可以浏览全部内容。
{else}
您未成年,部分内容已被限制。
{/if}
c. 逻辑运算符
可以将多个条件组合起来使用:
and或&&: 逻辑与 (两者都为真时,结果为真)or或 : 逻辑或 (至少一个为真时,结果为真)- : 逻辑非 (取反)
示例:
{if $is_logged_in && $user['groupid'] > 2}
欢迎回来,{$user['username']}!您拥有高级权限。
{/if}
{if $is_vip || $user['money'] > 1000}
您可以享受VIP优惠!
{/if}
d. 使用 PHP 函数
你可以在 if 条件中直接调用 PHP 内置函数或自定义函数,这让判断非常灵活。
示例:
{if strpos($url, 'https') !== false}
当前链接是安全的 HTTPS 链接。
{/if}
{if count($article_list) > 0}
<ul>
{loop $article_list $article}
<li>{$article['title']}</li>
{/loop}
</ul>
{else}
抱歉,暂无文章。
{/if}
注意:在 if 中调用函数时,最好使用 !== false 而不是 == true,因为很多函数(如 strpos, strpos)在失败时返回 false,在特定位置找到时返回 0(整数),而 0 == false 是 true,这会导致逻辑错误。
在 PHPCMS V9 中的实际应用场景
在 PHPCMS V9 的模板开发中,if 语句通常与模型(model)传递过来的数据结合使用。
判断栏目是否有子栏目(用于导航)
在 header.html 或其他导航模板中,你可能希望有子栏目的才显示下拉菜单。
{loop $menus $menu}
<li>
<a href="{$menu['url']}">{$menu['name']}</a>
{if !empty($menu['child'])}
<ul class="sub-menu">
{loop $menu['child'] $child}
<li><a href="{$child['url']}">{$child['name']}</a></li>
{/loop}
</ul>
{/if}
</li>
{/loop}
这里 !empty($menu['child']) 是判断 $menu['child'] 数组是否为空。 是逻辑非,empty() 是判断是否为空的函数,组合起来就是“如果不为空”。
判断文章内容(例如图片集、视频)
详情页 show.html,你可能需要根据文章类型显示不同的内容。
{if $modelid == 5} {# 假设模型ID为5的是图片集 #}
<div class="slideshow">
{loop $pics $pic}
<img src="{$pic['filepath']}" alt="">
{/loop}
</div>
{elseif $modelid == 6} {# 假设模型ID为6的是视频 #}
<video src="{$video_url}" controls width="100%"></video>
{else} {# 普通文章 #}
<div class="content">
{$content}
</div>
{/if}
这里 $modelid 是由内容模型传递过来的变量,用于标识当前内容的类型。
判断会员权限或登录状态
在需要登录才能查看的页面,如 member/show.html:
{if !$userid}
<div class="login-tip">
您需要 <a href="{APP_PATH}index.php?m=member&c=index&a=login">登录</a> 后才能查看此内容。
</div>
{else}
<div class="member-content">
这里是只有登录会员才能看到的内容,{$private_info}
</div>
{/if}
$userid 是 PHPCMS 全局变量,如果用户未登录,$userid 通常为空。
常见错误与注意事项
- 标签未闭合:最常见的是忘记写
{/if}。 - 变量未定义:如果判断的变量在后台没有传递过来,会直接报错,可以使用
isset()函数来安全判断。{if isset($username) && $username == 'admin'} // 安全地判断 $username 是否存在且为 'admin' {/if} - 引号使用错误:在判断字符串相等时,值需要用单引号或双引号括起来。
- 正确:
{if $type == 'news'} - 错误:
{if $type == news}
- 正确:
- 中英文符号混用:确保所有标签使用的是英文半角花括号 ,而不是全角的 。
PHPCMS V9 模板中的 if 语句是实现页面逻辑控制的基础,熟练掌握它,你就可以根据不同的数据、权限和状态,在页面上灵活地展示不同的内容,构建出功能丰富的动态网站。
记住核心公式:{if 条件} ... {elseif 条件} ... {else} ... {/if},并结合变量、运算符和函数,就能应对绝大多数模板开发中的判断需求。
