我知道这个问题可能看起来令人困惑和/或重复的问题。我已经找遍了以前的问题,但没有找到一个适合我的。
我正在使用Codeigniter。我的老板要求我建立一个控制器(或者如果可能的话,在php中的应用程序),自动生成一个站点的sitemap.xml。Sitemap应该遵循以下结构:
<url>
<loc></loc>
<changefreq></changefreq>
</url>
它还应该包括不在网络上,而是在数据库上的信息。我对此感到困惑,因为据我所知,站点地图是基于网站的链接。(再说一次,我对xml一无所知,所以这是我所有困惑的一个原因)。
例如,网站的一部分有一个'newsfeed',它显示了数据库中最新的5条新闻。我老板想要的是旧新闻也被编入索引。
我应该指出这个站点使用了两个不同的数据库。一个用于新闻提要上的新闻,另一个用于站点中的其他产品。(每个产品都有自己的链接,有些产品不只是在数据库上,我的老板希望这些产品在sitemap上)。
任何关于如何做到这一点的想法将是非常感激的,因为我不知道从哪里开始。
感谢您的宝贵时间
结构就是这样:编写一个函数,检查是否a) sitemap.xml不存在,或者b)从创建已经存在的文件开始,是否已经经过了一定的时间。
如果a)或b)创建一个新文件sitemap.xml。它总是这样开始的:
$xml_data = ' <?xml version="1.0" encoding="UTF-8"?> ';
$xml_data .= ' <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ';
$xml_data .= ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
$xml_data .= ' xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> ';
然后从数据库中读取您想要包含到sitemap中的每个帖子和页面。你使用的循环包括:
$xml_data .= ' <url><loc>'.$_SERVER['SERVER_NAME'].'/'.$recLink.'</loc> ';
$xml_data .= ' <lastmod>'.$recDate.'</lastmod> ';
$xml_data .= ' <changefreq>daily</changefreq> ';
$xml_data .= ' <priority>1.00</priority></url> ';
}
$xml_data .= ' </urlset> ';
最后,编写并保存文件:
$fh = fopen($file,'w');
fwrite($fh, ltrim($xml_data));
fclose($fh);
不要忘记调整你的代码。这不是复制粘贴
除了这里的其他答案之外,根据许多搜索引擎在您的站点的根目录上查找名为sitemap.xml
的xml
文件。你可以有一个路由,把那个url映射到生成它的控制器。
$route['sitemap.xml'] = 'sitemap_controller/generate_method';
您可能对这个用于生成XML站点地图的现有Code Ignighter库感兴趣。
http://www.mikesimagination.net/blog/post/29-Aug-12/Codeigniter-auto-XML-sitemap修改现有代码可能比开发自己的代码更好/更快。