最近项目开发已经快结尾了,所以我现在在做的是一些扫尾的工作了。
从吃完晚饭,到现在,大概花了一个小时左右,基于thinkphp5的sitemap地图模块终于可以生成了。
由于程序是我自己使用,不是给公司开发的,所以我就直接前台访问生成了,给前台加上一个访问口令,确认口令是正确的之后就开始执行读取数据库里面的内容然后按照预制的格式进行生成字符串,之后把字符串写入到网站的根目录下面的sitemap.xml文件中就行了。
现在的这个版本由于数据比较少所以生成时间还是很快的,如果后期数据很大,还是需要预加载sitemap文件然后在前面追加,现在还是不用了。等我有时间再回头添加。
原理:
前台加入一个方法,确保能访问生成,测试通过之后写入文件。写完之后我是在后台也加了一个方法,确保后台执行指定能进入到前台生成并返回success信息给管理员。
这里其实是可以直接在后台生成的,但是我不想写每次发表文章都追加一条数据进入sitemap.xml文件,所以我就图便宜直接前台生成写入,然后把前台网址和口令设置一个定时访问生成就了。建议直接用宝塔后台每天凌晨更新数据就行了。
如何使用,把下面的代码放入到一个前台方法中,然后开始修改你数据库里面获取的内容。
代码:
// 生成全站的xml地图 $AboutLogic=new AboutLogic(); // 所有网址 $suoyou=$AboutLogic->sitemap_wangzhi(); // 所有分类 $getList=$AboutLogic->sitemap_fenlei(); // 所有文章 $wenzhang=$AboutLogic->sitemap_wenzhang(); $SeoLogic=new SeoLogic(); $seo=$SeoLogic->seo('pc_news'); // 开始生成 $hhh=db('sysconfig')->where('varname','weburl')->cache(true,360000)->select(); $rr = '<?xml version="1.0" encoding="UTF-8"?>'; $rr .='<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/"> <!-- generated-on='.date("Y-m-d H:m:s").'--> <url> <loc>https://'.$hhh[0]["value"].'</loc> <lastmod>'.gmdate("Y-m-d\TH:i:s+00:00").'</lastmod> <changefreq>daily</changefreq> <priority>1.0</priority> </url>'; // 生成所有网址 foreach ($suoyou as $key) { // echo '<pre>'; // print_r($key); $rr .= ' <url> <loc>https://'.$hhh[0]["value"].'/view/'.$key["id"].'.html</loc> <lastmod>'.gmdate("Y-m-d\TH:i:s+00:00",$key["pubtime"]).'</lastmod> <changefreq>monthly</changefreq> <priority>0.8</priority> </url>'; } // 生成所有分类 foreach ($getList as $key) { $rr .= ' <url> <loc>https://'.$hhh[0]["value"].'/class-'.$key["id"].'/</loc> <lastmod>'.gmdate("Y-m-d\TH:i:s+00:00").'</lastmod> <changefreq>monthly</changefreq> <priority>0.6</priority> </url>'; } // 生成所有分类 foreach ($wenzhang as $key) { $rr .= ' <url> <loc>https://'.$hhh[0]["value"].'/news/'.$key["id"].'.html</loc> <lastmod>'.gmdate("Y-m-d\TH:i:s+00:00",$key["pubtime"]).'</lastmod> <changefreq>monthly</changefreq> <priority>0.7</priority> </url>'; } $rr .= '</urlset>'; file_put_contents('sitemap.xml', $rr); die("success");