8

Zend_Layout を使用して動的なサイトを生成したいと考えています。

私のレイアウト (/application/layouts/scripts/layout.phtml) には、次の行が含まれています。

...        
<body>

        <?php echo $this->render('header.phtml') ?>

        <div id="content"><?php echo $this->layout()->content ?></div>

        <?php echo $this->render('footer.phtml') ?>

    </body>
...

インデックス コントローラーのインデックス アクションを参照すると、Zend は $this->layout()->content 内のインデックス ビュー (application/views/scripts/index/index.phtml) を自動的にレンダリングします。

ここで、レイアウト内のさまざまなコントローラー アクションにビューをレンダリングしたいと考えています。そのため、ログインフォームを表示するアクションログインを使用して、新しいコントローラー認証を生成します。

レイアウトを次のように変更します。

  ...        
    <body>

            <?php echo $this->render('header.phtml') ?>

            <div id="content"><?php echo $this->layout()->content ?></div>
            <div id="login"><?php echo $this->layout()->login ?></div>

            <?php echo $this->render('footer.phtml') ?>

        </body>
    ...

インデックス/インデックスを参照するとき、このアクションで、zend が $this->layout()->login 内で認証/ログイン ビューをレンダリングし、たとえば、$this->layout()- 内でニュース/リストをレンダリングするように定義したいと考えています。 >内容。

index/index は一種のページ レイアウトではなく、auth/login と news/list は一種のウィジェットです

これを行う方法?

4

4 に答える 4

8

最初のアドバイスは、アクション ビュー ヘルパーを絶対に避けることです。ZF 2.0 では削除される可能性があります。( ZF-5840 ) ( actionstack が悪である理由)

これは私が尋ねた質問に関連しています- そして bittarman の答えはかなり役に立ちます。そのようなものを実装する最善の方法は、「ログイン」領域を生成できるビュー ヘルパーを用意することです。 My_View_Helper_Login例えば。その後、レイアウト$this->login()で を呼び出すことができ、ビュー スクリプトで も呼び出すことができますuser/login。コントローラーから他のコントローラー/アクションにリクエストを転送するだけ index/indexでコンテンツをレンダリングする限り。news/list$this->_forward('list', 'news');

于 2009-08-21T22:55:35.280 に答える
3

また、を使用しないことをお勧めしaction view helperます。コントローラーに大量のロジックがない限り、ビューを部分的にレンダリングするためだけに、別のコントローラーに別のリクエストをディスパッチする必要はおそらくありません。

header.phtmland で行ったのと同じように、ビューパーシャルを使用することをお勧めしますfooter.phtml

<body>

        <?php echo $this->render('header.phtml') ?>

        <div id="content"><?php echo $this->layout()->content ?></div>

        <div id="login"><?php echo $this->render('auth/login.phtml') ?></div>

        <?php echo $this->render('footer.phtml') ?>

</body>

ビューauth/login.phtmlスクリプトは次のようになります。

<div id="login_box">
    <?php if (empty($this->user)): ?>
        Please log in
    <?php else: ?>
        Hello <?php echo $this->user->name ?>
    <?php endif; ?>
</div>

コントローラーのある時点でビュー変数を設定している限り、render view helperビュー内 (または必要に応じてコントローラーから) を呼び出すことができます。

#index controller
public function indexAction()
{
    $this->view->user = Model_User::getUserFromSession();
}
于 2011-07-15T14:55:15.717 に答える
0

私自身の問題に対する答えを探していたときに、このページにたどり着きました。それは、私のレイアウトが複数回呼び出されたというものでした。これは、複数の理由により発生しました。

1) 悪い ajax 呼び出しを行いました。/module/help の代わりに /help がありました。

2) アクション exampleAction() を呼び出しました。

$this->_helper->layout->disableLayout();

レイアウトが再度レンダリングされないようにします。

3) リダイレクトを行いました。転送またはルートを使用してみてください。

于 2012-02-28T10:09:23.283 に答える