0

iamが正しい方法でそれを行っているかどうかわからない。私の目標は、レイアウトのヘッダーセクションにログインまたはナビゲーションを表示することです。

私の実装は次のようになります(ロジックなし):

2レイアウトスクリプト:

  • login.phtml
  • Navigation.phtml

FrontControllerプラグイン:

class Plugin_Header extends Zend_Controller_Plugin_Abstract {

        /**
         * PreDispatch
         *
         * Decides wich kind of navigation is displayed in header section
         * for logged in users the menu, for guests the login box and
         * link to registration form.
         *
         * @return void
         */
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            $layout = Zend_Layout::getMvcInstance();
            $layout->topNavigation = $layout->render('login'); // or navigation 
        } 
}

正常に動作しますが、これが最善の方法ですか?;)

4

2 に答える 2

1

機能をビューヘルパーまたは部分的に配置することをお勧めします。あなたはそれが曲げられるべきではなかった方法でレイアウトを曲げます、私は推測します:)

私はこれを行います:

  • ナビゲーションとログインの2つの部分があります
  • ビューヘルパーを作成しますMy_View_Helper_RenderHeader()1つのパラメーターを取得します-boolean $ isLoggedIn
  • $ isLoggedIn = trueのブール値に基づいてナビゲーションをレンダリングし、それ以外の場合は部分的にログインします。
  • このコンポーネントをより再利用可能にするために、ある種のセットアップを追加することもできます(たとえば、パーシャルの名前やパスが異なる場合)。

他の良い点は、「toString」メソッドを実装すると、ブール値をヘルパー内に格納できることです。たとえば、何らかの理由でブール値を設定します。index.phtmlビューで、を使用してレイアウトの適切な場所にレンダリングしますecho $this->renderHeader()。すごいですね。よくわからない場合は、head *(スクリプト、リンク、...)ヘルパーコードを確認してください。

于 2009-10-19T20:24:52.207 に答える
0

私はさまざまなレイアウトを使用しています:

anonymous.phtml
authenticated.phtml

そして、これをフロントコントローラープラグインのpreDispatch()メソッドに入れます。

$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
    $layout = 'authenticated';
} else {
    $layout = 'anonymous';
}


// Bootstrap layouts
Zend_Layout::startMvc(array(
'layoutPath' => APPLICATION_PATH . '/layouts/scripts',
'layout' => $layout
));

さらに、ここ()でAjaxリクエストをチェックし$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'、3番目の「ajax」(空)レイアウトを用意することも便利です。

于 2009-10-19T18:35:18.840 に答える