From b657913ac64c6697762b1c8bc7a2b077cbb05c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BE=BD=E4=B8=AD?= Date: Thu, 2 Jul 2020 19:44:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=A4=BE=E5=8C=BA=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E7=89=88=E6=8F=92=E4=BB=B6Sitemap=E5=92=8C=E5=8A=A0?= =?UTF-8?q?=E9=80=9F=E7=94=A8zip=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + Sitemap/Action.php | 115 +++++++++++++++++++++++++++++++++++++++++++ Sitemap/Plugin.php | 72 +++++++++++++++++++++++++++ Sitemap/README.md | 79 ++++++++++++++++++++++++++++++ Sitemap/sitemap.xsl | 116 ++++++++++++++++++++++++++++++++++++++++++++ ZIP_CDN/Sitemap.zip | Bin 0 -> 6100 bytes 6 files changed, 383 insertions(+) create mode 100644 Sitemap/Action.php create mode 100644 Sitemap/Plugin.php create mode 100644 Sitemap/README.md create mode 100644 Sitemap/sitemap.xsl create mode 100644 ZIP_CDN/Sitemap.zip diff --git a/README.md b/README.md index 51f8cec8..c5d03f4e 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ [SCS](SCS) | 系统附件使用新浪云存储SCS插件 | 1.1.1 | [vfhky](https://github.com/vfhky) | [Download](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/SCS.zip) [ShortLinks](ShortLinks) | 基于[GoLinks](GoLinks)更强大的短链接插件 | 1.1.0 b1 | [Ryan](https://github.com/benzBrake) | [Download](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/ShortLinks.zip) [Sinauth](Sinauth) | 新浪用户授权注册帐号与登录插件 | 1.0.0 Beta | [jimmy chaw](https://github.com/web3d) | [Download](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/Sinauth.zip) +[Sitemap](Sitemap) | 动态生成Xml标准网站地图页插件 | 1.0.4 | [迷你日志](https://minirizhi.com),[八云酱](https://github.com/bayunjiang),[Hanny](http://www.imhan.com) | [Download](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/Sinauth.zip) [SlantedExtend](SlantedExtend) | [Slanted主题](https://github.com/typecho-fans/themes/blob/master/Slanted)自定义字段专用插件 | 1.0.0 | [DT27](https://github.com/DT27) | [Special](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/SlantedExtend.zip) [SlimBox2](SlimBox2) | 轻量级jQuery图片灯箱弹窗插件 | 1.0.7 | [Ryan](https://github.com/ryanfwy), [冰剑](https://github.com/binjoo) | [Download](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/SlimBox2.zip) [Smilies](Smilies) | Typecho自定义图片表情替换插件 | 1.1.3 | [羽中](https://github.com/jzwalk), Willin Kan | [Download](https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/Smilies.zip) diff --git a/Sitemap/Action.php b/Sitemap/Action.php new file mode 100644 index 00000000..4c3b3025 --- /dev/null +++ b/Sitemap/Action.php @@ -0,0 +1,115 @@ +fetchAll($db->select()->from('table.contents') + ->where('table.contents.status = ?', 'publish') + ->where('table.contents.created < ?', $options->gmtTime) + ->where('table.contents.type = ?', 'page') + ->order('table.contents.created', Typecho_Db::SORT_DESC)); + + $articles = $db->fetchAll($db->select()->from('table.contents') + ->where('table.contents.status = ?', 'publish') + ->where('table.contents.created < ?', $options->gmtTime) + ->where('table.contents.type = ?', 'post') + ->order('table.contents.created', Typecho_Db::SORT_DESC)); + + $cates = $db->fetchAll($db->select()->from('table.metas') + ->where('table.metas.type = ?', 'category') + ->order('table.metas.order', Typecho_Db::SORT_DESC)); + + $tags = $db->fetchAll($db->select()->from('table.metas') + ->where('table.metas.type = ?', 'tag') + ->order('table.metas.mid', Typecho_Db::SORT_DESC)); + + header("Content-Type: application/xml"); + echo "\n"; + echo "pluginUrl . "/Sitemap/sitemap.xsl'?>\n"; + echo ""; + echo "\t\n"; + echo "\t\t".$options->siteUrl."\n"; + echo "\t\tdaily\n"; + echo "\t\t1.0\n"; + echo "\t\n"; + foreach($pages AS $page) { + $type = $page['type']; + $routeExists = (NULL != Typecho_Router::get($type)); + $page['pathinfo'] = $routeExists ? Typecho_Router::url($type, $page) : '#'; + $page['permalink'] = Typecho_Common::url($page['pathinfo'], $options->index); + + echo "\t\n"; + echo "\t\t".$page['permalink']."\n"; + echo "\t\t".date('Y-m-d',$page['modified'])."\n"; + echo "\t\talways\n"; + echo "\t\t0.6\n"; + echo "\t\n"; + } + foreach($articles AS $article) { + $type = $article['type']; + $article['categories'] = $db->fetchAll($db->select()->from('table.metas') + ->join('table.relationships', 'table.relationships.mid = table.metas.mid') + ->where('table.relationships.cid = ?', $article['cid']) + ->where('table.metas.type = ?', 'category') + ->order('table.metas.order', Typecho_Db::SORT_ASC)); + $article['category'] = urlencode(current(Typecho_Common::arrayFlatten($article['categories'], 'slug'))); + $article['slug'] = urlencode($article['slug']); + $article['date'] = new Typecho_Date($article['created']); + $article['year'] = $article['date']->year; + $article['month'] = $article['date']->month; + $article['day'] = $article['date']->day; + $routeExists = (NULL != Typecho_Router::get($type)); + $article['pathinfo'] = $routeExists ? Typecho_Router::url($type, $article) : '#'; + $article['permalink'] = Typecho_Common::url($article['pathinfo'], $options->index); + + echo "\t\n"; + echo "\t\t".$article['permalink']."\n"; + echo "\t\t".date('Y-m-d',$article['modified'])."\n"; + echo "\t\talways\n"; + echo "\t\t0.8\n"; + echo "\t\n"; + } + foreach($cates AS $cate) { + $type = $cate['type']; + $art_rs = $db->fetchRow($db->select()->from('table.contents') + ->join('table.relationships', 'table.contents.cid = table.relationships.cid') + ->where('table.contents.status = ?', 'publish') + ->where('table.relationships.mid = ?', $cate['mid']) + ->order('table.relationships.cid', Typecho_Db::SORT_DESC) + ->limit(1)); + $routeExists = (NULL != Typecho_Router::get($type)); + $cate['pathinfo'] = $routeExists ? Typecho_Router::url($type, $cate) : '#'; + $cate['permalink'] = Typecho_Common::url($cate['pathinfo'], $options->index); + + echo "\t\n"; + echo "\t\t".$cate['permalink']."\n"; + echo "\t\t".date('Y-m-d',$art_rs['modified'])."\n"; + echo "\t\tdaily\n"; + echo "\t\t0.5\n"; + echo "\t\n"; + } + foreach($tags AS $tag) { + $type = $tag['type']; + $art_rt = $db->fetchRow($db->select()->from('table.contents') + ->join('table.relationships', 'table.contents.cid = table.relationships.cid') + ->where('table.contents.status = ?', 'publish') + ->where('table.relationships.mid = ?', $tag['mid']) + ->order('table.relationships.cid', Typecho_Db::SORT_DESC) + ->limit(1)); + $routeExists = (NULL != Typecho_Router::get($type)); + $tag['pathinfo'] = $routeExists ? Typecho_Router::url($type, $tag) : '#'; + $tag['permalink'] = Typecho_Common::url($tag['pathinfo'], $options->index); + + echo "\t\n"; + echo "\t\t".$tag['permalink']."\n"; + echo "\t\t".date('Y-m-d',$art_rt['modified'])."\n"; + echo "\t\tdaily\n"; + echo "\t\t0.5\n"; + echo "\t\n"; + } + echo ""; + } +} diff --git a/Sitemap/Plugin.php b/Sitemap/Plugin.php new file mode 100644 index 00000000..1547b109 --- /dev/null +++ b/Sitemap/Plugin.php @@ -0,0 +1,72 @@ +TF社区维护版】 + * + * @package Sitemap + * @author 迷你日志,八云酱,Hanny + * @version 1.0.4 + * @dependence 9.9.2-* + * @link https://github.com/typecho-fans/plugins/blob/master/Sitemap + * + * version 1.0.4 at 2020-07-02 by Typecho Fans (合并多人修改) + * 页面改xml后缀,加入美化样式,简化时间戳 by Suming/八云酱 + * 调整优先级比例,增加分类页面及首页链接 by 迷你日志/羽中 + * + * version 1.0.3 at 2017-03-28 by 禾令奇 + * 修改增加标签链接,修改页面权重分级 + * + * 历史版本 + * version 1.0.1 at 2010-01-02 + * 修改自定义静态链接时错误的Bug + * + * version 1.0.0 at 2010-01-02 + * Sitemap for Google + * 生成文章和页面的Sitemap + * + */ +class Sitemap_Plugin implements Typecho_Plugin_Interface +{ + /** + * 激活插件方法,如果激活失败,直接抛出异常 + * + * @access public + * @return void + * @throws Typecho_Plugin_Exception + */ + public static function activate() + { + Helper::addRoute('sitemap', '/sitemap.xml', 'Sitemap_Action', 'action'); + } + + /** + * 禁用插件方法,如果禁用失败,直接抛出异常 + * + * @static + * @access public + * @return void + * @throws Typecho_Plugin_Exception + */ + public static function deactivate() + { + Helper::removeRoute('sitemap'); + } + + /** + * 获取插件配置面板 + * + * @access public + * @param Typecho_Widget_Helper_Form $form 配置面板 + * @return void + */ + public static function config(Typecho_Widget_Helper_Form $form){} + + /** + * 个人用户的配置面板 + * + * @access public + * @param Typecho_Widget_Helper_Form $form + * @return void + */ + public static function personalConfig(Typecho_Widget_Helper_Form $form){} + +} diff --git a/Sitemap/README.md b/Sitemap/README.md new file mode 100644 index 00000000..5c4b1944 --- /dev/null +++ b/Sitemap/README.md @@ -0,0 +1,79 @@ + + TF Logo + + +Sitemap v1.0.4 - 社区维护版 +====================== +

—— 动态生成符合搜索引擎收录标准的Xml格式站点地图插件,支持输出分类/标签页地址。

+ +

+ 使用说明 • + 版本历史 • + 贡献作者 • + 附注/链接 • + 授权协议 +

+ +--- + +## 使用说明 + + + + + +
+ +###### Sitemap 可方便站长通知搜索引擎网站上有哪些可供抓取的网页。最简单通行的就是Google制定的XML格式标准,其中可列出网址及其元数据(上次更新时间、更改频率和优先级权重等),便于搜索引擎更高效智能地抓取网站内容。 + +**使用方法**: +##### 1. 下载本插件,放在 `usr/plugins/` 目录中,确保文件夹名为 Sitemap; +##### 2. 激活插件; +##### 3. 访问http://[example].com/sitemap.xml即可看到页面效果。 + +
+ +## 版本历史 + + * v1.0.4 (20-7-02 [@jzwalk](https://github.com/jzwalk)) + * 增加首页地址输出,合并4个衍生版改动: + * 含魔改版Sitemap功能支持分类/标签地址输出([@kavico](https://minirizhi.com)); + * 对调页面文章优先级使Google正常收录([@raymond9zhou](https://github.com/raymond9zhou)); + * 简化样式说明,优化时间戳仅保留日期([@bayunjiang](https://github.com/bayunjiang)); + * 页面路径带xml文件后缀,套用xsl美化样式([@Suming](https://inwao.com))。 + * v1.0.3 (17-03-28 [@Vicshs](https://github.com/Vicshs)) + * 增加标签页地址遍历; + * 提升页面地址优先级。 + * v1.0.2 ([@Vicshs](https://github.com/Vicshs)) + * (不详) + * v1.0.1 (10-01-02 [@Hanny](http://www.imhan.com)) + * 修改自定义静态链接时错误的Bug。 + * v1.0.0 (10-01-02 [@Hanny](http://www.imhan.com)) + * 实现生成含文章页面地址的Google标准sitemap页面。 + +## 贡献作者 + +[![jzwalk](https://avatars1.githubusercontent.com/u/252331?v=3&s=100)](https://github.com/jzwalk) | [![kavico](https://secure.gravatar.com/avatar/03b9df1a08dd482503a70e9339b4888b?s=100)](https://minirizhi.com) | [![raymond9zhou](https://avatars1.githubusercontent.com/u/28761293?v=3&s=100)](https://github.com/raymond9zhou) | [![bayunjiang](https://avatars1.githubusercontent.com/u/19381311?v=3&s=100)](https://github.com/bayunjiang) | [![Suming](https://secure.gravatar.com/avatar/433daae294c13cd6ca7246e84a721038?s=100)](https://inwao.com) | [![Hanny](https://secure.gravatar.com/avatar/?d=mp&s=100)](http://www.imhan.com) +:---:|:---:|:---:|:---:|:---:|:---: +[jzwalk](https://github.com/jzwalk) (2020) | [kavico](https://minirizhi.com) (2020) | [raymond9zhou](https://github.com/raymond9zhou) (2019) | [bayunjiang](https://github.com/bayunjiang) (2017) | [Suming](https://inwao.com) (2016) | [Hanny](http://www.imhan.com) (2010) + +*为避免作者栏显示过长,插件信息仅选取登记3个署名,如有异议可协商修改。 + +## 附注/链接 + +本社区维护版已包含以下各版本功能并做优化调整: + +* [合并版(kavico)](http://forum.typecho.org/viewtopic.php?f=6&t=12315&p=45414) - 含输出分类功能。 +* [微调版(raymond9zhou)](https://github.com/raymond9zhou/typecho-auto-sitemap-plugin) - 调整优先级。 +* [增强版(Vicshs)](https://github.com/Vicshs/Sitemap) - 输出tag,提升优先级。 +* [简化版(bayunjiang)](https://github.com/bayunjiang/typecho-sitemap) - 简化样式及时间戳。 +* [美化版(Suming)](https://inwao.com/Sitemap.html) - 改xml后缀,套用样式。 +* [原版](http://www.imhan.com/typecho) - 实现基本功能。 + +欢迎社区成员继续贡献代码参与更新。 + +## 授权协议 + +TF目录下的社区维护版作品如果没有明确声明,默认采用与Typecho相同的[GPLv2](https://github.com/typecho/typecho/blob/master/LICENSE.txt)开源协议。(要求提及出处,保持开源并注明修改。) + +> Sitemap原作未附协议声明,原作者保留所有权利。 © [Hanny](http://www.imhan.com) diff --git a/Sitemap/sitemap.xsl b/Sitemap/sitemap.xsl new file mode 100644 index 00000000..a94e0e97 --- /dev/null +++ b/Sitemap/sitemap.xsl @@ -0,0 +1,116 @@ + + + + + + + XML Sitemap + + + + +

XML Sitemap

+
+

+ This is a XML Sitemap which is supposed to be processed by search engines like Baidu, Google, 360, Bing and Sogou.
+ You can find more information about XML sitemaps on sitemaps.org and Google's list of sitemap programs. +

+
+
+ + + + + + + + + + + + + ood + + + even + + + + + + + +
URLPriorityChange FrequencyLastChange
+ + + + + + + + + + + + +
+
+ + + +
+
\ No newline at end of file diff --git a/ZIP_CDN/Sitemap.zip b/ZIP_CDN/Sitemap.zip new file mode 100644 index 0000000000000000000000000000000000000000..0b38390f28b4e073797842f1968f8f22916cc8a5 GIT binary patch literal 6100 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