织梦m站首页如何实现自动更新?

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

织梦的M站默认是PC站的一个子站点,其首页内容通常由PC站首页的内容通过特定规则自动生成,要实现M站首页的自动更新,核心思路是让触发PC站首页更新的机制,同时也能触发M站首页的重新生成

织梦m站首页自动更新
(图片来源网络,侵删)

下面我将从原理分析多种实现方法,再到推荐方案,为您提供一个完整、可操作的指南。


原理分析

  1. M站首页如何生成?

    • 织梦M站默认会调用PC站首页的模板,通常位于 /templets/default/index_m.htm
    • 当你访问M站首页时,如果发现 /m/index.html 这个静态文件不存在或已过期,织梦就会调用 index_m.htm 模板,并读取PC站首页的相关数据(如推荐文章、热点文章、幻灯片等),然后生成 /m/index.html 这个静态文件。
    • M站首页的“内容源”是PC站的数据,而“生成模板”是 index_m.htm
  2. 如何触发更新?

    • 手动更新:登录织梦后台 -> 核心 -> 频道管理 -> 选择“主页” -> 点击“更新主页”,这会强制重新生成PC站的首页 /index.html
    • 自动更新:我们需要让系统在特定操作(如发布新文章、更新文章)后,自动执行上述“手动更新”的流程。

实现方法

主要有以下几种方法,从简单到复杂,推荐度递增。

织梦m站首页自动更新
(图片来源网络,侵删)

手动更新(最基础,不推荐作为最终方案)

这是最直接的方法,但完全依赖人工。

  • 操作:每次更新完PC站内容后,都去后台手动更新一次PC站主页,然后访问M站首页(/m/),系统会自动检测并生成M站首页。
  • 缺点:容易遗忘,效率低下,无法实现真正的“自动”。

利用织梦的“计划任务”功能(推荐,最稳定)

织梦自带一个强大的计划任务功能,可以定时执行PHP脚本,我们可以利用它来定时更新主页。

操作步骤:

  1. 创建更新主页的PHP脚本

    • 在你的网站根目录(DedeCMS/)下,创建一个新文件,命名为 auto_update_homepage.php
    • 将以下代码复制到该文件中:
    <?php
    /**
     * 织梦M站/PC站首页自动更新脚本
     * 使用方法:通过织梦后台的计划任务来调用此脚本
     */
    // 引入织梦核心文件
    require_once (dirname(__FILE__) . "/include/common.inc.php");
    require_once DEDEINC."/arc.partview.class.php";
    // 1. 更新PC站首页
    $pv = new PartView();
    $pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/index.htm");
    $pv->SaveToHtml($cfg_basedir . "/index.html");
    echo "PC站首页更新成功!\n";
    // 2. 更新M站首页
    // 注意:如果你的M站模板路径不是 default,请修改下面这行代码
    $pv_m = new PartView();
    $pv_m->SetTemplet($cfg_basedir . $cfg_templets_dir . "/default/index_m.htm");
    $pv_m->SaveToHtml($cfg_basedir . "/m/index.html");
    echo "M站首页更新成功!\n";
    ?>
    • 代码解释
      • require_once ...:引入织梦的核心文件,使脚本拥有织梦的环境。
      • new PartView():创建一个页面视图对象,用于生成静态HTML。
      • SetTemplet(...):指定要使用的模板文件,PC站是 index.htm,M站是 index_m.htm请确保这里的路径与你的实际情况一致。
      • SaveToHtml(...):将模板内容生成并保存到指定的静态文件路径,PC站是 /index.html,M站是 /m/index.html
  2. 上传脚本文件

    • 使用FTP或文件管理器,将你创建好的 auto_update_homepage.php 文件上传到网站根目录。
  3. 设置织梦计划任务

    • 登录织梦后台。
    • 进入【系统】 -> 【计划任务】。
    • 点击左上角的【新增任务】。
    • 任务名称:填写一个易于识别的名称,每日自动更新首页”。
    • 执行程序:填写你刚刚上传的脚本路径,即 /auto_update_homepage.php
    • 执行级别:选择“系统级别”。
    • 循环执行:选择执行周期,对于首页更新,通常选择“按天”比较合适,你可以设置在网站访问量最低的时段执行,比如凌晨3点。
    • 最大执行时间:可以留空或设置一个较大的值,1000
    • 保存
  4. 启用任务

    保存后,任务会出现在任务列表中,点击任务右侧的【启动】按钮,使其开始生效。

