织梦根目录的网站首页如何调用子目录的网站里的文章

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
郑钧琪

网站  2026-08-11 23:48:01   355

织梦根目录的网站首页如何调用子目录的网站里的文章

织梦CMS一个站点对应一个数据库,根目录和子目录分别安装独立织梦时,根目录首页想显示子目录里的文章,本质就是跨库读取数据。织梦自带的SQL标签可以直接办到,不需要装插件,但得懂一点数据库表结构。

假设根目录网站数据库名是db_www,子目录网站数据库名是db_sub,子目录路径为/sub。先通过数据库管理工具确认子目录网站的数据表前缀,通常默认是dede_。在根目录首页模板中,放在需要显示文章的位置,写这样一个标签:

{dede:sql sql="SELECT id,title,arcurl,pubdate FROM db_sub.dede_archives WHERE arcrank=0 ORDER BY pubdate DESC LIMIT 10"}

arcrank等于0表示已审核的文章,LIMIT 10控制条数。这里有个关键点,db_sub.dede_archives这种写法要求根目录数据库账号对子目录库有读权限,权宜之计是给这个账号专门的查询权限,不要用超级管理员。查询结果出来后,使用织梦的循环输出:

[field:title/]

文章链接是个大坑。子目录站的arcurl字段默认存的是相对路径,比如 /a/2025/0101.html,这个路径在子目录下访问没问题,但搬到根目录首页就错位了,会指向根目录下的/a目录。所以需要手动拼接子目录名。把sql改成:

SELECT id,title,CONCAT(''/sub/'',arcurl) AS arcurl,pubdate FROM db_sub.dede_archives WHERE arcrank=0 ORDER BY pubdate DESC LIMIT 10

如果子目录站的文章本来就是绝对URL,arcurl带有http://,那就不用拼。还有一种情况,子目录站开启了伪静态,存的是 /sub/plus/view.php?aid=123,也要按实际输出调整拼接规则。最好先去子目录站前台复制一个文章链接,对照着改。

SQL标签适合快速上线,但根目录首页每次刷新都会查询一次子库。访问量大的话建议开启织梦自带的SQL标签缓存,在标签属性里加cacheid和cachetime,比如cachetime=''600''表示缓存10分钟。这样用户访问时读的是缓存文件,不至于拖慢两个站。

另一个办法是在模板里用PHP直接查询子网站。织梦模板支持嵌入PHP代码,前提是后台系统设置里允许模板中使用PHP。在首页模板顶部写一段代码,用mysqli连接db_sub库,查询最近文章,然后赋值给一个数组。但模板里堆太多PHP代码,后期维护很痛苦,而且很多开发者不熟悉织梦模板的语法,容易出错。更好的做法是把这段查询逻辑封装成一个自定义函数,放到根目录的include/helper.php中。模板里只调用这个函数,返回结果再循环输出。函数写法很直白,参数传入子库名、表前缀、文章数量,内部用mysqli或PDO完成查询,处理一下链接路径,返回二维数组。这样根目录首页和子目录站的耦合只体现在一个函数上,将来换域名或换路径,改一处即可。

如果不想碰数据库,还能走数据文件接口的路线。在子目录网站根目录写一个auto.php,通过织梦的底层类库取出最新文章,输出成JSON格式。然后在根目录首页用jquery的getJSON方法调用,地址写 /sub/auto.php。因为两个站在同一个域名下,只是路径不同,不涉及跨域,浏览器可以直接读取。为了让性能更好,可以设置auto.php生成一个静态的lastest.json文件,子目录网站每次发布文章后自动重新生成,或者利用系统计划任务定时刷新。根目录首页只读取这个文件,完全零数据库压力。但这么做要多写一份文件管理逻辑,子目录站升级或换版本时可能失效。

三个方案里,SQL标签最轻量,适合不会写代码的站长。PHP函数方案最灵活,适合有开发能力且需要复杂定制的人。JSON接口方案适合对性能要求高、子目录文章更新频率低的场景。无论选哪个,都要注意数据库账号权限和链接路径验证。曾有站长跨库查询发现文章标题出来了但图片是死的,原因是子目录站上传的图片路径存的是 /uploads/...,根目录下并没有对应目录。如果在SQL结果里包含缩略图字段,需要同样拼接子目录路径,或者用织梦的字段处理函数改写。

最终测试办法简单:在根目录首页保存模板后,强制刷新浏览器,看列表内容和链接是否正确。如果显示空白,检查错误日志,多半是数据库名的点号没写对或者账号权限不够。确保子目录的数据库用户和根目录用户不是同一个时,交叉查询会失败,这时需要创建一个专用账号并赋予两个库的select权限。总之,跨站调用数据,安全不能忽略,密码不要写在模板明文里,用织梦的配置文件常量读取更稳妥。