我需要使用CakePHP自动生成站点地图。我按照本教程: http://designaeon.com/blog/2012/07/cakephp-xml-sitemap-generation/ 一步一步,但我的http://mysite123.com/sitemap.xml只显示以下错误:
此页面包含以下错误:
第6行第2行的错误:仅在文档开头允许XML声明 下面是第一个错误的页面呈现。
我的代码如下所示:
控制器/ SitemapsController.php:
<?php
class SitemapsController extends AppController{
var $name = 'Sitemaps';
var $uses = array('Video');
function index(){
$this->set('videos', $this->Video->find('all'));
Configure::write ('debug', 0);
}
}
?>
查看/站点地图/ XML / index.ctp:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php foreach ($videos as $vid): ?>
<url>
<loc><?php echo Router::url('/',true); ?>post/
<?php echo $vid['Video']['id'];?></loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<?php endforeach; ?>
</urlset>
查看/布局/ XML / default.thtml中:
<?php header('Content-type: text/xml'); ?>
<?php echo $content_for_layout; ?>
routes.php :
Router::parseExtensions('xml');
Router::connect('/sitemap', array('controller' => 'sitemaps', 'action' => 'index'));
你能帮我吗?
答案 0 :(得分:3)
我建议将其放在Controller的操作中,而不是在布局中使用PHP设置标头值:
$this->RequestHandler->respondAs('xml');
这是真正的'蛋糕'方式,并且应该解决你的问题(可能是空格或在标题之前输出的东西)。
当然,您需要使用RequestHandler
组件,因此如果您还没有它,请将其放入控制器中:
var $components = array('RequestHandler');