杰奇的1.7版本,对于sitemap.xml的生成插件,已经有人制作了,但是1.8及以上版本还没有人去做。比较sitemap对于站长而言,是一种省时省力的网站链接提交方式,可是杰奇官方的所有版本都没有这个功能,而我对于php非常不熟悉,但是思考一段时间后,发现sitemap文件的生成,完全可以全部依靠杰奇已有功能来实现,甚至不需要懂什么编程,但是还是需要稍微转换一下思路。
测试sitemap插件的程序为杰奇2.3
首先要明确sitemap的规则
1.sitemap地址格式为txt或xml
2.每个地址文件最多5万个网址
3.文件大小不能超过10MB
可以利用的杰奇原文件:
/index.php //首页php文件
/indexs.php //静态首页生成文件
/lang/lang_index.php //首页语言包文件
/configs/blocks.php //区块定义文件(可不用)
主要原理如下
1.定义几个区块,调用最新更新文章,小说分类,只调用链接(最好伪静态)
2.参考index.php自定义一个杰奇单页sitemap.php,再设置完全参考sitemap的格式的模板文件。
3.参考indexs.php文件,创建sitemaps.php,使其可以对自定义的单页进行静态生成xml
4.修改后台栏目,使生成sitemap功能出现在后台
制作流程如下
一.在网站根目录新建一个sitemap.php,代码如下:
<?php
define('JIEQI_MODULE_NAME', 'system');
require_once('global.php');
jieqi_getconfigs(JIEQI_MODULE_NAME, 'blocks', 'jieqiBlocks');
include_once(JIEQI_ROOT_PATH.'/header.php');
$jieqiTpl->assign('jieqi_indexpage',1);
$jieqiTset['jieqi_page_template'] = JIEQI_ROOT_PATH.'/templates/sitemap.html';
$jieqiTpl->setCaching(0);
include_once(JIEQI_ROOT_PATH.'/footer.php');
?>
二.在/modules/article/templates/blocks文件夹新增sitemap_block.html,代码如下:
{?section name=i loop=$articlerows?}
<url>
<loc>{?$articlerows[i].url_articleinfo?}</loc>
<lastmod>{?$articlerows[i].lastupdate|date:'Y-m-d'?}T{?$articlerows[i].lastupdate|date:'H:i:s'?}Z</lastmod>
<changefreq>always</changefreq>
<priority>0.5</priority>
</url>
{?/section?}
可能typecho无法正确显示代码,所以截图如下:
三.在templates文件夹里新增sitemap.html文件,代码如下:
<?xml version="1.0" encoding="{?$jieqi_charset?}"?>
<?xml-stylesheet type='text/xsl' href='{?$jieqi_url?}/sitemap.xsl'?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{?block bid="0" module="article" filename="block_articlelist" classname="BlockArticleArticlelist" side="0" title="区块" vars="lastupdate,10000,0,0,0,0" template="sitemap_block.html" contenttype="4" custom="0" publish="3" hasvars="1"?}
</urlset>
注意我的设置里面,只让它显示最新的一万条,这个数字随意修改,不过静态模式下,其实没什么影响
四.参考indexs.php,在根目录新建sitemaps.php(本博客分享了解密工具),代码如下:
<?php
define("JIEQI_MODULE_NAME", "system");
require_once ("global.php");
jieqi_loadlang("sitemap", JIEQI_MODULE_NAME); //引用sitemap语言包
if ($jieqiUsersStatus != JIEQI_GROUP_ADMIN) {
jieqi_printfail(LANG_NEED_ADMIN);
}
if (JIEQI_CHAR_SET != JIEQI_SYSTEM_CHARSET) {
jieqi_printfail(sprintf($jieqiLang["system"]["sindex_need_charset"], JIEQI_CHAR_SET));
}
if (empty($_REQUEST["confirm"])) {
jieqi_msgwin(LANG_NOTICE, sprintf($jieqiLang["system"]["sindex_confirm_notice"], jieqi_addurlvars(array("confirm" => 1))));
}
if (empty($_REQUEST["target"]) || (32 < strlen($_REQUEST["target"])) || !preg_match("/^\w+\.xml?$/", $_REQUEST["target"])) { //设置生成的文件形式为xml
$_REQUEST["target"] = "sitemap.xml"; //生成sitemap.xml
}
$pagecontent = @file_get_contents(JIEQI_LOCAL_URL . "/sitemap.php"); //选择到sitemap.php
if (($pagecontent == false) || ($pagecontent == "")) {
jieqi_printfail($jieqiLang["system"]["get_content_failure"]);
}
$ret = jieqi_writefile(JIEQI_ROOT_PATH . "/" . $_REQUEST["target"], $pagecontent);
if ($ret) {
jieqi_msgwin(LANG_DO_SUCCESS, sprintf($jieqiLang["system"]["make_static_success"], JIEQI_URL . "/" . $_REQUEST["target"]));
}
else {
jieqi_printfail(sprintf($jieqiLang["system"]["make_static_failure"], $_REQUEST["target"]));
}
?>
五.参考/lang/lang_index.php,新增lang_sitemap.php文件,代码如下:
<?php
$jieqiLang['system']['index']=1;
$jieqiLang['system']['make_sindex_success']='恭喜您,sitemap.xml已经重新生成!';
$jieqiLang['system']['make_sindex_failure']='对不起,sitemap.xml生成失败,请检查 %s 是否有可写的权限!';
$jieqiLang['system']['sindex_need_cache']='系统未启用缓存,不支持生成sitemap.xml!';
$jieqiLang['system']['sindex_need_charset']='当前字符集为 %s ,不支持生成sitemap.xml!';
$jieqiLang['system']['sindex_confirm_notice']='生成sitemap.xml文件用于搜索引擎提交,但无法实时更新数据,生成后通过域名/sitemap.xml访问! <br /><br /><a href="%s">点击这里开始生成sitemap.xml</a>';
$jieqiLang['system']['make_static_success']='恭喜您,sitemap.xml已经重新生成!<br /><br /><a href="%s">点击这里查看</a>';
$jieqiLang['system']['make_static_failure']='对不起,sitemap.xml生成失败,请检查 %s 是否有可写的权限!';
$jieqiLang['system']['get_content_failure']='对不起,获取sitemap内容失败,可能服务器禁止PHP获取URL内容!';
?>
做完这一步的时候,可以访问域名/sitemaps.php测试生成效果,比如我的效果如下:
六.将功能加入后台,修改configs/adminmenu.php,找到大概86行开始,加入如下代码:
$jieqiAdminmenu['tools'][] = array('layer' => 0, 'caption' => '生成sitemap', 'command'=>JIEQI_URL.'/sitemaps.php', 'target' => 0, 'publish' => 1);
这时去后台就可以看到功能了:
以上就是制作这个插件的全部过程,完全利用杰奇已有文件,不需要自己做任何开发。但是我举出来的是非常简单的例子,只是调用小说的最新更新,并没有做更加多样的东西,但是通过这样的思路可以变得更加复杂。文件我就不提供下载了,各位自己去尝试制作吧。
教程已加入百度熊掌号原创保护,转载注明来源