织梦body.php文件如何修改与使用?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

这个文件是织梦模板系统中的一个核心文件,它不直接生成最终的HTML页面,而是定义了模板中 {dede:body} 这个标签所输出的内容

  • index.html (或其他模板文件):是你网站首页的“骨架”,里面使用了 {dede:body} 标签来预留内容区域。
  • body.php:是填充这个 {dede:body} 区域的“血肉”,它决定了具体要调用哪些数据并如何显示。

body.php 文件的位置

body.php 文件位于你的织梦模板目录下,路径通常是: /templets/你的模板名称/body.php

如果你的模板文件夹是 default,那么路径就是 /templets/default/body.php


body.php 文件的作用与工作原理

body.php 的主要作用是根据当前页面的类型(如首页、列表页、文章页等),动态地加载并执行相应的模板文件,然后将生成的HTML代码返回给 {dede:body}

它的工作流程大致如下:

  1. 接收请求:当用户访问一个页面(如首页 index.php)时,织梦系统会加载并解析 index.html 模板。
  2. 遇到 {dede:body}:当解析器遇到 {dede:body} 标签时,它会调用 body.php 文件。
  3. 判断页面类型body.php 内部会通过 PHP 代码判断当前是什么类型的页面,它通常会检查 GLOBALS['cfg_phpurl'] 等全局变量或 GET 参数。
  4. 加载对应模板:根据页面类型,body.php 会决定去加载哪个具体的模板文件。
    • 如果是首页,它会加载 index.htm
    • 如果是文章列表页,它会加载 list_article.htm
    • 如果是文章内容页,它会加载 article_article.htm
  5. 执行并返回结果body.php 会加载并执行这个具体的模板文件(这通常通过 includerequire 实现),然后将这个模板文件最终生成的HTML内容,作为 {dede:body} 标签的输出值。
  6. 页面完成index.html 中的 {dede:body} 被替换为实际的HTML内容,一个完整的页面就生成了。

body.php 文件的典型代码结构

一个标准的 body.php 文件通常包含一个 switch 语句,用来处理不同页面类型,下面是一个最常见、最经典的 body.php 代码示例:

<?php
if(!defined('DEDEINC')) exit('Request Error!');
// 根据不同的页面类型,加载对应的模板文件
// $this 通常指代当前的对象实例,包含了页面相关的所有信息
switch($this->TypeID)
{
    // 首页
    case '0':
        // 如果是首页,加载 index.htm 模板
        $file = 'index.htm';
        break;
    // 普通栏目列表页
    default:
        // 如果是栏目列表页,加载 list_栏目ID.htm 模板
        // 栏目ID为 1 的列表页,会加载 list_1.htm
        $file = 'list_'.$this->TypeID.'.htm';
        break;
}
// 如果文件存在,则加载并输出
if( file_exists(DEDETEMPLATE.'/'.$this->templets.'/'.$file) )
{
    include(DEDETEMPLATE.'/'.$this->templets.'/'.$file);
}
// 如果文件不存在,则加载一个默认的列表模板
else
{
    include(DEDETEMPLATE.'/'.$this->templets.'/list_default.htm');
}
?>

代码详解:

  • if(!defined('DEDEINC')) exit('Request Error!');:这是标准的PHP安全检查,确保文件只能被织梦系统调用,防止直接访问。
  • switch($this->TypeID):核心判断逻辑。$this->TypeID 是一个关键变量,它代表了当前页面的栏目ID。
    • case '0'::在织梦系统中,栏目ID为 0 通常代表首页,所以当访问首页时,会执行这里的代码,加载 index.htm
    • default:TypeID 不是 0(即不是首页),那么就认为是某个栏目的列表页,它会拼接出 list_栏目ID.htm 这样的文件名,list_5.htm 代表ID为5的栏目列表页。
  • file_exists(...):在加载模板前,先检查文件是否存在,这是一个很好的编程习惯。
  • include(...):这才是真正的加载文件。include 会执行被包含文件中的PHP代码(织梦标签),并将输出内容合并到当前页面。
  • else:如果找不到对应的模板文件(比如你删除了 list_5.htm),系统会加载一个默认的 list_default.htm,避免页面报错。

如何自定义或修改 body.php

body.php 是一个非常灵活的文件,你可以通过修改它来实现很多自定义功能。

场景1:为不同栏目指定完全不同的模板

假设你有两个栏目:

  • 新闻栏目 (ID=1),你想用 list_news.htm 模板。
  • 产品栏目 (ID=2),你想用 list_product.htm 模板。
  • 其他栏目都用默认的 list_default.htm

你可以修改 body.php 如下:

<?php
if(!defined('DEDEINC')) exit('Request Error!');
switch($this->TypeID)
{
    // 首页
    case '0':
        $file = 'index.htm';
        break;
    // 新闻栏目 (ID=1)
    case '1':
        $file = 'list_news.htm'; // 指定新闻列表模板
        break;
    // 产品栏目 (ID=2)
    case '2':
        $file = 'list_product.htm'; // 指定产品列表模板
        break;
    // 其他所有栏目
    default:
        $file = 'list_default.htm'; // 使用一个更通用的默认模板
        break;
}
if( file_exists(DEDETEMPLATE.'/'.$this->templets.'/'.$file) )
{
    include(DEDETEMPLATE.'/'.$this->templets.'/'.$file);
}
else
{
    // 可以在这里输出一个错误提示,或者加载一个404模板
    echo "模板文件 {$file} 不存在!";
}
?>

场景2:增加自定义页面类型的支持

如果你使用了自定义模型,并且需要为这些模型创建专门的列表页模板,你也可以通过修改 body.php 来实现,假设你的自定义模型列表页模板命名规则是 custom_model_模型ID.htm

<?php
if(!defined('DEDEINC')) exit('Request Error!');
// 假设 $this->ChannelType 可以用来区分是普通栏目还是自定义模型
if($this->ChannelType == '自定义模型类型')
{
    // 加载自定义模型的列表模板
    $file = 'custom_model_'.$this->ChannelID.'.htm';
}
else
{
    // 原有的逻辑...
    switch($this->TypeID)
    {
        case '0':
            $file = 'index.htm';
            break;
        default:
            $file = 'list_'.$this->TypeID.'.htm';
            break;
    }
}
// ... 后面的文件检查和加载逻辑不变
if( file_exists(DEDETEMPLATE.'/'.$this->templets.'/'.$file) )
{
    include(DEDETEMPLATE.'/'.$this->templets.'/'.$file);
}
else
{
    include(DEDETEMPLATE.'/'.$this->templets.'/list_default.htm');
}
?>

特性 描述
文件位置 /templets/你的模板名称/body.php
核心功能 定义 {dede:body} 标签的输出内容,实现模板的动态加载。
工作原理 通过 switch 语句判断当前页面类型(首页、列表页等),include 对应的模板文件(如 index.htm, list_x.htm)。
核心变量 $this->TypeID (栏目ID),$this->templets (模板目录名)。
自定义价值 非常高,可以用来实现不同栏目使用不同模板、为自定义模型创建模板、甚至改变整个页面的渲染逻辑。
修改注意事项 修改前务必备份原文件,错误的修改会导致网站页面无法正常显示。

理解 body.php 是掌握织梦模板二次开发的关键一步,它连接了模板标签和具体的模板文件,是织梦模板引擎的“调度中心”。

-- 展开阅读全文 --
头像
dede网站头部底部无法调用,如何解决?
« 上一篇 01-02
图片织梦dedecms模版
下一篇 » 01-02

相关文章

取消
微信二维码
支付宝二维码