如何构建创建XML站点地图的控制器


how to build a controller that creates an xml sitemap?

我知道这个问题可能看起来令人困惑和/或重复的问题。我已经找遍了以前的问题,但没有找到一个适合我的。

我正在使用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.xmlxml文件。你可以有一个路由,把那个url映射到生成它的控制器。

$route['sitemap.xml'] = 'sitemap_controller/generate_method';

您可能对这个用于生成XML站点地图的现有Code Ignighter库感兴趣。

http://www.mikesimagination.net/blog/post/29-Aug-12/Codeigniter-auto-XML-sitemap

修改现有代码可能比开发自己的代码更好/更快。