这是一个在织梦(DedeCMS)用户中非常常见的问题,我们需要明确一点:在织梦模板中,直接使用 <?php ... ?> 这样的原生 PHP 标签是默认被禁用的,这是出于安全和性能的考虑。

当你说“PHP标签不能用”时,通常指的是以下两种情况之一:
- 你想用原生 PHP 标签(
<?php ... ?>),但发现它被忽略了或报错。 - 你想实现某个功能,但不知道该用织梦提供的什么标签来替代。
下面我将针对这两种情况,为你提供详细的解决方案和排查思路。
如何正确使用原生 PHP 代码(不推荐,但有时必要)
虽然不推荐,但在某些极端情况下,你可能确实需要在模板里写一小段原生 PHP 代码,织梦官方提供了一个配置开关来控制是否允许。
检查并开启 PHP 代码执行权限
你需要修改 dede 目录下的 config.php 文件。

操作步骤:
-
打开你的网站根目录,找到并进入
dede文件夹。 -
在
dede文件夹中,找到config.php文件并用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开它。 -
在文件中找到这一行代码:
(图片来源网络,侵删)$cfg_phpurl = $cfg_cmspath.'/php';
-
在这行代码的后面,添加或修改以下配置:
// 允许在模板文件中使用PHP代码 $cfg_enable_phpcode = 'Y';
'Y'表示允许。'N'表示禁止(默认值)。
-
保存
config.php文件,然后重新生成你的网站页面(在后台的“生成” -> “一键更新网站”中选择“更新所有”),这样修改才能生效。
⚠️ 重要警告:
- 安全风险: 开启此功能会大大降低网站的安全性,如果模板文件被上传了恶意代码,这段代码就可能会被执行,请确保你的网站服务器环境是安全的,并且你完全信任你正在编辑的模板文件。
- 性能影响: 模板引擎需要额外解析 PHP 代码,可能会对页面生成速度有轻微影响。
- 替代方案: 99% 的情况下,都有更安全、更规范的织梦标签可以实现你的需求,请优先考虑使用情况二中的方法。
使用织梦官方提供的标签(推荐做法)
织梦为了方便用户和保证安全,提供了非常丰富的内置标签,你需要学会使用它们来替代原生 PHP 代码,下面我将列举一些最常用和最核心的标签,并说明它们如何替代原生 PHP 的常见功能。
变量输出标签 {dede:field}
这是最基础的标签,用于输出文章、栏目等内容的某个字段。
-
替代
echo $title;- 原生 PHP:
echo $this->Fields['title']; - 织梦标签:
{dede:field.title/}或{dede:field name='title'/} - 示例: 在文章页模板
article_article.htm中,输出文章标题。<h1>{dede:field.title/}</h1>
- 原生 PHP:
-
替代
echo $description;- 原生 PHP:
echo $this->Fields['description']; - 织梦标签:
{dede:field.description/} - 示例: 输出文章摘要。
<meta name="description" content="{dede:field.description function='html2text(@me)'/}">function='html2text(@me)'是一个函数,用于移除 HTML 标签,只保留纯文本。
- 原生 PHP:
列表/循环标签 {dede:list} 和 {dede:arclist}
这是织梦的精髓,用于循环输出数据列表。
-
替代
foreach ($articles as $article) { ... }- 原生 PHP:
foreach ($articles as $article) { echo '<li>'; echo $article['title']; echo '</li>'; } - 织梦标签 (文章列表页
list_article.htm):{dede:list pagesize='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:list}{dede:list}: 定义一个文章列表循环。pagesize='10': 每页显示 10 条。[field:arcurl/]: 循环中当前文章的链接(注意:在列表标签中,常用[]代替 )。[field:title/]: 当前文章的标题。function="MyDate(...)": 对日期字段进行格式化。
- 原生 PHP:
-
{dede:arclist}(自由列表标签): 这个标签可以在任何地方调用文章,非常灵活,常用于首页、栏目页调用推荐文章、热门文章等。{dede:arclist flag='c' titlelen='30' row='5'} <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> {/dede:arclist}flag='c': 调用推荐文章 (c=推荐, h=头条, j=跳转, p=图片)。titlelen='30': 标题长度截取为 30 个字符。row='5': 调用 5 条数据。
条件判断标签 {dede:if}
用于实现 if...else... 的逻辑。
- 替代
if ($condition) { ... } else { ... }- 原生 PHP:
if ($this->Fields['arcrank'] == -1) { echo '这是一条待审核的文章'; } else { echo '这是一条已发布的文章'; } - 织梦标签:
{dede:if condition="$field.arcrank eq -1"} <p>这是一条待审核的文章</p> {else} <p>这是一条已发布的文章</p> {/dede:if}condition: 条件语句。eq: 等于 (==),其他常用符号:neq(!=),gt(>),lt(<),gte(>=),lte(<=)。$field.arcrank: 访问当前字段的arcrank值。
- 原生 PHP:
PHP 代码执行标签 {dede:php}
这是唯一一个可以在模板中执行原生 PHP 代码的官方标签,但同样有安全风险,请谨慎使用!
- 用途: 当织梦内置标签无法满足复杂逻辑时(如调用外部 API、进行复杂计算等)。
- 示例: 在模板中输出当前时间。
{dede:php} echo date('Y-m-d H:i:s'); {/dede:php} - 示例: 循环输出一个数组。
{dede:php} $myArray = array('苹果', '香蕉', '橙子'); foreach ($myArray as $value) { echo '<li>' . $value . '</li>'; } {/dede:php}
常见问题排查步骤
如果你的织梦标签不工作,请按以下步骤检查:
-
检查标签拼写和语法:
- 是否打错了标签名,
{dede:flist}写成了{dede:lsit}。 - 标签的属性是否用单引号或双引号括起来了,
name='title'而不是name=title。 - 循环标签是否成对出现,
{dede:list}和{/dede:list}。
- 是否打错了标签名,
-
检查文件编码:
- 确保你的模板文件(如
index.htm,list_article.htm)是 UTF-8 编码(无 BOM 头),使用 Notepad++ 或 VS Code 可以轻松查看和转换编码,错误的编码是导致标签无法解析的最常见原因之一。
- 确保你的模板文件(如
-
检查模板缓存:
- 织梦为了加速,会生成模板缓存,修改模板后,必须重新生成页面才能看到效果。
- 操作路径: 登录织梦后台 -> “生成” -> “一键更新网站” -> 选择“更新所有HTML”或“更新栏目HTML”等。
-
检查字段是否存在:
- 确保你调用的字段在数据库中是存在的,你自定义了一个字段
myprice,就需要确保在后台“内容模型管理”中添加了这个字段,并且标签写的是{dede:field.myprice/}。
- 确保你调用的字段在数据库中是存在的,你自定义了一个字段
-
检查标签作用域:
- 某些标签只能在特定页面使用。
{dede:field.title/}只能在文章详情页 (article_article.htm) 使用。{dede:global/}标签可以在大部分页面使用,用于输出全局变量。
- 某些标签只能在特定页面使用。
| 你的需求 | 推荐的织梦标签 | 不推荐(但有办法) |
|---|---|---|
| 输出文章标题 | {dede:field.title/} |
<?php echo $this->Fields['title']; ?> (需开启PHP代码) |
| 循环输出文章列表 | {dede:list} 或 {dede:arclist} |
<?php foreach(...) { ... } ?> (需开启PHP代码) |
| 判断文章状态 | {dede:if condition="$field.arcrank eq -1"} |
<?php if(...) { ... } ?> (需开启PHP代码) |
| 复杂逻辑/外部调用 | (尽量用标签) | {dede:php} ... {/dede:php} (有风险) |
核心思想: 告别原生 PHP 的思维,学会使用织梦提供的标签化工具,这不仅能解决“不能用”的问题,还能让你的网站更安全、更易于维护,如果实在无法实现,再考虑 {dede:php} 或修改配置文件。
