核心原理

帝国CMS默认情况下,为了安全,会禁止在模板文件(.html)中直接执行PHP代码,开启PHP支持的本质是修改系统配置,告诉模板引擎在解析HTML文件时,遇到特定的PHP代码标签就交给PHP引擎去执行。

帝国cms模板如何开启支持php
(图片来源网络,侵删)

第一步:开启模板PHP支持(后台设置)

这是最关键的一步,需要在帝国CMS的后台进行设置。

  1. 登录帝国CMS后台:使用您的管理员账号登录。

  2. 进入系统设置

    • 在后台左侧菜单中,找到并点击 “系统” 选项。
    • 在展开的子菜单中,选择 “系统参数设置”
  3. 修改模板参数

    帝国cms模板如何开启支持php
    (图片来源网络,侵删)
    • 在“系统参数设置”页面,点击顶部的 “模板设置” 标签页。
    • 在该页面中,找到 “支持程序代码” 这个选项。
    • 将其值修改为 “是”
    • 非常重要:在修改后,务必点击页面底部的 “提交” 按钮来保存设置。
  4. 更新缓存

    • 保存设置后,为了确保新设置生效,建议更新一下系统缓存。
    • 在后台首页,通常会有一个 “更新缓存” 的按钮,点击它即可,或者前往 “系统” -> “更新缓存” 手动更新。

完成这一步后,帝国CMS就已经允许在模板中使用PHP代码了。


第二步:在模板文件中编写PHP代码

后台设置开启后,您就可以在模板的 .html 文件中使用PHP了,有几种常见的写法:

使用 <?php ... ?> 标签(最直接)

这是最标准的PHP写法,开启支持后即可使用。

帝国cms模板如何开启支持php
(图片来源网络,侵删)

示例:在模板首页显示当前时间

打开您首页的模板文件(通常是 e/data/tpllist/ 目录下的一个 .html 文件),在您想显示时间的地方加入以下代码:

<div class="current-time">
    <p>当前服务器时间:<?php echo date('Y-m-d H:i:s'); ?></p>
</div>

使用帝国CMS的 <?php ?> 短标签(推荐)

帝国CMS内置了一些方便的短标签,它们更简洁,且与系统结合更紧密。

示例:使用 <?=$变量?> 输出变量

假设您有一个变量 $navinfor信息),您想在内容页模板中显示标题。

<h1 class="title"><?=$navinfor[title]?></h1>

这行代码等同于 <?php echo $navinfor['title']; ?>,非常方便。

示例:使用 <?php $abc='帝国CMS';?> 定义变量并使用

<?php 
    $site_name = '我的帝国CMS网站';
    $welcome_text = '欢迎来到' . $site_name . '!';
?>
<div class="welcome-box">
    <h2><?=$welcome_text?></h2>
</div>

使用 <!--empirenews.list--><!--empirenews.list--> 循环标签中的PHP

当您需要在列表循环中执行复杂逻辑时,可以在列表模板的循环体内使用PHP。

示例:在列表中给奇数条数据添加一个特殊的CSS类

假设您的列表模板文件是 list.var

<!--empirenews.list--><!--empirenews.list-->
<?
    // 使用全局变量 $bqr 来获取当前循环的信息
    // 使用 $no 变量来获取当前是第几条(从0开始)
    $class = ($no % 2 == 0) ? 'list-item-even' : 'list-item-odd';
?>
<li class="<?=$class?>">
    <a href="[!--titleurl--]">[!--title--]</a>
</li>
<!--empirenews.list--><!--empirenews.list-->

第三步:常用变量和函数(实战技巧)

在模板中使用PHP,最常用的是调用帝国CMS的变量和函数,以下是一些最核心的变量:

变量名 说明 适用场景
$navinfor 信息数组、ID、分类、内容等所有字段。 内容页模板 (show.php 对应的模板)
$classid 当前栏目ID (数字)。 内容页、列表页、封面页
$classname 当前栏目名称 内容页、列表页、封面页
$class_r[$classid] 当前栏目的信息数组,包含栏目ID、栏目名、上级栏目、链接等。 内容页、列表页、封面页
$public_r 系统公共配置数组,包含网站名称、网址、版权信息等。 所有页面
$bqr 在列表循环中,代表当前条目的信息数组 列表模板 (list.var)
$bqno 在列表循环中,代表当前是第几条记录 (从0开始)。 列表模板 (list.var)

示例:在内容页显示“上一篇”和“下一篇”链接(使用PHP) 页模板 (show.php 对应的模板) 中:

<div class="prev-next">
    <?php
    // 获取上一篇
    $prev = PrevNext('0', $navinfor[classid], $navinfor[id]);
    if($prev){
        echo '<a href="'.$prev['titleurl'].'">上一篇:'.$prev['title'].'</a>';
    }
    // 获取下一篇
    $next = PrevNext('1', $navinfor[classid], $navinfor[id]);
    if($next){
        echo '<a href="'.$next['titleurl'].'">下一篇:'.$next['title'].'</a>';
    }
    ?>
</div>

⚠️ 极其重要的安全警告

开启模板PHP支持会大大增加网站被黑客攻击的风险!

  1. SQL注入风险:如果直接使用用户提交的数据(如GET、POST参数)来拼接SQL查询,极易被注入。

    • 危险代码$id = $_GET['id']; $query = "SELECT * FROM phome_ecms_news WHERE id=$id";
    • 安全做法:务必使用帝国CMS自带的 eReturnSelectsafe_query 等安全函数,或者对变量进行严格的过滤和转义。
  2. 代码执行风险:如果允许用户在前台提交包含PHP代码的内容,用户就可以直接在您的服务器上执行任意代码,这是毁灭性的。绝对不要在用户可以编辑的内容(如评论、留言、投稿)区域开启PHP。

  3. 文件包含风险:不当的 includerequire 使用可能导致包含恶意文件。

安全建议:

  • 最小权限原则:只在绝对必要的页面开启此功能,不要全局滥用。
  • 避免用户输入:尽量不要在模板PHP中直接处理来自用户表单或URL的变量。
  • 使用帝国CMS函数:优先使用帝国CMS内置的函数来查询数据库和显示内容,这些函数已经做了一定的安全处理。
  • 定期备份:保持网站和数据库的定期备份,以防万一。
  • 代码审查:在上线前,仔细检查所有在模板中编写的PHP代码,确保没有安全漏洞。

  1. 开启:后台 -> 系统参数设置 -> 模板设置 -> “支持程序代码” -> 改为“是” -> 提交并更新缓存。
  2. 使用:在模板 .html 文件中,使用 <?php ... ?><?=$variable?> 等标签编写PHP代码。
  3. 调用:熟练使用 $navinfor, $class_r, $bqr 等核心变量来获取数据。
  4. 安全时刻牢记安全风险,谨慎操作,避免滥用。

希望这份详细的指南能帮助您安全地在帝国CMS模板中使用PHP功能!