0

更新何が起こっているのかをもう少し明確にするために、私のページにはドキュメントツリーが表示されません(これを見たのは初めてです)。xml 要素/タグを含まない xml コンテンツの 1 行だけです。

このチュートリアルに従って、cakephp で動的サイトマップを作成しました。このチュートリアルは 2008 年に書かれたもので、私 (継承済み) は Cakephp 1.3 アプリで作業しています (このチュートリアルは 1.3 でも有効だと思いますか? 2009 年と 2010 年の同じコードをほとんど使用している他のアプリを見てきました。 )私のクエリのどれも何も生成していないという悲惨な事実は別として、mysite.com/sitemap.xml に移動したときの出力は次のとおりです。

http://www.site.com/ daily 1.0 http://www.site.com/gulf-coast-finest/3 2012-10-01T19:00:00Z weekly 0.9 http://www.site.com/gulf-coast-finest/4 2012-10-01T19:00:00Z weekly 0.9

「ソースを表示」すると、次のように、正しくフォーマットされた xml が表示されます (重要なデータが欠落しているという例外があります)。

 <?xml version="1.0" encoding="UTF-8" ?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> 
    <loc>http://www.site.com/</loc> 
    <changefreq>daily</changefreq> 
    <priority>1.0</priority> 
</url> 
 <!-- posts-->  

<url> 
    <loc>http://www.site.com/gulf-coast-finest/3</loc> 
    <lastmod>2012-10-01T19:00:00Z</lastmod> 
    <changefreq>weekly</changefreq>
    <priority>0.9</priority> 
</url>

<url> 
    <loc>http://www.site.com/gulf-coast-finest/4</loc> 
    <lastmod>2012-10-01T19:00:00Z</lastmod> 
    <changefreq>weekly</changefreq>
    <priority>0.9</priority> 
</url>
</urlset>  
.... 

ソースを表示しない限り、空白や xml タグがないのはなぜだろうと頭を悩ませています。私のルートファイルからの関連コードは次のとおりです。

Router::parseExtensions('xml'); 
Router::connect('/sitemap', array('controller' => 'sitemaps', 'action' => 'index')); 

私の app/views/layouts/xml/default.ctp ファイル:

<?php
header("content-type: text/xml");
echo $this->Xml->header();
echo $content_for_layout;
?> 

私の app/views/sitemaps/xml/index.ctp ファイル:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> 
    <loc><?php echo Router::url('/',true); ?></loc> 
    <changefreq>daily</changefreq> 
    <priority>1.0</priority> 
</url> 
 <!-- posts-->  
 <?php foreach ($static as $s):?> 
<url> 
    <loc><?php echo Router::url('/gulf-coast-finest/'.$s['Article']['Article.link_txt'].'/'.$s['Article']['id'],true); ?></loc> 
    <lastmod><?php echo $time->toAtom('2012-10-01 19:00:00'); ?></lastmod> 
    <changefreq>weekly</changefreq>
    <priority>0.9</priority> 
</url>
<?php endforeach; ?>
</urlset> 

そして、私の明らかに完成しためちゃくちゃなコントローラー:

<?php 
class SitemapsController extends AppController{ 

var $name = 'Sitemaps'; 
var $uses = array('Category', 'Listing', 'Article', 'Location'); 
var $helpers = array('Time'); 
var $components = array('RequestHandler'); 
function beforeFilter() {
    //debug logs will destroy xml format, make sure were not in drbug mode 
Configure::write ('debug', 0); 

}
function index (){  
    $this->RequestHandler->respondAs('xml'); 
    $this->viewPath .= '/xml';
     $this->layoutPath = 'xml';
    $a=$this->Article->find('all', array('fields'=>array('Article.id', 'Article.link_txt')));
    $this->set('static', $a);


}
} 
?> 

非常に重要な欠落データの問題は、おそらく別の質問に適しています。XML ファイルが 1 行であり、人間が認識できるタグがないことは、私には問題ありません。なぜこのようなことをしているのか知りたい

4

1 に答える 1

0

私は同じ問題を抱えており、解決策を見つけたと思います。HTML / XML コードの前にスペースがあると思います

<-- space here--><?xml version="1.0" encoding="UTF-8" ?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

PHP 終了タグの後にスペースがある場合は、sitemap_controller.php で検索を試みることができます

?>__space here__
于 2013-06-18T17:40:14.360 に答える