源码论坛公告:本站是一个交流学习建站资源的社区论坛,旨在交流学习源码脚本等资源技术,欢迎大家投稿发言! 【点击此处将锦尚放在桌面

源码论坛,商业源码下载,尽在锦尚中国商业源码论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 1228|回复: 0

[pbootcms教程] 给PbootCms增加sitemap.html网站地图页面

[复制链接]

3096

主题

3497

帖子

13万

金币

超级版主

Rank: 8Rank: 8

积分
269266
发表于 2023-7-19 21:21:06 | 显示全部楼层 |阅读模式
前言

PbootCms默认的sitemap是xml格式,对网站前端来说显示不够友好。毕竟这玩意是给搜索引擎看的。

我们来给网站增加一个sitemap.html页面。

方法有很多,你可以通过后台新建一个专题页,命名为sitemap来实现。

这个方法有些缺点,就是在标签循环过程中要手动去除该页面。

作为一个强迫症患者,这个不能忍。

今天我们就来动手给PbootCMS增加一个sitemap.html功能页面。

话不多说,上教程,以PbootCms v3.1.2示例,其他版本略微差异:

操作步骤

1、打开路由管理页面,路径:apps/common/route.php

大约在40行,注释内容是关于网站地图的前端路由,我们替换成以下内容:
  1. // 前台及接口路径统一小写URL
  2.         // =======前台路由============
  3.         'home/sitemap.html' => 'home/Sitemap/index', // 站点地图1
  4.         'home/sitemap.xml' => 'home/Sitemap/xml', // 站点地图XML格式
  5.         'home/sitemap.txt' => 'home/Sitemap/linkTxt', // 站点地图TXT格式
  6.         //'home/sitemap' => 'home/Sitemap/xml', // 站点地图默认XML
复制代码

2、打开sitemap管理控制器,路径:apps/home/controller/SitemapController.php

