【问题标题】:how to build a controller that creates an xml sitemap?如何构建一个创建 xml 站点地图的控制器?
【发布时间】:2013-04-02 22:01:25
【问题描述】:

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

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

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

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

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

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

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

感谢您的宝贵时间

【问题讨论】:

  • 所以你是说你根本不知道你可能如何解决这个问题?
  • 我完全迷路了。起初我想xml-sitemaps.com 来做站点地图,但不是这样,因为我的老板想要一个控制器来做它(我根本不明白)。我不是要求你做我的工作(对不起,如果看起来那样)只是参考如何开始这个,所以我知道我可以研究什么。
  • xml-sitemaps.com 不是动态的。在下面有一个详细的想法。

标签: php xml codeigniter sitemap.xml


【解决方案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">   ';

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

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

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

【讨论】:

  • 非常感谢 Nik,我正在根据您的代码工作,看看它是否有效。
  • 宾果游戏!您可以使用与函数相同的 php 概念,构建一个 rss.xml、一个 feed.xml 和一个 atom.xml。只需按照他们的 xml 布局即可。
  • 我有一个问题,它会创建一个新文件,但现在我意识到站点地图没有更新 :( 这就是我所做的:$sitemapn = is_file('./sitemapn.xml'); if($sitemapn) { $nmod = filemtime('./sitemapn.xml'); $ncurrent = time(); $ndif = $ncurrent - $nmod; #1 day limit $nlimit = time() - (1 * 24 * 60 * 60); } #check to see if sitemapn doesn't exist or is not updated if ( !$sitemapn OR $ndif &gt;= $nlimit ) { $this-&gt;createXMLSitemapn(); } 知道为什么它不起作用吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 这实际上看起来更复杂,因为我不得不调整我的整个代码,Nik 的方式是一种更好的方法。无论如何感谢您的帮助!我可能会将该库用于其他项目:)
    猜你喜欢
    • 2015-06-24
    • 2011-08-06
    • 2014-06-02
    • 1970-01-01
    • 2011-02-14
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    相关资源
    最近更新 更多