0

異なるコントローラー/モジュールからレイアウトに複数のアクションを含めるにはどうすればよいですか?

私はこれを試しました:

<div id="login"><?php $x=new User_LoginController; $x->LoginAction() ?>

<div id="news"><?php $x=new Site_NewsController; $x->ShowAction() ?>
4

2 に答える 2

0

ビュー ヘルパー、具体的にはplaceholder()ビュー ヘルパーを実装する必要があります。

たとえば、アプリケーションの一部またはすべてのページでログイン フォームをレンダリングするには、レイアウトまたはビュー スクリプトでフォームのプレースホルダから始めます。

<!--layout.phtml-->
<div>
    <?php echo $this->layout()->login . "\n"?>
</div>

アクション ヘルパーを使用して、フォームを表示する準備をします。

<?php

/**
 * Prepares login form for display
 */
class My_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract
{

    /**
     * @return \Application_Form_Login
     */
    public function direct()
    {
        $form = new Application_Form_Login();
        //this is the url of the action this form will default too
        $form->setAction('/index/login');

        return $form;
    }
}

任意のコントローラーまたはフロント コントローラー プラグインから、プレースホルダーをセットアップできるようになりました。

public function preDispatch()
    {
        $this->_helper->layout()->login = $this->_helper->login();
    }

ログインフォームは、レイアウトとして使用するこのコントローラーからのアクションで表示されますlayout.phtml。プラグインを自分で発見できるようにします。

通常、プレースホルダーでヘルパーを使用することは、目的を達成するための推奨される方法です。ただし、どうしても別のビュー内にアクションを表示する必要がある場合は、アクション ビュー ヘルパーを使用できますが、パフォーマンスが低下する可能性があることに注意してください。

<div id="login">
     <?php echo $this->action('login', 'login', 'user'); ?>
</div>
于 2013-04-13T14:15:03.310 に答える