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

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

CakePHP サイトマップXMLを動的に出力する方法

※XMLのレスポンスヘッダの指定に誤りがあり正しく動いていないため修正版を参照すること。※
CakePHP サイトマップXMLを動的に出力する方法(修正版)

検索エンジンに運営サイトのページ情報を正しく読み取ってもらうためサイトマップXMLが必要になる。
CakePHPでサイトマップXML(sitemap.xml)を出力するには下記のようにファイルの追加・修正を行う。

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

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

/**
 * サイトマップコントローラ
 */
class SitemapsController extends AppController
{
    public $uses = array('Item');
    
    /**
     * サイトマップXML
     */
    public function index()
    {
        $options = array('order' => array('Item.id' => 'desc'));
        $this->set('items', $this->Item->find('all',$options));
        $this->layout = "xml/default";
    }

}

■[ 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;
?>

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

// あまりよくないが、動的ページのサイトマップ出力に加えて
// 静的ページの情報を手動で必要なページ分追加する。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <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

【PR】ジョジョ風な仕上がり!超極うま!玉華堂の極プリン。お取り寄せプリン

関連記事

コメント

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

コメントは利用できません。

アーカイブ