• 博主:孽 (云趣科技)
  • QQ:点击这里给我发消息
  • 微信:dylanv
  • 业务:切图,建站,二开,运维
  • yeka-ad
  • yeka-ad
文章目录

给PbootCms增加sitemap.html网站地图页面

给PbootCms增加sitemap.html网站地图页面
稿件作者 CMS博客 2021-11-12 19:20 PbootCMS教程 4695
点击购买 ( ¥ 10 )

前言

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格式的网站地图制作完成。

效果可以看本站的网站地图:网站地图-PbootCMS建站博客

老板服务

以上教程有时间的朋友动动小手就可以完成。

我们也贴心的为老板们提供了一键替换包。

欢迎老板下单购买。

获取方式

本站插件,无特别说明,均会在官方发布新版后的两周内同步发布更新包。请务必在有更新包的情况下再进行在线升级操作。
  1. 价格:RMB 10 元
  2. 购买流程:微信扫小程序码->立即购买->付款成功->获取到下载地址;
  3. 购买成功后扫码登陆PC端会员中心->我的订单,可以查看下载地址以及使用手册。
  4. 您可以私下分享该代码,但是请不要在网络上发布;
  5. 下载该代码并不代表我们可以无条件的为您解决问题,请先认真阅读操作手册;
  6. 如果遇到代码BUG,请鞭笞博主进行修复并更新。
扫码购买
扫码购买[IOS暂不支持]
首先给无法用IOS扫码支付的用户道个歉:对不起。小站经营几年来,也算是历经坎坷,从早期的被DDos,然后被PB圈内人举报网站含有在线支付,服务商一刀切要求下架。随后本站上架了微信小程序商城,经历了小程序内1毛钱支付测试订单,被恶意投诉。这次又被举报小程序含有ios端支付。一路走来,一直被针对,我感谢那些针对我的人,是你们让我一步步的走向合规之路。

联系客服

请使用QQ扫码
请使用微信扫码
回复时间:工作日下午4点30以后;周六周日不限。
  • 分享:

文章评论(审核通过可见)

说点什么
共有0条评论

monicaLogo.83e0ae18.png


通过Monica免费试用满血可联网的DeepSeek R1!

一站式AI助手,个性化,编写,免费


Monica 利用剪短的人工智能模型,包括DeepSeek R1、OpenAI o1、GPT-4o、Claude 3.7和Gemini1.5,来提升您的聊天、搜索、写作和编程体验。