织梦CMS 本身是一个基于 PHP + MySQL 的经典建站系统,其默认模板是 XHTML 1.0,要让它支持 HTML5,主要需要进行模板文件和核心文件的修改。
整个过程可以分为以下几个步骤:
- 修改全局模板文件 (
head.htm) - 修改核心文件 (
include/arc.archives.class.php等) - 修改其他常用模板文件
- 配置网站基本信息
- 验证与测试
第一步:修改全局模板文件 (head.htm)
这是最重要的一步,因为 head.htm 被网站的所有页面(首页、列表页、内容页等)调用,定义了页面的基本结构和元信息。
-
找到文件:登录织梦后台,进入
模板->默认模板管理,找到并编辑head.htm文件。 -
修改
<!DOCTYPE>声明:- 旧版 (XHTML):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
- 新版 (HTML5):
<!DOCTYPE html> <html lang="{dede:global.cfg_lang/}"> - 说明:
<!DOCTYPE html>是 HTML5 最简洁的声明。<html xmlns="...">属性在 HTML5 中已不再需要,可以删除。- 添加
lang属性有助于 SEO 和屏幕阅读器,{dede:global.cfg_lang/}会调用后台设置的语言。
- 旧版 (XHTML):
-
修改字符编码
<meta>:- 旧版 (XHTML):
<meta http-equiv="Content-Type" content="text/html; charset={dede:global.cfg_soft_lang/}" /> - 新版 (HTML5):
<meta charset="{dede:global.cfg_soft_lang/}"> - 说明:HTML5 推荐使用更简洁的
<meta charset="UTF-8">语法。
- 旧版 (XHTML):
-
修改视口
<meta>标签(响应式设计基础):- 如果你的网站需要适配手机,建议添加此标签,可以在
<meta charset>后面加上:<meta name="viewport" content="width=device-width, initial-scale=1.0">
- 如果你的网站需要适配手机,建议添加此标签,可以在
-
修改 CSS 和 JS 引入方式:
- 旧版 (XHTML):
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style.css" type="text/css" media="screen" /> <script language="javascript" type="text/javascript" src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script> - 新版 (HTML5):
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style.css"> <script src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script> - 说明:
type="text/css"和type="text/javascript"在 HTML5 中是默认的,可以省略。language="javascript"属性已废弃,直接使用src即可。
- 旧版 (XHTML):
修改后的 head.htm 示例:
<!DOCTYPE html>
<html lang="zh-cn">
<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/}" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style.css">
<script src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script>
<!-- 其他JS或CSS -->
</head>
<body>
第二步:修改核心文件(解决标签兼容性问题)
织梦的很多标签在输出时会自动加上 XHTML 风格的属性或闭合标签,这会导致 HTML5 验证失败,我们需要修改核心 PHP 文件来阻止这种行为。
核心修改文件:include/arc.archives.class.php
这个文件主要用于处理文章内容页的标签,我们需要找到并修改 GetMakeHtml() 函数中的 ReplaceLabel() 调用。
-
找到文件:通过 FTP 或文件管理器,进入
/include/目录,找到arc.archives.class.php。 -
定位代码:搜索
ReplaceLabel关键字,找到类似下面这行代码(可能在第 400-500 行之间,具体版本可能不同):$this->Fields['templet'] = str_replace("{cmspath}", $GLOBALS['cfg_cmspath'], $this->Fields['templet']); $this->dtp->LoadTemplate($this->Fields['templet']); $this->dtp->Display(); // 在这附近找到下面这行 $this->ParseDMFields($this->dtp, $this->Fields); -
添加或修改代码:在
ParseDMFields调用之前或之后,添加以下代码来重置标签解析器,防止其自动添加 XHTML 风格的标签,一个更彻底的方法是修改lib_main.php中的ReplaceLabel函数,但直接修改arc.archives.class.php是更常见的做法。更简单直接的方法是,在
ParseDMFields之后,强制执行一次 HTML5 规则的替换,可以在arc.archives.class.php文件的最后(?>标签之前)添加一个自定义函数,然后在GetMakeHtml方法中调用它。方法 A (推荐 - 修改
ParseDMFields调用后的代码):在
ParseDMFields($this->dtp, $this->Fields);这行代码之后,添加以下代码块:// 在 $this->ParseDMFields($this->dtp, $this->Fields); 之后添加 // 开始:强制HTML5输出 $html_output = $this->dtp->GetResult(); // 移除自动添加的 <br /> 标签,替换为 <br> $html_output = preg_replace('/(<br\s+\/?>\s*)+$/i', '<br>', $html_output); // 移除 img 标签中的 style 属性(如果不需要) // $html_output = preg_replace('/(<img[^>]+)style="[^"]*"/i', '$1', $html_output); // 移除 a 标签中的 target="_blank"(如果不需要) // $html_output = preg_replace('/<a\s+([^>]*?)target="_blank"/i', '<a $1', $html_output); // 将织梦的 {dede:field name='body'/} 等标签的输出结果进行修正 $this->Fields['body'] = $html_output; // 结束:强制HTML5输出方法 B (更彻底 - 修改
lib_main.php): 这个方法更复杂,但效果更彻底,你需要修改include/lib_main.php文件中的ReplaceLabel函数,移除或修改其中生成 XHTML 标签的代码,这需要你对 PHP 有更深入的了解。
核心修改文件:include/channelunit.class.php
这个文件用于处理列表页和首页的标签,修改方法类似。
-
找到文件:
/include/channelunit.class.php。 -
定位代码:找到
GetList()函数,其中同样有ParseDMFields的调用。 -
应用修改:参考
arc.archives.class.php的修改方法,在ParseDMFields调用之后,添加类似的 HTML5 兼容性处理代码。
第三步:修改其他常用模板文件
除了 head.htm,你可能还需要修改其他模板文件,以符合 HTML5 语义化标签的要求。
-
index.htm(首页模板):- 使用
<header>,<nav>,<main>,<article>,<section>,<aside>,<footer>等标签来构建页面结构。 - 将原来的
<div id="header">改为<header class="clearfix">。
- 使用
-
article_article.htm(文章内容页模板):- 用
<h1>。 - 文章信息(作者、时间、点击量)可以用
<header>或<div class="post-meta">。 - 文章正文用
<article>。 - 相关文章可以用
<aside>。
- 用
-
list_category.htm(栏目列表页模板):- 用
<section>或<article>包裹每一条列表信息。 - 用
<h1>或<h2>。
- 用
示例:简单的文章列表项改造
旧版 (无语义化):
<div class="list-item">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<div class="info">[field:pubdate function="MyDate('Y-m-d',@me)"/] 作者:[field:writer/]</div>
<p>[field:description function="cn_substr(@me,120)"/]...</p>
</div>
新版 (HTML5 语义化):
<article class="list-item">
<header>
<h2><a href="[field:arcurl/]" rel="bookmark">[field:title/]</a></h2>
<div class="post-meta">
<time datetime="[field:pubdate function='strftime("%Y-%m-%dT%H:%M:%S+08:00", @me)']">[field:pubdate function="MyDate('Y-m-d',@me)"]</time>
<span>作者:[field:writer/]</span>
</div>
</header>
<section class="excerpt">
<p>[field:description function="cn_substr(@me,120)"/]...</p>
</section>
</article>
第四步:配置网站基本信息
在后台的 系统 -> 系统基本参数 中,确保以下设置正确:
- 网站根网址:确保以
http://或https://开头,并且没有末尾的斜杠(除非有特殊需求)。 - CMS安装目录:如果网站安装在子目录,务必填写正确,这会影响所有链接的生成。
- 网站编码:确保设置为
UTF-8,这是现代 Web 开发的标准。
第五步:验证与测试
完成以上修改后,你需要进行验证和测试。
-
清空缓存:在后台
系统->一键更新网站->更新缓存,清空所有模板缓存和数据缓存。 -
使用 HTML5 验证工具:
- 访问 W3C Markup Validation Service。
- 输入你的网站首页、文章页、列表页的 URL。
- 查看验证结果,根据提示的错误信息,返回相应的模板文件或核心文件进行微调,最常见的错误会是:
Element xxx not allowed as child of element yyy in this context.(标签嵌套错误)Attribute xxx not allowed on element yyy at this point.(标签属性不允许)Stray end tag xxx.(多余的闭合标签)
-
浏览器测试:
在不同浏览器(Chrome, Firefox, Edge, Safari)中打开网站,检查页面显示是否正常,功能(如评论、点赞)是否可用。
总结与注意事项
- 风险提示:修改核心文件(如
arc.archives.class.php)有一定风险,在进行修改前,务必备份原文件,以便出错时可以恢复。 - 模板系统:织梦的模板引擎是固定的,我们无法让它 100% 像 Vue 或 React 那样原生支持 HTML5,我们的目标是让最终输出的 HTML 代码符合 HTML5 规范。
- 循序渐进:建议先从修改
head.htm和模板文件开始,这是最安全且效果最明显的,如果对 PHP 不熟悉,可以先不修改核心文件,很多 HTML5 验证错误可以通过优化模板结构来解决。 - CSS 兼容性:修改为 HTML5 后,你可能需要调整一些 CSS 选择器,
div#header可以改为header,div.list-item可以改为article.list-item。
通过以上步骤,你就可以将织梦CMS网站成功地改造为符合 HTML5 规范的网站,从而提升网站的标准化程度、SEO友好性和未来的可维护性。
