Ryan

V2020-04-21

Typecho非自定义页面方式非插件实现Sitemap

需求

本来我时用sitemap插件生成sitemap的,但是我博客装的插件太多了,想尽量减少插件使用。

原理

很简单,在 themeInit 函数中自定义路由。由于实际上这个路由在路由表中不存在,所以需要强制设置响应码为200。sitemap.php放在你的主题目录下就可以额了。

function themeInit($archive)
{
    // sitemap
    if ($archive->request->getRequestUri() == "/sitemap.xml" || $archive->request->getRequestUri() == "/index.php/sitemap.xml") {
        $archive->setThemeFile("sitemap.php");
        $archive->response->setStatus(200);
    }
}

sitemap 源码

这个sitemap以前从自定义页面实现sitemap哪里改过来的,具体源码忘记谁的了。

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) {
    exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml/">
<head profile="https://gmpg.org/xfn/11">
  <meta http-equiv="Content-Type" content="text/html; charset=<?php $this->options->charset();?>" />
  <title>站点地图 - <?php $this->options->title()?></title>
  <meta name="keywords" content="站点地图,sitemap,<?php $this->options->title()?>" />
  <meta name="copyright" content="<?php $this->options->title()?>" />
  <link rel="canonical" href="<?php $this->permalink()?>" />
  <style type="text/css">
    body {font-family: Microsoft Yahei,Verdana;font-size:13px;margin:0 auto;color: #000000;background: #ffffff;width: 990px;margin: 0 auto}
    a:link,a:visited {color:#000;text-decoration:none;}
    a:hover {color:#08d;text-decoration:none;}
    h1,h2,h3,h4,h5,h6 {font-weight:normal;}
    img {border:0;}
    li {margin-top: 8px;}
    .page {padding: 4px; border-top: 1px #EEEEEE solid}
    .author {background-color:#EEEEFF; padding: 6px; border-top: 1px #ddddee solid}
    #nav, #content, #footer {padding: 8px; border: 1px solid #EEEEEE; clear: both; width: 95%; margin: auto; margin-top: 10px;}
  </style>
</head>
<body vlink="#333333" link="#333333">
  <h2 style="text-align: center; margin-top: 20px"><?php $this->options->title()?>'s SiteMap </h2>
  <center></center>
  <div id="nav"><a href="<?php $this->options->siteUrl();?>"><strong><?php $this->options->title()?></strong></a> &raquo; <a href="<?php $this->permalink()?>">站点地图</a></div>
  <div id="content">
    <h3>最新文章</h3>
    <ul>
    <?php
$output = '';
$stat = Typecho_Widget::widget('Widget_Stat');
$this->widget('Widget_Contents_Post_Recent', 'pageSize=' . $stat->publishedPostsNum)->to($archives);
$year = 0;
$mon = 0;
$i = 0;
$j = 0;
while ($archives->next()) {
    $year_tmp = date('Y', $archives->created);
    $mon_tmp = date('m', $archives->created);
    $y = $year;
    $m = $mon;
    if ($year > $year_tmp || $mon > $mon_tmp) {
        $output .= '</ul>';
    }
    $output .= '<li><a href="' . $archives->permalink . '">' . $archives->title . '</a></li>';
}
$output .= '</ul>';
echo $output;
?>
    </ul>
  </div>
  <div id="content">
    <h3>独立页面</h3>
    <ul class="clearfix" id="nav_menu">
      <li><a href="<?php $this->options->siteUrl();?>">Home</a></li>
      <?php $this->widget('Widget_Contents_Page_List')
    ->parse('<li><a href="{permalink}">{title}</a></li>');?>
    </ul>
  </div>
  <div id="content">
    <h3>分类目录<h3>
      <ul><?php $this->widget('Widget_Metas_Category_List')
    ->parse('<li><a href="{permalink}">{name}</a> ({count})</li>');?>
      </ul>
  </div>
  <div id="content">
    <h3>标签云<h3>
      <ul><?php $this->widget('Widget_Metas_Tag_Cloud')
    ->parse('<li><a href="{permalink}">{name}</a> ({count})</li>');?>
      </ul>
  </div>
  <div id="footer">查看博客首页: <strong><a href="<?php $this->options->siteUrl();?>"><?php $this->options->title()?></a></strong></div><br />
  <center>
    <div style="text-algin: center; font-size: 11px"><br /> &copy; <?php echo date('Y'); ?> 无插件 Sitemap By <strong><a href="https://doufu.ru" target="_blank">Ryan</a></strong> 版权所有<br /><br /><br />
    </div>
  </center>
</body>
</html>
文章出自:虾米皮皮乐 https://xiamp.net/archives/typecho-special-sitemap.html,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
233
Typecho非自定义页面方式非插件实现Sitemap
04/21
date('Y'); ?>
需求本来我时用sitemap插件生成sitemap的,但是我博客装的插件太多了,想尽量减少插件...
扫描右侧二维码阅读全文

发表评论

;-) :| :smile: :sad: :razz: :oops: :sup: :lol: :grin: :cry: :cool: :???:

已有 2 条评论

  1. jrotty Lv.0     Win 10 /    Chrome 2020-05-26 15:37

    当博客开启debug模式忘记关闭时就会boom:lol:

    1. Ryan Lv.4     Win 10 /    FireFox 2020-05-27 20:52

      确实哈哈哈