1

私は現在、同じコントローラーにアクセスするための複数の方法があるアプリケーションを構築しています。

例えば:

プレゼンター->パラメーターuser_typeを使用したアクセスコントローラーユーザー/インデックス:プレゼンター
参加者->パラメータuser_typeを使用したアクセスコントローラユーザー/インデックス:参加者

ナビゲーション.iniで、両方のパスを定義しました(読みやすくするために、ラベル、モジュール、およびACLを削除しました)。

dashboard.pages.presenter.controller = "user"
dashboard.pages.presenter.action = "index"

dashboard.pages.presenter.pages.create.controller = "user"
dashboard.pages.presenter.pages.create.action = "create"

dashboard.pages.presenter.pages.edit.controller = "user"
dashboard.pages.presenter.pages.edit.action = "edit" 

dashboard.pages.attendee.controller = "user"
dashboard.pages.attendee.action = "index"

dashboard.pages.attendee.pages.create.controller = "user"
dashboard.pages.attendee.pages.create.action = "create"

dashboard.pages.attendee.pages.edit.controller = "user"
dashboard.pages.attendee.pages.edit.action = "edit"

私が抱えている問題は、出席者セクションに行くと、表示されるブレッドクラムがプレゼンター用のものであるということです。意図したとおりに機能することは理解していますが、URLパラメータに基づいて適切な「ノード」をアクティブに設定する方法を探していますuser_type

これを使用して:

$page = $this->view->navigation()->findOneByLabel($label);
if ($page) {
    $page->setActive();
}

Zend_Navigationページをアクティブに設定することはできましたが、状態を「なし」に「リセット」する方法を探しています。

4

1 に答える 1

1

私があなたを正しく理解している限り、これをあなたのブートストラップに入れて、私があなたのために書いたコントローラープラグインをコピーしてください。ビューにナビゲーションが設定されていない場合にどうなるかはまだテストしていません。それをもっとよくテストしてください。ちなみに、異なるルートを使用して同じページを持つことは、seoの観点からは良くありません。

ブートストラップ:

protected function _initStackoverflow()
{
    $this->bootstrap('frontController');
    $frontController = $this->getResource( 'frontController' );
    $frontController->registerPlugin( new Altergear_Controller_Plugin_Stackoverflow() );
}

コントローラプラグイン:

<?php
class Altergear_Controller_Plugin_Stackoverflow extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch( Zend_Controller_Request_Abstract $request )
    {
        if( ( $activeLabel = $this->_request->getUserParam('active') ) !== null ){
            $view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->bootstrap('view')->getResource('view'); 
            foreach( $view->navigation()->getPages() as $page )
            {
                $page->setActive(  strtolower( $page->getLabel() ) === strtolower( $activeLabel ) );
            }
        }
    }
}
于 2011-11-13T21:51:10.217 に答える