0

現在、Zend Framework 1.12 を使用してプロジェクト管理システムを作成していますが、そのZend_Navigation::Sitemap()方法に問題がありました。

SitemapController内部にwithという名前のコントローラーがありindexAction()、レイアウトを無効にします。次に、/views/scripts/sitemap/index.phtmlスクリプトでサイトマップをレンダリングします。

問題は、次のことです。

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

/sitemapURIで取得できるのはそれだけです。私navigation.xmlが満たされていても。

ここにすべての私のコードがあります:

index.phtml

<?php
$this->navigation()->sitemap()->setFormatOutput(true)
                              ->setUseSchemaValidation(false)
                              ->setUseXmlDeclaration(true)
                              ->setUseSitemapValidators(true);
echo $this->navigation()->sitemap()->render($this->navigation);
?>

SitemapController.php

<?php
class SitemapController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        $this->view->layout()->disableLayout();
    }
}

Bootstrap.php

/**
* @return Zend_Navigation
*/
protected function _initNavigation()
{
    $view = $this->bootstrap('layout')->getResource('layout')->getView();
    $config = new Zend_Config_Xml(APPLICATION_PATH.'/configs/navigation.xml', 'nav');
    $navigation = new Zend_Navigation($config);
    $view->navigation($navigation);
}

ナビゲーション.xml

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
    <nav>
        <home>
            <label>Tableau de Bord</label>
            <controller>index</controller>
            <action>index</action>
        </home>
        <project>
            <label>Projets</label>
            <controller>project</controller>
            <action>index</action>
        </project>
        <tasks>
            <label>Tâches</label>
            <controller>tasks</controller>
            <action>index</action>
        </tasks>
        <messages>
            <label>Messages</label>
            <controller>messages</controller>
            <action>index</action>
        </messages>
    </nav>
</configdata>

サイトマップが想定どおりにレンダリングされない理由を誰か教えてもらえますか?

4

2 に答える 2

4

Zend_Navigation でエンコーディングを変更する方法はありますか?

おそらく、メニュー ツリーを構築している間、または、navigation.xml からエンコーディングを確認することをお勧めします。

Zend_Navigation のドキュメントから

デフォルトで使用される UTF-8 エンコーディングに注意してください

デフォルトでは、Zend Framework はデフォルトのエンコーディングとして UTF-8 を使用し、この場合に特有の Zend\View も同様です。文字エンコーディングは、 setEncoding() メソッド (または encoding インスタンス化パラメーター) を使用して、ビュー オブジェクト自体に異なる方法で設定できます。ただし、Zend\View\Interface はエンコーディング用のアクセサーを定義していないため、Dojo ビュー ヘルパーでカスタム ビュー実装を使用している場合、ビュー ヘルパーが内部で使用する getEncoding() メソッドがない可能性があります。エンコードする文字セットを決定するため。

このような状況で UTF-8 を使用したくない場合は、カスタム ビューの実装で getEncoding() メソッドを実装する必要があります。

ISO-8859-1 と JSON を扱っていると、出力が途切れてしまうことが時々あります。それはあなたの言語に何か問題があるのか​​もしれません。

アップデート

これは、私が使用しているコードですsitemapAction:

/**
 * Shows the site map.
 *
 * @return string
 */
public function sitemapAction()
{
    $this->view->layout()->disableLayout();
    $config = new Zend_Config_Xml(APPLICATION_PATH . DS . 'configs' . DS . 'navigation.xml', 'mainnav');
    $container = new Zend_Navigation($config);
    $this->view->navigation($container);
    $this->_helper->viewRenderer->setNoRender(true);
    $response = $this->getResponse();
    $response->setHeader('Content-Type', 'text/xml');
    echo $this->view->navigation()->sitemap();
}
于 2012-10-17T05:13:21.267 に答える
1

@Saul Martínez の回答に基づいて、サイトマップを生成するコードを作成しました。XML ファイルは使用していませんが、データベースからリンクを設定できます。リンクは次のとおりです。

Zend_Navigation は配列で上書きしますか?

于 2013-04-17T07:04:24.477 に答える