Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 11.06.2011, 21:20   #1
Заблокирован
 Разведчик
Аватар для Я убью:Frost:DD
 
Я убью:Frost:DD на правильном пути
Регистрация: 06.06.2011
Сообщений: 20
Популярность: 74
Сказал(а) спасибо: 65
Поблагодарили 32 раз(а) в 22 сообщениях
 
Thumbs up Форма в вашем layout

Часто возникает вопрос о том, как расположить одну форму на всех страницах вашего Zend приложения. Допустим я хочу расположить форму подписки в файле layout.phtml для того, чтобы она располагалась на каждой странице. Команда layout->content() работает с действиями и контроллерами... Как же реализовать то, что нам нужно?

Одно из решений данной задачи - это создание помощника действия.

Начнём с настройки ZF приложения:1 $ zf create project layoutform
2 $ cd layoutform
3 $ zf enable layout


Очистите файл application/views/scripts/index/index.phtml и вставьте что-то вроде этого:

application/views/scripts/index/index.phtml:1 <p>This is the home page</p>


Теперь можем начинать.
Форма

Создадим новую форму:1 $ zf create form signup


А так же поля, которые нам необходимы:

application/forms/Signup.php:01 class Application_Form_Signup extends Zend_Form
02 {
03 public $processed = false;
04
05 public function init()
06 {
07 $this->addElement('text', 'name', array(
08 'label' => 'Name',
09 'required' => true,
10 'validators' => array(
11 array('StringLength', false, array('max'=>75)),
12 ),
13 ));
14 $this->addElement('text', 'email', array(
15 'label' => 'Email',
16 'required' => true,
17 'validators' => array(
18 array('StringLength', false, array('max'=>150)),
19 'EmailAddress',
20 ),
21 ));
22 $this->addElement('submit', 'go', array(
23 'label' => 'Sign up',
24 ));
25 }
26 }


Форма у нас есть. Осталось её вывести.
Помощник действия

Мы используем помощник действия для того чтобы инициализировать форму.

Добавьте строку в application.ini:

application/configs/application.ini:1 resources.frontController.actionhelperpaths.Applic ation_Controller_Helper = APPLICATION_PATH "/controllers/helpers"


Теперь система знает в каком месте искать помощники действий, так что можем идти дальше:

application/Bootstrap.php:01 <?php
02
03 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
04 {
05 protected function _initMyActionHelpers()
06 {
07 $this->bootstrap('frontController');
08 $signup = Zend_Controller_Action_HelperBroker::getStaticHelp er('Signup');
09 Zend_Controller_Action_HelperBroker::addHelper($si gnup);
10 }
11 }


Помощник действия будет выглядеть следующим образом:

application/controllers/helpers/Signup.php:01 <?php
02
03 class Application_Controller_Helper_Signup extends Zend_Controller_Action_Helper_Abstract
04 {
05 public function preDispatch()
06 {
07 $view = $this->getActionController()->view;
08 $form = new Application_Form_Signup();
09
10 $request = $this->getActionController()->getRequest();
11 if($request->isPost() && $request->getPost('submitsignup')) {
12 if($form->isValid($request->getPost())) {
13 $data = $form->getValues();
14 // process data
15
16 $form->processed = true;
17 }
18 }
19
20 $view->signupForm = $form;
21 }
22 }


Тут ничего особенного нет. Просто обратите внимание на класс родитель.
Помощник вида

Для того чтобы отобразить форму, создадим помощник вида, который будет выглядеть следующим образом:

application/views/helpers/SignupForm.php:01 <?php
02
03 class Zend_View_Helper_SignupForm extends Zend_View_Helper_Abstract
04 {
05 public function signupForm(Application_Form_Signup $form)
06 {
07 $html = '<h2>Sign up for our newsletter</h2>';
08 if($form->processed) {
09 $html .= '<p>Thank you for signing up</p>';
10 } else {
11 $html .= $form->render();
12 }
13 return $html;
14 }
15 }


Всё, что нам осталось, так это сделать вывод формы в layout.phtml:

application/layouts/scripts/layout.phtml:01 <?php
02 $this->headMeta()->prependHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
03 $this->headTitle('Layout form test');
04 echo $this->doctype(); ?>
05 <html>
06 <head>
07 <?php echo $this->headMeta()->setIndent(4); ?>
08 <?php echo $this->headTitle()->setIndent(4); ?>
09 </head>
10 <body>
11 <div id="maincontent">
12 <?php echo $this->layout()->content; ?>
13 </div>
14 <div id="secondary">
15 <?php echo $this->signupForm($this->signupForm); ?>
16 </div>
17 </body>
18 </html>
  Ответить с цитированием
Пользователь сказал cпасибо:
ololoshnik212 (11.06.2011)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Форма в данже yarikko999Yar Баги и читы Perfect World 45 15.04.2011 04:01
[Баг] форма птице на кельданасе maxxx Читы, баги и статьи по WoW 0 23.11.2009 07:43

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 18:19.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net