Zend_Navigationでsitemap.xmlを作る


サイト構成は以下の通り(URL)

/
/sitemap.xml
/grid/


configs/navigation.xml
<route>default</route>を設定しないと
Zend_NavigationはURLの生成にsitemap用のRouteを使用してしまう。
参考:http://framework.zend.com/issues/browse/ZF-6486
参考:http://zendframework.com/issues/browse/ZF-6733
参考:http://forums.zend.com/viewtopic.php?f=69&t=7625&start=0

<config>
  <navigation>
    <index>
      <action>index</action>
      <controller>index</controller>
      <label>Top</label>
      <route>default</route>

      <pages>
        <grid>
          <action>index</action>
          <controller>grid</controller>
          <label>jqGrid</label>
          <route>default</route>
        </grid>
        <sitemap>
          <label>Sitemap</label>
          <action>sitemap</action>
          <controller>index</controller>
          <route>sitemap</route>
        </sitemap>
      </pages>
    </index>
  </navigation>
</config>

Bootstrap.phpにZend_Navigationを設定

    public function _initNavigation()
    {
        $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'navigation');
        $navigation = new Zend_Navigation($config);
        Zend_Registry::set('Zend_Navigation', $navigation);
    }

IndexControllerにindexActionを設定
(めんどうでなければSitemapControllerを作ってもよい)

    public function sitemapAction()
    {
        this->_helper->viewRenderer->setNoRender(true);
        echo $this->view->navigation()->sitemap();
    }

Application.iniに/sitemap.xmlでindex/sitemapにアクセスするよう設定

resources.router.routes.sitemap.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.sitemap.route = "sitemap.xml"
resources.router.routes.sitemap.defaults.controller = "index"
resources.router.routes.sitemap.defaults.action = "sitemap"