织梦wap为何不自动生成?

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

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

织梦wap不会自动生成
(图片来源网络,侵删)

下面我将为您详细解释原因,并提供多种解决方案,从最简单到最彻底。


问题根源:为什么不会自动生成?

  1. 独立的模板系统:织梦WAP端使用的是自己的一套模板(默认存于 /templets/wap/ 目录),而PC端使用的是另一套模板(存于 /templets/ 目录),当你在PC端后台发布文章时,系统默认只调用PC端模板来生成HTML文件,它并不知道WAP端的存在。

  2. 分离的生成逻辑:织梦的后台内容模型(如文章、图集等)的“自动生成HTML”选项,默认是针对PC端路径的,系统没有内置一个机制,在生成PC端HTML后,再去调用WAP端的模板重新生成一遍对应的WAP页面。

  3. 历史原因:在织梦CMS流行的年代,移动互联网刚刚兴起,WAP站更多被视为PC站的一个附属、简化版,为了节省服务器资源和生成时间,采用“手动触发”或“按需生成”的方式是当时普遍的做法。

    织梦wap不会自动生成
    (图片来源网络,侵删)

解决方案(按推荐度排序)

您可以根据自己的技术水平、网站更新频率和服务器性能选择最适合您的方案。

手动后台生成(最直接,适合小网站)

这是最简单、最直接的解决方法,每次在PC端更新完内容后,手动去WAP管理后台生成一下页面。

操作步骤:

  1. 登录您的织梦后台。
  2. 在左侧菜单栏找到 “WAP”“手机网站” 相关的菜单(不同版本名称可能略有差异,可能是“WAP管理”、“手机站点”等)。
  3. 进入后,您会看到类似 “一键更新WAP站点”“更新栏目”“更新文档” 的选项。
  4. 点击 “一键更新WAP站点”,系统会自动遍历所有栏目和文档,重新生成所有的WAP页面。
  5. 如果只想更新某个栏目,可以先进入该栏目,然后选择 “更新栏目”“更新栏目文档HTML”

优点:

  • 完全免费,无需修改任何代码。
  • 操作简单,对新手友好。
  • 不会对服务器造成持续的压力。

缺点:

  • 需要额外的人工操作,容易忘记。
  • 如果网站更新频繁,手动操作会很繁琐。

修改内核,实现自动生成(最彻底,适合技术型站长)

这个方案通过修改织梦的核心文件,让系统在PC端生成HTML的同时,也自动触发WAP端HTML的生成,这是最一劳永逸的解决方案。

核心思路: 找到PC端生成HTML的核心函数(通常是 MakeHtml()),在其成功执行后,追加一段调用WAP端生成逻辑的代码。

操作步骤(以DedeCMS V5.7版本为例,其他版本类似):

  1. 定位核心文件: 打开织梦根目录下的文件:/include/arc.archives.class.php (用于生成文章页) 和 /include/arc.list.class.php (用于生成列表页),我们以最常用的文章页为例。

  2. 找到关键函数: 在 arc.archives.class.php 文件中,找到 CloseUp 方法,这个方法在文章生成HTML的最后被调用,我们可以在其内部添加代码。

  3. 添加WAP生成代码: 在 CloseUp 方法的末尾(在 return $this->MakeHtml() 这一行之后),添加如下代码:

    // 在 CloseUp 方法末尾添加以下代码
    // 开始:自动生成WAP端文章页面
    $this->MakeWapHtml();
    // 结束:自动生成WAP端文章页面
  4. 创建 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,请根据您的实际情况修改。
    • 此代码仅为示例,可能需要根据您的织梦版本和具体需求进行微调,修改前务必备份原文件!
  5. 处理列表页: 如果您希望列表页也能自动生成,需要用同样的方法修改 /include/arc.list.class.php 文件,原理相同,但调用的模板是WAP端的列表页模板(如 list_default_wap.htm)。

优点:

  • 一劳永逸,完全自动化。
  • 用户体验好,PC和WAP内容实时同步。

缺点:

  • 需要一定的PHP代码基础。
  • 修改了核心文件,未来织梦升级时可能需要重新修改。

使用第三方插件或模块(折中方案)

织梦的官方或第三方市场上有一些可以解决此问题的插件或模块,这些插件通常封装了方案二的逻辑,通过后台设置即可开启自动生成功能。

如何寻找:

  • 在织梦官方论坛(如 dedecms.com)的“插件”版块搜索关键词:“WAP自动生成”“手机站同步”“双端同步”
  • 在一些织梦资源站上查找相关模块。

优点:

  • 无需修改代码,后台一键开启,方便快捷。
  • 通常经过他人测试,相对稳定。

缺点:

  • 可能需要付费购买。
  • 插件的兼容性和后续支持无法完全保证。

最佳实践建议

  1. 对于个人博客或更新频率很低的网站:强烈推荐 方案一(手动生成),简单、可靠、零成本。
  2. 对于企业官网或内容需要频繁同步更新的网站:如果您有技术能力,方案二(修改内核) 是最佳选择,如果不想动代码,可以寻找可靠的 方案三(第三方插件)
  3. 重要提醒:在进行任何代码修改(方案二)之前,务必备份您的网站文件和数据库! 以防操作失误导致网站无法访问。

希望以上详细的解释和方案能帮助您解决问题!

-- 展开阅读全文 --
头像
织梦如何自动获取tag标签?
« 上一篇 今天
如何修改Dede标题字数限制?
下一篇 » 今天

相关文章

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

目录[+]