2013-04-11 16 views
0

Как я могу выполнить несколько действий в своем макете с разных контроллеров/модулей?Zend Framework: несколько модулей в макете

Я попытался это:

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

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

Это не очень хорошая идея. Предположительно, ваше действие для входа показывает форму входа? Поэтому вы должны просто вывести эту форму (возможно, через помощника) в свой макет. –

+0

В каждом представлении у меня есть код ajax, а следующий - форма. Мне нужно на сайте: Новости, Логин/Последние комментарии, Messagess. У меня нет другой идеи. – Jeremy

ответ

0

Вы хотите реализовать view helpers, в частности, placeholder() вид помощника.

Например чтобы сделать форму входа в любой или все страницы вашего приложения, мы начинаем с placholder для формы в нашей макет или скрипт вида:

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

Я использую action helper подготовить форму для отображения:

<?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, как это расположение. Я дам вам открыть плагины самостоятельно.

Использование помощников с заполнителями обычно является предпочтительным способом выполнения того, что вы хотите. Однако, если вы абсолютно должны отображать действие внутри другого представления, вы можете использовать Action view helper, просто имейте в виду, что производительность может пострадать.

<div id="login"> 
    <?php echo $this->action('login', 'login', 'user'); ?> 
</div> 
0

Я не понял, что именно вы хотите?

То, что я догадалась это может быть, вы хотите, чтобы вызвать эту функцию (действие) от макета, чтобы показать, что

возвращения оттуда в макете ......

+0

Мне нужно визуализировать действие - контроллер - модуль в макете. Когда я пытаюсь этот код, у меня есть: Fatal error: Class 'User_LoginController' не найден. И у меня нет идеи, как я могу получить представление/действие от другого контроллера в другом модуле. Извините за мой английский. – Jeremy

+0

Это может помочь ...... Для рендеринга мы часто используем якорный тег, как это ...

+0

мне нужно 4 модулей на одном сайте .. Новости, Логин/чат и т.д. Нет ссылок , – Jeremy

Смежные вопросы