核心概念

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

phpcms v9 模板 if
(图片来源网络,侵删)

基本语法结构

if 语句由 ifelseif/else ifelse/if 这几个标签组成。

{if condition}
    // 条件为真时执行的代码
{elseif condition}
    // 第一个条件为假,且此条件为真时执行的代码
{else}
    // 所有条件都为假时执行的代码
{/if}

重要提示:

  • 所有的标签都必须用花括号 包围。
  • 开始标签 {if} 和结束标签 {/if} 必须成对出现。
  • elseifelse if 是等价的,可以混用,但推荐使用一种以保持代码风格统一。

条件判断的写法

condition 部分是 if 语句的核心,可以包含变量、运算符和函数。

a. 简单变量判断

这是最常见的用法,直接判断一个变量是否存在或其值是否为“真”。

phpcms v9 模板 if
(图片来源网络,侵删)
  • 判断变量是否存在且不为空:

    {if $username}
        欢迎您,{$username}!
    {else}
        您尚未登录,请先登录。
    {/if}

    如果 $username 变量被赋值且不是空字符串 、0nullfalse,条件就为真。

  • 判断变量是否等于某个值:

    {if $user['groupid'] == 1}
        您是管理员,可以访问此区域。
    {/if}

    使用 进行“值相等”比较,注意,PHP/Smarty 中 不会比较数据类型(1 == '1' 为真),而 会(1 === '1' 为假)。

    phpcms v9 模板 if
    (图片来源网络,侵删)

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 == falsetrue,这会导致逻辑错误。


在 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 通常为空。


常见错误与注意事项

  1. 标签未闭合:最常见的是忘记写 {/if}
  2. 变量未定义:如果判断的变量在后台没有传递过来,会直接报错,可以使用 isset() 函数来安全判断。
    {if isset($username) && $username == 'admin'}
        // 安全地判断 $username 是否存在且为 'admin'
    {/if}
  3. 引号使用错误:在判断字符串相等时,值需要用单引号或双引号括起来。
    • 正确: {if $type == 'news'}
    • 错误: {if $type == news}
  4. 中英文符号混用:确保所有标签使用的是英文半角花括号 ,而不是全角的 。

PHPCMS V9 模板中的 if 语句是实现页面逻辑控制的基础,熟练掌握它,你就可以根据不同的数据、权限和状态,在页面上灵活地展示不同的内容,构建出功能丰富的动态网站。

记住核心公式:{if 条件} ... {elseif 条件} ... {else} ... {/if},并结合变量、运算符和函数,就能应对绝大多数模板开发中的判断需求。