我知道这个问题可能看似令人困惑和/或重复的问题。我搜索过以前的问题,但找不到适合我的情况。
我正在使用Codeigniter。我的老板要我构建一个控制器(或者如果可能的话,是一个php中的应用程序),它自动生成该站点的sitemap.xml。 Sitemap应遵循以下结构:
<url>
<loc></loc>
<changefreq></changefreq>
</url>
它还应包括不在网络上但在数据库上的信息。我对此感到困惑,因为我知道站点地图是基于网站的链接。 (然后,我对xml一无所知,这是我所有困惑的原因)。
例如,该网站的一部分有一个'新闻源',这显示了数据库中的最新5条新闻。我的老板想要的是将旧消息编入索引。
我应该指出该网站使用两个不同的数据库。一个用于新闻源的新闻,另一个用于网站中的其他产品。 (每个产品都有自己的链接,有些产品不在现场只在数据库上,我的老板想要这些产品在网站地图上的任何一种方式)。
关于如何做到这一点的任何想法将不胜感激,因为我不知道从哪里开始。
感谢您的时间
答案 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
修改现有代码可能比开发自己的代码好得多/快。