如何构建一个创建xml站点地图的控制器?

时间:2013-04-02 22:01:25

标签: php xml codeigniter sitemap.xml

我知道这个问题可能看似令人困惑和/或重复的问题。我搜索过以前的问题,但找不到适合我的情况。

我正在使用Codeigniter。我的老板要我构建一个控制器(或者如果可能的话,是一个php中的应用程序),它自动生成该站点的sitemap.xml。 Sitemap应遵循以下结构:

<url>
  <loc></loc>
  <changefreq></changefreq>
</url>

它还应包括不在网络上但在数据库上的信息。我对此感到困惑,因为我知道站点地图是基于网站的链接。 (然后,我对xml一无所知,这是我所有困惑的原因)。

例如,该网站的一部分有一个'新闻源',这显示了数据库中的最新5条新闻。我的老板想要的是将旧消息编入索引。

我应该指出该网站使用两个不同的数据库。一个用于新闻源的新闻,另一个用于网站中的其他产品。 (每个产品都有自己的链接,有些产品不在现场只在数据库上,我的老板想要这些产品在网站地图上的任何一种方式)。

关于如何做到这一点的任何想法将不胜感激,因为我不知道从哪里开始。

感谢您的时间

3 个答案:

答案 0 :(得分:1)

这就是结构:你创建了一个函数,用于检查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">   ';

然后从db中读取要包含在站点地图中的每个帖子和页面的查询。您使用包含以下内容的循环:

$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);

不要忘记调整您的代码。这不是复制和粘贴。

答案 1 :(得分:1)

除了此处的其他答案之外,还有许多搜索引擎会在您网站的根目录中查找名为xml的{​​{1}}文件。你可以有一条路线将该网址映射到将生成它的控制器。

sitemap.xml

答案 2 :(得分:-1)

您可能对现有的Code Ignighter库感兴趣,以生成XML站点地图。

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

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