Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Zend_Form: массив полей "имя - значение"

256
29 октября 2009 года
foxweb
1.0K / / 27.07.2005
Дано: форма, связанная с базой MySQL, где редактируются настройки некоего сайта.
Найти: решение, которое позволит добавлять на сайте META-теги в произвольном количестве (или хотя бы 10 фиксированных). В результате должна получиться такая SubForm:

http://img515.imageshack.us/img515/9045/multifield.png

В базе этот массив будет храниться как serialize(array(...)). Также надо разобраться, как unserialize() будет заполнять эту субформу.
Желательно для субформы сделать также декораторы.

Вот моё текущее решение:

Код:
<?php

class Form_EditOptionsDomain extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('editoptionsdomain')
        ->setDecorators(array(
                'FormElements',
                array('HtmlTag', array('tag' => 'table')),
                'Form',
            ));

        $id = new Zend_Form_Element_Hidden('id');

/*
        $meta = new Zend_Form_Element_Textarea('meta');
        $meta->setLabel('Meta-теги (HTML)')
        ->addFilter('StringTrim')
        ->setOptions(array(
                           'cols' => '50',
                           'rows' => '10'))
        ->setDecorators(array(
                'ViewHelper',
                'Errors',
                array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
                array('Label', array('tag' => 'td')),
                array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
            ));
*/

       
        $subForm = new Zend_Form_SubForm();
        $subForm->setLegend('META-теги:');

        $meta_param = new Zend_Form_Element_Text('param');
        $meta_param->setIsArray(true)
                    ->setLabel('Параметр')
                    ->addFilter('StringTrim');
        $subForm->addElement($meta_param);
       
        $meta_value = new Zend_Form_Element_Text('value');
        $meta_value->setIsArray(true)
                    ->setLabel('Значение')
                    ->addFilter('StringTrim');
        $subForm->addElement($meta_value);

        $this->addSubForm($subForm, 'element');


        $sitemap = new Zend_Form_Element_Textarea('sitemap');
        /* ......... */

        $robots = new Zend_Form_Element_Textarea('robots');
        /* ......... */

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setAttrib('id', 'submitbutton')
        ->setDecorators(array(
                'ViewHelper',
                array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class'  => 'element')),
                array(array('label' => 'HtmlTag'), array('tag' => 'td',  'placement' => 'prepend')),
                array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
            ));

        //$this->addSubForm($subForm, 'aa');
        $this->addElements(array($id, $sitemap, $robots, $submit));
    }
}


Выглядит это так:

http://img515.imageshack.us/img515/7821/multifield1.png


На ZF пишу не так давно, но половина проекта уже написана, осталось только эту штуку реализовать.
Читал темы http://stackoverflow.com/questions/405897/zendform-array-based-elements и на этом форуме, но это всё немного не то...
Главная проблема - сделать поля построчно "имя[n] - значение[n]" ну в общем декораторы правильные и какой-то цикл по n добавить надо.

Прошу прощения, две ночи сидел, не соображаю уже. Буду рад любым подсказкам, спасибо.
59K
15 марта 2010 года
Artem_Beloglazov
1 / / 15.03.2010
Думаю, всем понадобится:

 
Код:
$element = new Zend_Form_Element_...('someNameELement');
$element->setBelongsTo('parentElementName');
$subForm = new Zend_Form();
$subForm->setElementsBelongTo('parentElementName');
$subForm->addElement($element);
$form->addSubForm($subForm,'subFormName');


Код на основе вот этого поста:
http://stackoverflow.com/questions/405897/zend-form-array-based-elements
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог