1

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

我正在使用 Codeigniter。我的老板要求我构建一个控制器(或者如果可能的话,用 php 编写一个应用程序)来为站点自动生成一个 sitemap.xml。站点地图应遵循以下结构:

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

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

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

我应该指出,该站点使用两个不同的数据库。一个用于新闻源上的新闻,另一个用于站点中的其他产品。(每个产品都有自己的链接,有些产品不仅在数据库上,而且我的老板希望这些产品在站点地图上)。

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

谢谢你的时间

4

3 回答 3

2

这就是结构:您创建一个函数来检查 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">   ';

然后从数据库中查询您想要包含到站点地图中的每个帖子和页面。您使用一个循环,包括:

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

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

于 2013-04-02T22:08:30.757 回答
1

除了此处的其他答案之外,鉴于许多搜索引擎会查找在您网站的根目录中xml命名的文件。sitemap.xml您可以有一个路由,将该 url 映射到将生成它的控制器。

$route['sitemap.xml'] = 'sitemap_controller/generate_method';
于 2013-04-02T22:23:16.813 回答
-1

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

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

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

于 2013-04-02T22:19:08.510 回答