织梦cms生成首页html的php文件

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

一个后台控制文件和一个模板文件

织梦cms生成首页html的php文件
(图片来源网络,侵删)

核心文件概览

  1. 后台控制文件: /dede/index_makehtml.php

    • 作用: 这是用户在后台点击“生成首页”按钮时,实际被调用的PHP脚本,它负责处理用户的请求,并调用核心的生成函数。
    • 位置: 位于织梦后台目录 dede/ 下。
  2. 模板文件: /templets/default/index.htm

    • 作用: 这是首页的“蓝图”或“设计稿”,PHP引擎会读取这个文件,并将其中的特定标签(如 {dede:arclist})替换成从数据库中查询出的实际内容,最终生成HTML。
    • 位置: 位于网站根目录的 templets/ 目录下,default 是默认的模板文件夹名。
  3. 核心生成函数: MakeOneHtml()

    • 作用: 这是执行生成任务的核心函数,它定义在 include/arc.partview.class.php 文件中。index_makehtml.php 会实例化这个类并调用这个方法来生成首页。

后台控制文件:/dede/index_makehtml.php

当你登录织梦后台,进入“生成” -> “主页HTML生成”页面,并点击“生成主页HTML”按钮时,浏览器会向 index_makehtml.php 发送一个请求(通常是POST请求)。

织梦cms生成首页html的php文件
(图片来源网络,侵删)

这个文件的主要逻辑如下:

<?php
require_once(dirname(__FILE__)."/config.php");
require_once(DEDEINC."/arc.partview.class.php");
// 检查用户权限
CheckPurview('a_Check,a_MakeHtml');
// 获取模板目录
$templet = empty($templet) ? '' : trim($templet);
// 如果没有指定模板,则使用默认的首页模板
if ($templet == '') {
    $templet = $cfg_basedir.$cfg_templets_dir."/default/index.htm";
}
// 实例化核心生成类
$pv = new PartView();
// 设置模板文件
$pv->SetTemplet($templet);
// 生成HTML并保存
$pv->SaveToHtml($cfg_basedir.$cfg_indexname);
// 显示成功信息
ShowMsg("成功生成首页文件!", "index_makehtml.php");
exit();
?>

代码解读:

  1. require_once "config.php": 加载网站的核心配置文件,获取数据库连接信息、网站路径等。
  2. require_once "arc.partview.class.php": 加载首页生成的核心类文件 PartView
  3. CheckPurview(...): 检查当前登录用户是否有生成HTML的权限。
  4. $templet = ...: 确定要使用的首页模板文件路径,如果后台没有指定,就默认使用 templets/default/index.htm
  5. $pv = new PartView();: 最关键的一步,创建一个 PartView 类的实例对象 $pv
  6. $pv->SetTemplet($templet);: 调用 $pv 对象的方法,告诉它要使用哪个模板文件。
  7. $pv->SaveToHtml($cfg_basedir.$cfg_indexname);: 执行生成操作,这个方法会:
    • 读取 SetTemplet 指定的模板文件内容。
    • 解析模板中的所有织梦标签。
    • 从数据库获取标签对应的数据。
    • 将数据填充到模板中,生成最终的HTML代码。
    • 将生成的HTML代码写入到 $cfg_indexname 指定的文件中(通常是 /index.html)。
  8. ShowMsg(...): 生成成功后,在后台显示一个提示信息,并跳转回生成页面。

模板文件:/templets/default/index.htm

这个文件是纯HTML和织梦标签的混合体,织梦引擎在生成时会解析其中的标签。

一个典型的 index.htm 结构示例:

织梦cms生成首页html的php文件
(图片来源网络,侵删)
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:global.cfg_webname/}</title>
    <meta name="keywords" content="{dede:global.cfg_keywords/}" />
    <meta name="description" content="{dede:global.cfg_description/}" />
