|
前言
PbootCms默认的sitemap是xml格式,对网站前端来说显示不够友好。毕竟这玩意是给搜索引擎看的。
我们来给网站增加一个sitemap.html页面。
方法有很多,你可以通过后台新建一个专题页,命名为sitemap来实现。
这个方法有些缺点,就是在标签循环过程中要手动去除该页面。
作为一个强迫症患者,这个不能忍。
今天我们就来动手给PbootCMS增加一个sitemap.html功能页面。
话不多说,上教程,以PbootCms v3.1.2示例,其他版本略微差异:
操作步骤
1、打开路由管理页面,路径:apps/common/route.php
大约在40行,注释内容是关于网站地图的前端路由,我们替换成以下内容:
- // 前台及接口路径统一小写URL
- // =======前台路由============
- 'home/sitemap.html' => 'home/Sitemap/index', // 站点地图1
- 'home/sitemap.xml' => 'home/Sitemap/xml', // 站点地图XML格式
- 'home/sitemap.txt' => 'home/Sitemap/linkTxt', // 站点地图TXT格式
- //'home/sitemap' => 'home/Sitemap/xml', // 站点地图默认XML
复制代码
2、打开sitemap管理控制器,路径:apps/home/controller/SitemapController.php
替换为:
- <?php
- /**
- * @copyright (C)2016-2099 Hnaoyun Inc.
- * @author XingMeng
- * @email hnxsh@foxmail.com
- * @date 2018年7月15日
- * 生成sitemap文件
- */
- namespace app\home\controller;
- use core\basic\Controller;
- use app\home\model\SitemapModel;
- use core\basic\Url;
- class SitemapController extends Controller
- {
- protected $parser;
- protected $htmldir;
- protected $model;
- public function __construct()
- {
- $this->model = new SitemapModel();
- $this->parser = new ParserController();
- $this->htmldir = $this->config('tpl_html_dir') ? $this->config('tpl_html_dir') . '/' : '';
- }
- public function index(){
- $tpl='sitemap.html';
- $content = parent::parser($this->htmldir . $tpl); // 框架标签解析
- $content = $this->parser->parserBefore($content); // CMS公共标签前置解析
- $content = str_replace('{pboot:pagetitle}','网站地图-{pboot:sitetitle}-{pboot:sitesubtitle}', $content);
- $content = $this->parser->parserPositionLabel($content, 0, '网站地图', Url::home('sitemap')); // CMS当前位置标签解析
- $content = $this->parser->parserSpecialPageSortLabel($content, - 1, '网站地图', Url::home('sitemap')); // 解析分类标签
- $content = $this->parser->parserSearchLabel($content); // 搜索结果标签
- $content = $this->parser->parserAfter($content); // CMS公共标签后置解析
- echo $content; // 搜索页面不缓存
- exit();
- }
- public function xml()
- {
- header("Content-type:text/xml;charset=utf-8");
- $str = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
- $str .= '<urlset>' . "\n";
- $str .= $this->makeNode('', date('Y-m-d'), '1.00', 'always'); // 根目录
-
- $sorts = $this->model->getSorts();
- $Parser = new ParserController();
- foreach ($sorts as $value) {
- if ($value->outlink) {
- continue;
- } elseif ($value->type == 1) {
- $link = $Parser->parserLink(1, $value->urlname, 'about', $value->scode, $value->filename);
- $str .= $this->makeNode($link, date('Y-m-d'), '0.80', 'daily');
- } else {
- $link = $Parser->parserLink(2, $value->urlname, 'list', $value->scode, $value->filename);
- $str .= $this->makeNode($link, date('Y-m-d'), '0.80', 'daily');
- $contents = $this->model->getSortContent($value->scode);
- foreach ($contents as $value2) {
- if ($value2->outlink) { // 外链
- continue;
- } else {
- $link = $Parser->parserLink(2, $value2->urlname, 'content', $value2->scode, $value2->sortfilename, $value2->id, $value2->filename);
- }
- $str .= $this->makeNode($link, date('Y-m-d', strtotime($value2->date)), '0.60', 'daily');
- }
- }
- }
- echo $str . "\n</urlset>";
- }
- // 生成结点信息
- private function makeNode($link, $date, $priority = 0.60, $changefreq = 'always')
- {
- $node = '
- <url>
- <loc>' . get_http_url() . $link . '</loc>
- <priority>' . $priority . '</priority>
- <lastmod>' . $date . '</lastmod>
- <changefreq>' . $changefreq . '</changefreq>
- </url>';
- return $node;
- }
- // 文本格式
- public function linkTxt()
- {
- $sorts = $this->model->getSorts();
- $Parser = new ParserController();
- $str = get_http_url() . "\n";
- foreach ($sorts as $value) {
- if ($value->outlink) {
- continue;
- } elseif ($value->type == 1) {
- $link = $Parser->parserLink(1, $value->urlname, 'about', $value->scode, $value->filename);
- } else {
- $link = $Parser->parserLink(2, $value->urlname, 'list', $value->scode, $value->filename);
- $str .= get_http_url() . $link . "\n";
- $contents = $this->model->getSortContent($value->scode);
- foreach ($contents as $value2) {
- if ($value2->outlink) { // 外链
- continue;
- } else {
- $link = $Parser->parserLink(2, $value2->urlname, 'content', $value2->scode, $value2->sortfilename, $value2->id, $value2->filename);
- }
- $str .= get_http_url() . $link . "\n";
- }
- }
- }
- echo $str;
- }
- }
复制代码
3、在网站模板下新建一个sitemap.html页面,通常是在 template\模板文件夹\html\sitemap.html
在该模板中引入公用文件后。在正文部分插入以下代码:
- <div class="sitemap">
- {pboot:nav}
- <dl>
- <dt><a href="[nav:link]">[nav:name]</a></dt>
- {pboot:if([nav:soncount]>0)}
- <dd>
- {pboot:2nav parent=[nav:scode]}
- <a href="[2nav:link]">[2nav:name]</a>
- {/pboot:2nav}
- </dd>
- {/pboot:if}
- </dl>
- {/pboot:nav}
- </div>
复制代码
到此,html格式的网站地图制作完成。
|
|