WordPress・WEB系の開発(プログラム)関係や技術情報ほか、技術情報全般を掲載

  • このエントリーをはてなブックマークに追加

CakePHP サイトマップXMLを動的に出力する方法(修正版)

先ほど、CakePHPでサイトマップXMLを出力する方法についての「CakePHP サイトマップXMLを動的に出力する方法」を投稿したが、XMLのレスポンスヘッダの指定方法に誤りがあり正しくXMLを出力出来ていなかったので、修正版を再度投稿したいと思います。

■[ app/SitemapsController.php ※追加]:

<?php
App::uses('AppController', 'Controller');

/**
 * サイトマップコントローラ
 * RequestHandlerCompornent クラスの respondAs メソッドを利用する
 */
class SitemapsController extends AppController
{
    public $uses = array('Item');
    public $components = array('RequestHandler');
    
    /**
     * サイトマップXML
     */
    public function index()
    {
        $options = array('order' => array('Item.id' => 'desc'));
        $this->set('items', $this->Item->find('all',$options));
        $this->layout = "xml/default";
        $this->RequestHandler->respondAs('text/xml');
    }

}

■[ app/Config/routes.php ※修正]:

// http://devilab.net/sitemap.xml にアクセスした際に、
// SitemapsコントローラのIndexアクションを呼び出すように
// ルーティング設定を追加する。
Router::connect('/sitemap.xml', array('controller' => 'sitemaps', 'action' => 'index'));

■[ app/View/Layouts/xml/default.ctp ※修正]:

// 既存のdefaultテンプレートを修正
//<?php
//echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
//echo $content_for_layout;
//?>
# 上記のように修正していたが、デフォルトに戻す。
<?php echo $this->fetch('content'); ?>

■[ app/View/Sitemaps/index.ctp ※追加]:

// あまりよくないが、動的ページのサイトマップ出力に加えて
// 静的ページの情報を手動で必要なページ分追加する。
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://devilab.net/</loc>
        <lastmod>2014-05-20T01:20:19+09:00</lastmod>
        <priority>1.00</priority>
        <changefreq>daily</changefreq>
    </url>
<?php foreach ($items as $d): ?>
    <url>
        <loc>http://devilab.net/test/<?=$d['Item']['id']?></loc>
        <lastmod><?php echo date(DATE_W3C, strtotime($d['Item']['created'])); ?></lastmod>
        <priority>0.20</priority>
        <changefreq>daily</changefreq>
    </url>
<?php endforeach; ?>
</urlset>

※環境情報:
サーバ・・・CORESERVER
CakePHP・・・CakePHP 2.4.6

関連記事

コメント

  1. この記事へのコメントはありません。

  1. 2014年 5月 21日
コメントは利用できません。

アーカイブ