替换为:
  1. <?php
  2. /**
  3. * @copyright (C)2016-2099 Hnaoyun Inc.
  4. * @author XingMeng
  5. * @email hnxsh@foxmail.com
  6. * @date 2018年7月15日
  7. *  生成sitemap文件
  8. */
  9. namespace app\home\controller;

  10. use core\basic\Controller;
  11. use app\home\model\SitemapModel;
  12. use core\basic\Url;

  13. class SitemapController extends Controller
  14. {
  15.     protected $parser;
  16.     protected $htmldir;
  17.     protected $model;

  18.     public function __construct()
  19.     {
  20.         $this->model = new SitemapModel();
  21.         $this->parser = new ParserController();
  22.         $this->htmldir = $this->config('tpl_html_dir') ? $this->config('tpl_html_dir') . '/' : '';
  23.     }

  24.     public function index(){
  25.         $tpl='sitemap.html';
  26.         $content = parent::parser($this->htmldir . $tpl); // 框架标签解析
  27.         $content = $this->parser->parserBefore($content); // CMS公共标签前置解析
  28.         $content = str_replace('{pboot:pagetitle}','网站地图-{pboot:sitetitle}-{pboot:sitesubtitle}', $content);
  29.         $content = $this->parser->parserPositionLabel($content, 0, '网站地图', Url::home('sitemap')); // CMS当前位置标签解析
  30.         $content = $this->parser->parserSpecialPageSortLabel($content, - 1, '网站地图', Url::home('sitemap')); // 解析分类标签
  31.         $content = $this->parser->parserSearchLabel($content); // 搜索结果标签
  32.         $content = $this->parser->parserAfter($content); // CMS公共标签后置解析
  33.         echo $content; // 搜索页面不缓存
  34.         exit();
  35.     }

  36.     public function xml()
  37.     {
  38.         header("Content-type:text/xml;charset=utf-8");
  39.         $str = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
  40.         $str .= '<urlset>' . "\n";
  41.         $str .= $this->makeNode('', date('Y-m-d'), '1.00', 'always'); // 根目录
  42.         
  43.         $sorts = $this->model->getSorts();
  44.         $Parser = new ParserController();
  45.         foreach ($sorts as $value) {
  46.             if ($value->outlink) {
  47.                 continue;
  48.             } elseif ($value->type == 1) {
  49.                 $link = $Parser->parserLink(1, $value->urlname, 'about', $value->scode, $value->filename);
  50.                 $str .= $this->makeNode($link, date('Y-m-d'), '0.80', 'daily');
  51.             } else {
  52.                 $link = $Parser->parserLink(2, $value->urlname, 'list', $value->scode, $value->filename);
  53.                 $str .= $this->makeNode($link, date('Y-m-d'), '0.80', 'daily');
  54.                 $contents = $this->model->getSortContent($value->scode);
  55.                 foreach ($contents as $value2) {
  56.                     if ($value2->outlink) { // 外链
  57.                         continue;
  58.                     } else {
  59.                         $link = $Parser->parserLink(2, $value2->urlname, 'content', $value2->scode, $value2->sortfilename, $value2->id, $value2->filename);
  60.                     }
  61.                     $str .= $this->makeNode($link, date('Y-m-d', strtotime($value2->date)), '0.60', 'daily');
  62.                 }
  63.             }
  64.         }
  65.         echo $str . "\n</urlset>";
  66.     }

  67.     // 生成结点信息
  68.     private function makeNode($link, $date, $priority = 0.60, $changefreq = 'always')
  69.     {
  70.         $node = '
  71. <url>
  72.     <loc>' . get_http_url() . $link . '</loc>
  73.     <priority>' . $priority . '</priority>
  74.     <lastmod>' . $date . '</lastmod>
  75.     <changefreq>' . $changefreq . '</changefreq>
  76. </url>';
  77.         return $node;
  78.     }

  79.     // 文本格式
  80.     public function linkTxt()
  81.     {
  82.         $sorts = $this->model->getSorts();
  83.         $Parser = new ParserController();
  84.         $str = get_http_url() . "\n";
  85.         foreach ($sorts as $value) {
  86.             if ($value->outlink) {
  87.                 continue;
  88.             } elseif ($value->type == 1) {
  89.                 $link = $Parser->parserLink(1, $value->urlname, 'about', $value->scode, $value->filename);
  90.             } else {
  91.                 $link = $Parser->parserLink(2, $value->urlname, 'list', $value->scode, $value->filename);
  92.                 $str .= get_http_url() . $link . "\n";
  93.                 $contents = $this->model->getSortContent($value->scode);
  94.                 foreach ($contents as $value2) {
  95.                     if ($value2->outlink) { // 外链
  96.                         continue;
  97.                     } else {
  98.                         $link = $Parser->parserLink(2, $value2->urlname, 'content', $value2->scode, $value2->sortfilename, $value2->id, $value2->filename);
  99.                     }
  100.                     $str .= get_http_url() . $link . "\n";
  101.                 }
  102.             }
  103.         }
  104.         echo $str;
  105.     }
  106. }
复制代码

3、在网站模板下新建一个sitemap.html页面,通常是在 template\模板文件夹\html\sitemap.html

在该模板中引入公用文件后。在正文部分插入以下代码:
  1. <div class="sitemap">
  2.     {pboot:nav}
  3.     <dl>
  4.         <dt><a href="[nav:link]">[nav:name]</a></dt>
  5.         {pboot:if([nav:soncount]>0)}
  6.         <dd>
  7.         {pboot:2nav parent=[nav:scode]}
  8.         <a href="[2nav:link]">[2nav:name]</a>
  9.         {/pboot:2nav}
  10.         </dd>
  11.         {/pboot:if}
  12.     </dl>
  13.     {/pboot:nav}
  14. </div>
复制代码

到此,html格式的网站地图制作完成。

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

锦尚中国源码论坛

聚合标签|锦尚中国,为中国网站设计添动力 ( 鲁ICP备09033200号 ) |网站地图

GMT+8, 2024-4-15 23:07 , Processed in 0.029992 second(s), 16 queries .

带宽由 锦尚数据 提供 专业的数据中心

© 锦尚中国源码论坛 52jscn Inc. 非法入侵必将受到法律制裁 法律顾问:IT法律网 & 褚福省律师 锦尚爱心 版权申诉 版权与免责声明