织梦的PC端和WAP端是两个相对独立的站点,它们的数据是同步的,但页面文件是分开生成的,您在PC端发布或修改文章后,WAP端对应的页面不会像PC端那样自动重新生成。

下面我将为您详细解释原因,并提供多种解决方案,从最简单到最彻底。
问题根源:为什么不会自动生成?
-
独立的模板系统:织梦WAP端使用的是自己的一套模板(默认存于
/templets/wap/目录),而PC端使用的是另一套模板(存于/templets/目录),当你在PC端后台发布文章时,系统默认只调用PC端模板来生成HTML文件,它并不知道WAP端的存在。 -
分离的生成逻辑:织梦的后台内容模型(如文章、图集等)的“自动生成HTML”选项,默认是针对PC端路径的,系统没有内置一个机制,在生成PC端HTML后,再去调用WAP端的模板重新生成一遍对应的WAP页面。
-
历史原因:在织梦CMS流行的年代,移动互联网刚刚兴起,WAP站更多被视为PC站的一个附属、简化版,为了节省服务器资源和生成时间,采用“手动触发”或“按需生成”的方式是当时普遍的做法。
(图片来源网络,侵删)
解决方案(按推荐度排序)
您可以根据自己的技术水平、网站更新频率和服务器性能选择最适合您的方案。
手动后台生成(最直接,适合小网站)
这是最简单、最直接的解决方法,每次在PC端更新完内容后,手动去WAP管理后台生成一下页面。
操作步骤:
- 登录您的织梦后台。
- 在左侧菜单栏找到 “WAP” 或 “手机网站” 相关的菜单(不同版本名称可能略有差异,可能是“WAP管理”、“手机站点”等)。
- 进入后,您会看到类似 “一键更新WAP站点”、“更新栏目”、“更新文档” 的选项。
- 点击 “一键更新WAP站点”,系统会自动遍历所有栏目和文档,重新生成所有的WAP页面。
- 如果只想更新某个栏目,可以先进入该栏目,然后选择 “更新栏目” 或 “更新栏目文档HTML”。
优点:
- 完全免费,无需修改任何代码。
- 操作简单,对新手友好。
- 不会对服务器造成持续的压力。
缺点:
- 需要额外的人工操作,容易忘记。
- 如果网站更新频繁,手动操作会很繁琐。
修改内核,实现自动生成(最彻底,适合技术型站长)
这个方案通过修改织梦的核心文件,让系统在PC端生成HTML的同时,也自动触发WAP端HTML的生成,这是最一劳永逸的解决方案。
核心思路:
找到PC端生成HTML的核心函数(通常是 MakeHtml()),在其成功执行后,追加一段调用WAP端生成逻辑的代码。
操作步骤(以DedeCMS V5.7版本为例,其他版本类似):
-
定位核心文件: 打开织梦根目录下的文件:
/include/arc.archives.class.php(用于生成文章页) 和/include/arc.list.class.php(用于生成列表页),我们以最常用的文章页为例。 -
找到关键函数: 在
arc.archives.class.php文件中,找到CloseUp方法,这个方法在文章生成HTML的最后被调用,我们可以在其内部添加代码。 -
添加WAP生成代码: 在
CloseUp方法的末尾(在return $this->MakeHtml()这一行之后),添加如下代码:// 在 CloseUp 方法末尾添加以下代码 // 开始:自动生成WAP端文章页面 $this->MakeWapHtml(); // 结束:自动生成WAP端文章页面
-
创建
MakeWapHtml()方法: 同样在arc.archives.class.php文件中,找到类的末尾(在最后一个大括号 之前),添加一个新的方法MakeWapHtml():/** * 生成WAP端文章页面 * @access public * @return string */ function MakeWapHtml() { global $cfg_dirname; $filename = $this->GetWapFileName(); $tmpfile = $cfg_dirname . '/data/tmp/' . $this->Fields['id'] . '.wap.htm'; $this->ParseWapTempletsFirst(); // 这里调用WAP端的文章页模板 $this->dtp->LoadTemplate($GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'].'/wap/article_article.htm'); $this->dtp->Display(); $filestr = $this->dtp->GetResult(); $filestr = preg_replace("/\{dede:field\.name\/\}/", $this->Fields['typename'], $filestr); $filestr = str_replace("../", "../../", $filestr); $filestr = str_replace("./", "../", $filestr); // 创建目录 if(!is_dir(dirname($filename))) { $mypath = dirname($filename); $mypath = str_replace("\\", "/", $mypath); $arrrpath = explode('/', $mypath); $tmppath = ''; foreach($arrrpath as $key => $value) { if($value != '') { $tmppath .= $value.'/'; if(!is_dir($tmppath)) { @mkdir($tmppath, 0777); } } } } // 写入文件 $fp = @fopen($filename, 'w'); if(!$fp) { return 'Create File False:'.$filename; } @fwrite($fp, $filestr); @fclose($fp); return $filename; } /** * 获取WAP端文章页的文件名 * @access public * @return string */ function GetWapFileName() { global $cfg_arcdir; $typedir = $this->Fields['typedir']; $typedir = preg_replace('|\{cmspath\}|', $GLOBALS['cfg_cmspath'], $typedir); $typedir = str_replace('\\', '/', $typedir); $filename = $typedir . '/wap/' . $this->Fields['id'] . '.html'; return $filename; }注意:
- 这段代码假设您的WAP文章页模板是
/templets/wap/article_article.htm,请根据您的实际情况修改。 - 此代码仅为示例,可能需要根据您的织梦版本和具体需求进行微调,修改前务必备份原文件!
- 这段代码假设您的WAP文章页模板是
-
处理列表页: 如果您希望列表页也能自动生成,需要用同样的方法修改
/include/arc.list.class.php文件,原理相同,但调用的模板是WAP端的列表页模板(如list_default_wap.htm)。
优点:
- 一劳永逸,完全自动化。
- 用户体验好,PC和WAP内容实时同步。
缺点:
- 需要一定的PHP代码基础。
- 修改了核心文件,未来织梦升级时可能需要重新修改。
使用第三方插件或模块(折中方案)
织梦的官方或第三方市场上有一些可以解决此问题的插件或模块,这些插件通常封装了方案二的逻辑,通过后台设置即可开启自动生成功能。
如何寻找:
- 在织梦官方论坛(如 dedecms.com)的“插件”版块搜索关键词:“WAP自动生成”、“手机站同步”、“双端同步”。
- 在一些织梦资源站上查找相关模块。
优点:
- 无需修改代码,后台一键开启,方便快捷。
- 通常经过他人测试,相对稳定。
缺点:
- 可能需要付费购买。
- 插件的兼容性和后续支持无法完全保证。
最佳实践建议
- 对于个人博客或更新频率很低的网站:强烈推荐 方案一(手动生成),简单、可靠、零成本。
- 对于企业官网或内容需要频繁同步更新的网站:如果您有技术能力,方案二(修改内核) 是最佳选择,如果不想动代码,可以寻找可靠的 方案三(第三方插件)。
- 重要提醒:在进行任何代码修改(方案二)之前,务必备份您的网站文件和数据库! 以防操作失误导致网站无法访问。
希望以上详细的解释和方案能帮助您解决问题!
