这与其他很多PHP程序(如WordPress的 index.php)的原理类似,但织梦有其独特的处理流程,下面我为您详细解释一下 index.php 在织梦模板系统中的核心作用和工作原理。

织梦模板主页是index.php
(图片来源网络,侵删)

index.php 的核心作用:入口文件

index.php 是整个网站的前台入口文件,当用户访问您的网站域名(www.yourdomain.com)时,服务器就会默认请求并执行这个文件。

它的主要任务不是直接显示网页内容,而是作为一个总调度,根据请求参数来决定最终要调用哪个模板文件来生成并输出页面。

index.php 的工作流程详解

我们可以通过查看织梦默认的 index.php 文件代码来理解其流程:

<?php
// 防止直接访问此文件
define('DEDEINC', dirname(__FILE__).'/include');
require_once(DEDEINC.'/arc.partview.class.php');
// 获取请求的模板文件名,默认为index.htm
$templet = isset($_GET['templet']) ? trim($_GET['templet']) : 'index';
// 实例化一个视图类
$pv = new PartView();
// 设置当前模板的目录,通常是根目录下的 /templets/default/
$pv->SetTemplet($cfg_basedir.$cfg_templets_dir.'/'.$templet.'.htm');
// 显示页面
$pv->Display();
?>

从这个简化的代码中,我们可以看出以下几个关键步骤:

织梦模板主页是index.php
(图片来源网络,侵删)

引入核心文件 require_once(DEDEINC.'/arc.partview.class.php'); 这行代码引入了织梦的核心类文件 PartView.class.php,这个类负责所有的模板解析和页面生成工作。

获取模板标识 $templet = isset($_GET['templet']) ? trim($_GET['templet']) : 'index'; 这是最关键的一步,它会检查URL中是否有一个名为 templet 的参数。

  • 如果没有 templet 参数(比如直接访问 www.yourdomain.com/),$templet 变量的值就默认为 'index'
  • 如果有 templet 参数(比如访问 www.yourdomain.com/?templet=list_article),$templet 变量的值就变成了 'list_article'

实例化并设置模板

$pv = new PartView();
$pv->SetTemplet($cfg_basedir.$cfg_templets_dir.'/'.$templet.'.htm');

这里创建了一个 PartView 对象,并调用它的 SetTemplet 方法,将上一步获取的模板标识与模板路径(如 /templets/default/index.htm)拼接起来,告诉系统要使用哪个模板文件。

织梦模板主页是index.php
(图片来源网络,侵删)

输出页面 $pv->Display(); 这个方法会执行最终的模板解析工作,它会读取 .htm 模板文件,将里面的织梦标签(如 {dede:arclist})替换成从数据库中查询到的实际内容,最后将生成的HTML代码输出到浏览器。

如何通过 index.php 访问不同页面?

正是因为 index.php 的这个设计,织梦的前台所有页面(首页、列表页、内容页等)都可以通过 index.php 这个统一的入口来访问,实现了URL的伪静态或美观化。

  • 访问首页

    • URL: www.yourdomain.com/
    • 内部实际调用: index.php?templet=index
    • 加载模板: /templets/default/index.htm
  • 访问文章列表页

    • URL: www.yourdomain.com/list-1-1.html (伪静态)
    • 内部实际调用: index.php?tid=1&templist=list
    • 加载模板: /templets/default/list_article.htm (根据栏目ID和模板设置)
  • 访问文章内容页

    • URL: www.yourdomain.com/a/1/1.html (伪静态)
    • 内部实际调用: index.php?aid=1
    • 加载模板: /templets/default/article_article.htm (根据文章ID和模板设置)

这些URL重写规则通常存储在服务器的 .htaccess 文件中(Apache环境)或 web.config 文件中(IIS环境),它们会将用户友好的URL重写为 index.php 加上相应参数的形式。

实际应用中的修改

如果您想修改默认的首页模板,通常有以下几种方法:

  1. 后台设置(推荐)

    • 登录织梦后台。
    • 进入【系统】-> 【系统基本参数】 -> 【核心设置】
    • 找到“主页链接模板”选项,默认值是 index.htm,您可以在这里修改为您想要的主页模板文件名,home.htm
    • 修改后,系统在调用首页时就会去加载 /templets/default/home.htm 这个文件。
  2. 直接修改 index.php(不推荐,除非有特殊需求)

    • 您可以编辑根目录下的 index.php 文件。
    • $templet = ... 那一行硬编码为您想要的模板, $templet = 'home';
    • 这样,无论有没有 templet 参数,首页都会强制加载 home.htm

index.php 是织梦CMS前台的总开关,它本身不包含页面内容,而是通过分析URL参数来决定调用哪个模板文件(如 index.htm, list.htm 等),然后由核心类来解析模板并生成最终的网页,这种设计使得织梦的URL管理和模板系统非常灵活和强大。