优点

  • 稳定可靠:基于织梦自身功能,与系统耦合度高。
  • 定时精准:可以精确控制更新时间。
  • 无需服务器额外权限:只需要基本的PHP文件读写权限。

缺点

  • 更新有延迟:只有在设定的时间点才会更新,你上午10点发布文章,要等到凌晨3点首页才会更新,这对于追求实时性的网站可能不够。

利用“发布文章/编辑文章”的钩子(实时性最强,但稍复杂)

这个方法的目标是:每当有文章被发布、编辑或删除时,就立即触发首页更新。 这需要修改织梦的核心文件,请务必在修改前备份

操作步骤:

  1. 找到核心钩子文件

    • 文件路径:/dede/article_edit.php (用于编辑文章) 和 /dede/article_add.php (用于添加文章),织梦V5.7版本后,很多操作都统一在 /dede/content_list.php 中处理,但最直接和保险的还是修改 article_add.phparticle_edit.php
  2. article_add.php 中添加代码

    • 找到文件末尾的 ShowMsg("成功发布一篇新的文章!", $gourl); 这行代码。
    • 在这行代码之前,插入我们之前创建的更新首页的PHP代码片段。
    // 在 article_add.php 中,在 ShowMsg 之前添加
    // 引入更新首页的函数
    require_once (dirname(__FILE__) . "/../include/common.inc.php");
    require_once DEDEINC."/arc.partview.class.php";
    function updateHomepages() {
        $pv_pc = new PartView();
        $pv_pc->SetTemplet($cfg_basedir . $cfg_templets_dir . "/index.htm");
        $pv_pc->SaveToHtml($cfg_basedir . "/index.html");
        $pv_m = new PartView();
        $pv_m->SetTemplet($cfg_basedir . $cfg_templets_dir . "/default/index_m.htm");
        $pv_m->SaveToHtml($cfg_basedir . "/m/index.html");
    }
    // 执行更新
    updateHomepages();
  3. article_edit.php 中添加代码

    • 同样,找到文件末尾的 ShowMsg("成功更改文档!", $gourl); 这行代码。
    • 在它之前,添加与上面完全相同的代码片段。
  4. (可选)在删除文章时也触发

    • 文件路径:/dede/del_all.php (用于批量删除) 或 /dede/archives_do.php (用于单个删除)。
    • 在执行删除操作并成功后,也加入上述的更新代码。

优点

  • 实时性最高一有变动,首页马上更新,用户体验最好。
  • 无需额外脚本:逻辑内嵌在核心流程中。

缺点

  • 修改核心文件:升级织梦时,这些修改可能会被覆盖,需要重新修改。
  • 有一定风险:错误的修改可能导致网站后台功能异常。
  • 可能造成性能开销:如果服务器性能不高,频繁生成首页可能会对服务器造成轻微压力。

推荐方案与总结

方案 优点 缺点 适用场景
手动更新 简单、无风险 效率低、易遗忘、非自动 个人博客、更新频率极低的网站
计划任务 稳定、可靠、定时精准、无风险 更新有延迟 绝大多数网站的首选方案,特别是企业站、资讯站等
文章钩子 实时性最高、用户体验好 修改核心文件、有升级风险、性能开销 实时性要求极高的网站(如新闻门户、抢购活动页)

综合建议:

对于99%的用户,我强烈推荐使用 利用织梦的“计划任务”功能

  • 为什么? 它在“稳定性”和“自动化”之间取得了完美的平衡,你只需要设置一次,就能一劳永逸,即使网站升级,只要你的 auto_update_homepage.php 文件没被覆盖,计划任务配置依然存在,风险极低,将更新时间设定在凌晨,既能保证内容的相对及时性,又不会影响网站白天的访问速度。

如果您的网站是新闻类或对信息时效性有极致要求,可以考虑 方法三,但请务必做好文件备份,并评估服务器的承受能力,你也可以将方法二和方法三结合使用,比如用方法三处理重要文章的实时更新,用方法二作为兜底,确保所有内容最终都能被更新到首页。

-- 展开阅读全文 --
头像
dede织梦是做什么的?
« 上一篇 02-26
C语言如何高效实现trace日志记录?
下一篇 » 02-26

相关文章

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

目录[+]