</head>
<body>
    <header>
        <!-- 网站Logo -->
        <h1><a href="{dede:global.cfg_basehost/}">{dede:global.cfg_webname/}</a></h1>
    </header>
    <nav>
        <!-- 调用顶级栏目列表 -->
        {dede:channel type='top' row='8'}
        <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
    </nav>
    <main>
        <section class="focus">
            <!-- 调用首页焦点图 -->
            {dede:arclist row='5' typeid='2' channelid='1'}
            <a href="[field:arcurl/]"><img src="[field:picname/]" alt="[field:title/]"></a>
            {/dede:arclist}
        </section>
        <section class="news-list">
            <h2>最新资讯</h2>
            <!-- 调用文章列表,显示10条 -->
            {dede:arclist row='10' titlelen='30'}
            <li>
                <span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
                <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            </li>
            {/dede:arclist}
        </section>
    </main>
    <footer>
        <p>Powered by <a href="https://www.dedecms.com/">DedeCMS</a></p>
    </footer>
</body>
</html>

常见标签说明:

  • {dede:global.cfg_webname/}: 网站名称,从后台配置中读取。
  • {dede:channel type='top'}: 调用栏目。type='top' 表示只调用顶级栏目。
  • {dede:arclist ...}: 最常用的标签,用于调用文章列表。
    • row='10': 显示10条记录。
    • typeid='2': 只调用ID为2的栏目下的文章。
    • titlelen='30': 标题长度限制为30个字符。
    • [field:arcurl/]: 文章链接。
    • [field:title/]: 文章标题。
    • [field:pubdate/]: 发布日期,常配合 function 进行格式化。

核心生成类:/include/arc.partview.class.php

这个文件是整个生成过程的“发动机”。PartView 类负责将模板和数据库结合起来。

MakeOneHtml() (或 SaveToHtml()) 方法的大致流程:

  1. 读取模板: 使用 file_get_contents() 函数将模板文件(如 index.htm)的全部内容读入一个字符串变量中。
  2. 解析标签: 遍历这个字符串,使用正则表达式查找所有 {dede:xxx} 格式的标签。
  3. 执行标签: 对于找到的每一个标签,会调用对应的处理函数(如 lib_arclist.class.php 处理 arclist 标签),这些处理函数会连接数据库,执行SQL查询,获取数据。
  4. : 将获取到的数据格式化后,替换掉模板中的原始标签。{dede:arclist row='3'} 会被替换成3条文章列表的HTML代码。
  5. 处理全局变量: 替换 {dede:global} 等全局标签。
  6. 写入文件: 将最终生成的、不含任何织梦标签的纯HTML字符串,通过 file_put_contents() 函数写入到指定的静态HTML文件(如 /index.html)中。

总结与常见问题

生成首页HTML的完整链路是: 用户操作 (后台点击) -> /dede/index_makehtml.php -> 实例化 PartView -> 加载 /templets/default/index.htm 模板 -> PartView 解析模板标签并从数据库获取数据 -> 生成最终HTML -> 写入 /index.html

常见问题排查:

  1. 生成失败或空白页:

    • 权限问题: 确保Web服务器(如Apache/Nginx)对 index.html 文件所在的目录(通常是网站根目录)有写入权限。
    • 模板路径错误: 检查 index_makehtml.php$templet 变量指向的模板文件是否存在。
    • PHP错误: 检查PHP错误日志,可能是模板中有语法错误或PHP代码执行出错。
  2. 生成的HTML内容不正确或过时:

    • 标签错误: 检查模板中的织梦标签(如 {dede:arclist})的参数是否正确。
    • 缓存问题: 织梦有缓存机制,尝试在后台清空所有缓存后重新生成。
    • 数据问题: 确保数据库中有对应的数据。typeid 指定的栏目下是否有文章。
  3. 如何自定义首页模板?

    • templets 目录下新建一个文件夹(如 mytemplate)。
    • default/index.htm 复制到 mytemplate 目录下,并进行修改。
    • 在后台“生成” -> “主页HTML生成”页面,选择你新建的模板,然后点击生成。

理解这三个核心文件及其交互关系,就能掌握织梦CMS首页静态化的精髓,并能从容地解决大部分生成相关的问题。

-- 展开阅读全文 --
头像
dede pagelist option参数如何设置?
« 上一篇 2025-12-02
织梦网站如何去掉index.html?
下一篇 » 2025-12-02

相关文章

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

目录[+]