2

初心者の Zend Framework 開発者が、Zend ルーティングの問題に対する簡単な解決策を見つけようとしています。あなたのプロの一人が手を貸してくれると確信しています。

75% の静的 HTML ページ コンテンツといくつかのコントローラーを含む Web サイト (Zend_Navigation を使用して Zend Framework で構築) があります。トップレベルのナビゲーションは Zend_Navigation に組み込まれており、パーシャルをループします。

私の仕事のおかげで、私はこれらの方針に沿って多くのサイト (多くの静的ページを含む) を構築しているので、これを正しくしたいと考えています。これらの静的ページ (多数あります) ごとにコントローラーとアクションを設定したくありません。また、Zend_Controller_Router_Routeすべての静的コンテンツを自動的にルーティングするソリューションを作成したいと考えていStaticControllerました。次のようなディレクトリからの URL のコントローラー/アクションのペアに基づいて、.phtml ページをインクルードまたはレンダリングします。/layouts/staticpages

SEO やさまざまな理由から、これらの静的ページの URL でコントローラーのペアリングを次のように表示したくありませ/static/page/page1/section/pageadvantages/someadvantage

問題は次のとおりです。Zend_Controller_Router_Route正しいルートを設定すると、使用しても機能しますが、Zend Navigation で何かひどいことが起こります... Zend_Navigaion は、オンザフライのコントローラー/アクションの切り替えでうまく機能しないためだと思います。

コード例:

$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route('advantages/:page/*',
  array('controller' => 'static', 'action' => 'display', 'mode' => 'advantages',
    'page' => 'index'));
$router->addRoute('advantages', $route);

これは、「利点」セクションのページを切り替えるジョブを十分に処理しますが、Zend_Navigation の自動コントローラー/アクション書き込みと「アクティブな」ノードの強調表示は、コントローラーが「静的」でアクションであると見なされるため、すべて台無しになります。 「ディスプレイ」です。

Zend_Navigation は基本的に と互換性がありZend_Controller_Router_Routeませんか? この単一の静的ページコントローラーを実行したり、静的コンテンツを全面的に処理したりするより良い方法はありますか?

4

1 に答える 1

0

すべての静的ページに対して 1 つのコントローラー/アクションを使用しているため、表示する前に Zend ナビゲーションをカスタマイズする必要があります。

Zend Documentation の例 4 を確認してください。

// the following route is added to the ZF router
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// a page is created with a 'route' option
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // required for isActive(), see note above
    'controller' => 'article', // required for isActive(), see note above
    'action'     => 'view',    // required for isActive(), see note above
    'params'     => array('id' => 42)
));

// returns: /a/42
$page->getHref();
于 2011-12-23T17:17:37.890 に答える