Создание и продвижение сайтов, материалы веб-мастеру!
Способы заработка, свой бизнес в интернете!

Подписка на обновления сайта с помощью RSS

Подписка с помощью RSS
(читателей: 955)

Мой LiveJournal Мой Я.ру Мой FaceBook Мой Twitter

Читать в соц. сетях:

Куда вложить деньги - инвестирование в ПАММ-счетаПассивный доход за счёт инвестирования Куда сегодня можно вложить деньги

Инструкции и методы решения различных задач

Раздел "Инструкции и методы"

Основа данного раздела - это пошаговые описания решений определённых задач в сайтостроении (вёрстка, web-дизайн, программирование и прочее), примеры решения различных трудностей с помощью полезного софта, а также некоторые другие интересные материалы

Все инструкции и методы одним списком

Создаем форму в Zend Framwork

Создаем форму в Zend Framwork

На этом уроке мы с вами научимся распознавать дату рождения пользователя с помощью Zend_Form. Информация, которая вам пригодится находится здесь: http://codecaine.co.za/posts/compound-elements-with-zend-form

Попробуем создать нечто подобное, изображенное на этой картинке:

Элемент формы

Давайте напишем php-код и тем самым создадим части элемента и помощника вида:


<?php

class Application_Form_Details extends Zend_Form
{
public function init()
{
$this->addPrefixPath('App_Form', 'App/Form/');

// other elements before

$this->addElement('date', 'date_of_birth', array(
'label' => 'Date of birth:'
));

// other elements after

$this->addElement('submit', 'Go');
}
}

Нашу форму можете поместить в папку application/forms/Detail.php. Добавленный нами вызов addPrefixPath сообщает форме наши доп. элементы, находящиеся в папке library/App/Form.

А теперь “познакомимся” с файлом формы Date (library/App/Form/Element/Date.php).


class App_Form_Element_Date extends Zend_Form_Element_Xhtml
{
public $helper = 'formDate';

public function isValid ($value, $context = null)
{
if (is_array($value)) {
$value = $value['year'] . '-' .
$value['month'] . '-' .
$value['day'];

if($value == '--') {
$value = null;
}
}

return parent::isValid($value, $context);
}

public function getValue()
{
if(is_array($this->_value)) {
$value = $this->_value['year'] . '-' .
$this->_value['month'] . '-' .
$this->_value['day'];

if($value == '--') {
$value = null;
}
$this->setValue($value);
}

return parent::getValue();
}

}

На первый взгляд кажется, что здесь много непонятного. Давайте разберемся. Сначала мы определяем имя помощника для показа. Данный элемент содержит три “выборки”: день, месяц, год. Соответственно, для них нужно создать массивы.

Теперь нам нужен код для отображения нашего элемента. Код помещаем сюда library/App/View/Helpers/FormDate.php и добавляем соответствующую строку в application.ini:



autoloadernamespaces[] = "App_"
resources.view.helperPath.App_View_Helper = "App/View/Helper"

formDate (помощник вида) примет следующий вид:

<?php

class App_View_Helper_FormDate extends Zend_View_Helper_FormElement
{
public function formDate ($name, $value = null, $attribs = null)
{
$day = '';
$month = '';
$year = '';
if (is_array($value)) {
$day = $value['day'];
$month = $value['month'];
$year = $value['year'];
} elseif (strtotime($value)) {
list($year, $month, $day) = explode('-', date('Y-m-d', strtotime($value)));
}

$dayAttribs = isset($attribs['dayAttribs']) ? $attribs['dayAttribs'] : array();
$monthAttribs = isset($attribs['monthAttribs']) ? $attribs['monthAttribs'] : array();
$yearAttribs = isset($attribs['yearAttribs']) ? $attribs['yearAttribs'] : array();

$dayMultiOptions = array('' => '');
for ($i = 1; $i < 32; $i ++)
{
$index = str_pad($i, 2, '0', STR_PAD_LEFT);
$dayMultiOptions[$index] = str_pad($i, 2, '0', STR_PAD_LEFT);
}
$monthMultiOptions = array('' => '');
for ($i = 1; $i < 13; $i ++)
{
$index = str_pad($i, 2, '0', STR_PAD_LEFT);
$monthMultiOptions[$index] = date('F', mktime(null, null, null, $i, 01));
}

$startYear = date('Y');
if (isset($attribs['startYear'])) {
$startYear = $attribs['startYear'];
unset($attribs['startYear']);
}

$stopYear = $startYear + 10;
if (isset($attribs['stopYear'])) {
$stopYear = $attribs['stopYear'];
unset($attribs['stopYear']);
}

$yearMultiOptions = array('' => '');

if ($stopYear < $startYear) {
for ($i = $startYear; $i >= $stopYear; $i--) {
$yearMultiOptions[$i] = $i;
}
} else {
for ($i = $startYear; $i <= $stopYear; $i++) {
$yearMultiOptions[$i] = $i;
}
}

// возвращает 3 селекта, разделённых  
return
$this->view->formSelect(
$name . '[day]',
$day,
$dayAttribs,
$dayMultiOptions) . ' ' .
$this->view->formSelect(
$name . '[month]',
$month,
$monthAttribs,
$monthMultiOptions) . ' ' .
$this->view->formSelect(
$name . '[year]',
$year,
$yearAttribs,
$yearMultiOptions
);
}
}

Несмотря на большой размер, надеюсь, вы разобрались в коде formDate. На данном уроке нам пришлось поработать с массивами и настроить “выборки”. Полученный опыт поможет вам с легкостью создавать свои собственные формы.


Юридическая компания проводит регистрацию юридических лиц, реорганизацию фирм и прочее, в том числе оформление наследства и договора дарения, приватизацию жилых комнат и квартир.

Если Вам понравился данный материал, Вы можете подписаться на получение новых публикаций сайта с помощью RSS-ленты или E-mail-рассылки:

Подписка на обновления сайта с помощью RSS

Введите свой e-mail:

RSS-подписчиков: 955 | E-mail-подписчиков: 691


Спасибо Вам за добавление данной страницы в социальные сервисы:


Ещё инструкции и методы...


Задать вопрос или оставить комментарий

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

Чтобы получить подробный ответ на ряд возникших вопросов или если требуется детальная помощь в решении какой-либо задачи, можно воспользоваться данной формой. Ответы на вопросы, заданные через указанную форму, публикуются в разделе "Вопросы пользователей".


Отправить комментарий
Содержание этого поля является приватным и не предназначено к показу.
КАПЧА
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
3 + 5 =
Решите эту простую математическую задачу и введите результат. То есть для 1+3, введите 4.

Copyright © 2007-2012 Николай Мурашкин | Хостинг сайта

Копирование, а также любое другое подобное использование материалов без ссылки на сайт NikMurashkin.RU строго запрещено!

тИЦ и Page Rank сайта