好的,下面是一个详细的教程,教你如何通过Discuz!的计划任务功能自动生成网站地图(sitemap.xml和sitemap.txt),适用于Discuz! X3.5版本。
### 1. 创建 `cron_sitemap.php` 文件
首先,你需要创建一个名为 `cron_sitemap.php` 的文件,并将以下代码粘贴到文件中:
- <?php
- if(!defined('IN_DISCUZ')) {
- exit('Access Denied');
- }
- // 获取站点URL
- $site_url = $_G['siteurl'];
- // 获取所有版块
- $forums = C::t('forum_forum')->fetch_all_by_status(1);
- // 获取所有主题
- $threads = C::t('forum_thread')->fetch_all_by_displayorder(0, 0, 10000);
- // 生成sitemap.xml
- $xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
- $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
- foreach ($forums as $forum) {
- $xml .= ' <url>' . "\n";
- $xml .= ' <loc>' . $site_url . 'forum.php?mod=forumdisplay&fid=' . $forum['fid'] . '</loc>' . "\n";
- $xml .= ' <lastmod>' . date('Y-m-d') . '</lastmod>' . "\n";
- $xml .= ' <changefreq>daily</changefreq>' . "\n";
- $xml .= ' <priority>0.8</priority>' . "\n";
- $xml .= ' </url>' . "\n";
- }
- foreach ($threads as $thread) {
- $xml .= ' <url>' . "\n";
- $xml .= ' <loc>' . $site_url . 'forum.php?mod=viewthread&tid=' . $thread['tid'] . '</loc>' . "\n";
- $xml .= ' <lastmod>' . date('Y-m-d', $thread['dateline']) . '</lastmod>' . "\n";
- $xml .= ' <changefreq>weekly</changefreq>' . "\n";
- $xml .= ' <priority>0.6</priority>' . "\n";
- $xml .= ' </url>' . "\n";
- }
- $xml .= '</urlset>';
- // 生成sitemap.txt
- $txt = '';
- foreach ($forums as $forum) {
- $txt .= $site_url . 'forum.php?mod=forumdisplay&fid=' . $forum['fid'] . "\n";
- }
- foreach ($threads as $thread) {
- $txt .= $site_url . 'forum.php?mod=viewthread&tid=' . $thread['tid'] . "\n";
- }
- // 写入sitemap.xml文件
- file_put_contents(DISCUZ_ROOT . 'sitemap.xml', $xml);
- // 写入sitemap.txt文件
- file_put_contents(DISCUZ_ROOT . 'sitemap.txt', $txt);
- ?>
复制代码
### 2. 上传 `cron_sitemap.php` 文件
将 `cron_sitemap.php` 文件上传到 `source/include/cron` 目录下。
### 3. 添加计划任务
1. 登录Discuz!后台。
2. 进入 **工具** → **计划任务**。
3. 点击 **添加计划任务**。
4. 填写任务名称(例如:生成网站地图)。
5. 在 **任务脚本** 中填写 `cron_sitemap.php`。
6. 设置执行周期(例如:每天执行一次)。
7. 勾选 **可用** 选项。
8. 点击 **提交**。
### 4. 执行计划任务
计划任务添加完成后,系统会根据你设置的周期自动执行该任务。执行后,会在Discuz!的根目录下生成 `sitemap.xml` 和 `sitemap.txt` 两个文件。
### 5. 验证生成的文件
你可以在浏览器中访问 `http://你的网站/sitemap.xml` 和 `http://你的网站/sitemap.txt` 来验证文件是否生成成功。
### 注意事项
- 该脚本生成的 `sitemap.xml` 和 `sitemap.txt` 文件包含了所有版块和主题的链接。
- 如果你有更多的需求(例如:生成更多类型的链接),可以根据需要修改脚本。
- 确保你的服务器有写入权限,否则文件可能无法生成。
通过以上步骤,你就可以实现Discuz! X3.5自动生成网站地图的功能,而无需使用插件。如果你有任何问题或需要进一步的帮助,请随时联系我。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |