index.php 本身是一个非常精简的PHP文件,它主要负责初始化环境、加载核心配置、并调用模板引擎来生成并输出首页,它不包含首页的HTML内容,那些内容都在模板文件里。

(图片来源网络,侵删)
下面我将分两部分来解释:
index.php文件本身的详细注释- 由
index.php加载并最终生成的首页结构分析
第一部分:index.php 文件详细注释
以下是一个典型的织梦 index.php 文件,并附带了逐行/逐块的中文注释,帮助你理解每一部分的作用。
<?php
/**管理系统DedeCMS官方网站
* @version $Id: index.php v5.7.0 2025-05-23 $
* @copyright Copyright (c) 2007 - 2025, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
// ------------------------------------------------------------------------
/**
* **第一步:安全检查和路径定义**
* 这部分是所有PHP应用的标准入口,用于确保文件被正确调用并定义关键路径。
*/
// 如果不是通过index.php文件直接访问,则中止脚本
// 这是一个安全措施,防止其他文件被直接执行。
if(!file_exists(dirname(__FILE__).'/../common.inc.php'))
{
exit('Fatal error: config file not exist!');
}
// 如果URL中存在 'GLOBALS' 变量,则中止脚本
// 这是一个经典的安全防护,用于防止GLOBALS变量覆盖攻击。
if( isset($_REQUEST['GLOBALS']) )
{
exit('Access Denied');
}
/**
* **第二步:加载核心配置文件**
* common.inc.php 是织梦的核心配置文件,它包含了:
* - 数据库连接信息
* - 系统路径和URL配置
* - 安全过滤和初始化函数
* - 错误处理机制
* 加载了这个文件,整个系统才算“活”了起来。
*/
require_once (dirname(__FILE__).'/../common.inc.php');
/**
* **第三步:实例化并调用模板引擎**
* 织梦使用自己的一套模板引擎(基于PHP语法的模板引擎)。
* 这里会创建一个DedeTemplate类的实例,并让它来处理首页模板。
*/
// 创建模板引擎对象
$dtp = new DedeTemplate();
// 加载首页模板文件
// 默认情况下,首页模板文件位于 /templets/default/index.htm
// 这个路径可以在后台“系统”->“系统基本参数”->“站点设置”中修改。
$dtp->LoadTemplate($cfg_basedir.$cfg_templets_dir.'/default/index.htm');
/**
* **第四步:准备模板变量并赋值**
* 这是织梦最核心的功能之一,它会从数据库中获取各种数据,
* 然后把这些数据整理成模板可以识别的变量,并“填充”到模板引擎中。
* {dede:arclist} 标签需要的数据就在这里被准备好。
*/
// 创建一个用于存放所有模板变量的数组
$pv = new PartView();
// 这是最关键的一步,它会解析模板中所有的标签(如 {dede:arclist}, {dede:channel} 等)
// 并从数据库中获取数据,然后将数据填充到 $dtp 对象中。
// 执行后,$dtp 对象就包含了所有渲染好的HTML代码片段。
$pv->SetTemplet($dtp->GetResult());
/**
* **第五步:处理页面缓存**
* 为了提高访问速度,织梦会生成静态HTML缓存文件。
* 如果开启了首页缓存,并且缓存文件存在且未过期,系统会直接输出缓存文件,而无需重新查询数据库。
*/
// 获取页面缓存的对象
$pv->SaveToHtml($cfg_basedir.$cfg_indexurl);
// 输出最终的HTML内容到浏览器
$pv->Display();
?>
第二部分:由 index.php 生成的首页结构分析
index.php 的最终目的是生成一个静态的HTML文件(/index.html),并把它发送给用户的浏览器,我们看到的“织梦首页”其实是由以下几个部分组合而成的:
模板文件 (/templets/default/index.htm)
这是首页的“骨架”,它是一个HTML文件,里面夹杂着织梦的专属标签,开发者通过修改这个文件来控制首页的布局和样式。

(图片来源网络,侵删)
示例片段:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:global.cfg_webname/}</title>
<meta name="description" content="{dede:global.cfg_description/}">
<meta name="keywords" content="{dede:global.cfg_keywords/}">
</head>
<body>
<!-- 头部区域 -->
{dede:include filename="head.htm"/}
<!-- 幻灯片/焦点图区域,通常由 {dede:arclist} 调用特定栏目实现 -->
<div class="focus">
{dede:arclist row='5' titlelen='24' orderby='pubdate' idlist=''}
<!-- 循环输出文章 -->
<li><a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a></li>
{/dede:arclist}
</div>
<!-- 主内容区,通常分为左右两栏 -->
<div class="main">
<!-- 左侧:文章列表 -->
<div class="fl">
{dede:channel type='top' row='8'}
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
{/dede:channel}
{dede:arclist titlelen='30' row='10'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</div>
<!-- 右侧:热门文章、友情链接等 -->
<div class="fr">
{dede:hotartitle row='10'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:hotartitle}
{dede:flink type='text' row='24'/}
</div>
</div>
<!-- 底部区域 -->
{dede:include filename="footer.htm"/}
</body>
</html>
全局变量 ({dede:global})
这些变量通常在后台的“系统基本参数”中设置,比如网站标题、公司名称、版权信息等,它们在整个网站中共享。
{dede:global.cfg_webname/}-> 网站标题{dede:global.cfg_powerby/}-> 织梦版权信息{dede:global.cfg_beian/}-> 备案号
栏目标签 ({dede:channel})
用于获取网站栏目的信息,通常用于生成主导航、侧边栏的分类列表等。
type='top': 只获取顶级栏目。row='8': 显示8个栏目。
文章列表标签 ({dede:arclist})
这是最常用的标签,用于调用文章列表,可以指定调用哪个栏目的文章、调用多少篇、按什么排序(如按发布时间、点击量等)。

(图片来源网络,侵删)
typeid='1': 指定栏目ID。row='10': 显示10篇文章,len='30'`: 标题长度限制为30个字符。
标签 ({dede:field})
通常在文章详情页模板(article_article.htm)中使用,用于显示单篇文章的详细信息。
{dede:field.title/}: 文章标题{dede:field.body/}: 文章正文内容{dede:field.pubdate function="MyDate('Y-m-d',@me)"/}: 发布日期(并格式化)
包含文件 ({dede:include})
用于将其他模板文件(如 head.htm, footer.htm, ad.htm 等)嵌入到当前模板中,这非常有利于网站的模块化管理,比如网站的头部和 footer 在所有页面都是一样的,只需要修改这两个文件即可。
index.php(PHP文件):是后台处理脚本,它不负责显示,只负责读取配置、查询数据库、处理逻辑、并调用模板引擎来“拼装”最终的HTML页面。index.htm(模板文件):是前台显示模板,它是一个HTML文件,里面用织梦标签定义了页面的结构和布局,但本身没有实际数据。- 最终效果:当用户访问网站首页时,
index.php被执行,它读取index.htm模板,替换掉所有标签(如{dede:arclist})为从数据库查询到的真实数据,生成一个完整的、纯静态的index.html文件,并返回给用户的浏览器,如果开启了缓存,下次访问时就会直接读取index.html,速度更快。
