Автор Тема: статья: Декораторы Zend_Form  (Прочитано 11346 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн san

  • Администратор
  • Герой
  • *****
  • Сообщений: 2158
  • Карма: 96
  • zf infected
    • Развитие личности от Александра Махомета
статья: Декораторы Zend_Form
« : Октябрь 31, 2008, 22:10:32 »
http://zendframework.ru/articles/decorators-with-zend-form

Перевод статьи Decorators with Zend_Form, автором которой является Matthew Weier O'Phinney

Перевел Александр Стешенко aka Lcf

в теме предлагаю обсудить перевод, может у кого возникнут замечания, пожелания и тд.

Оффлайн Zh0rzh

  • Team
  • Герой
  • ***
  • Сообщений: 1312
  • Карма: 80
Re: статья: Декораторы Zend_Form
« Ответ #1 : Ноябрь 03, 2008, 17:38:17 »
Саше (lcf), огромный респект.
За 3 дня осилил перевод такой статьи с отличным форматированием.

В целом перевод очень хороший. Я придерусь к мелочам, которые заметил я:
1.
Цитировать
Of course, the problem with generating form markup is that there is no standard way to do it.
и перевод
Цитировать
Конечно, главная проблема генерации разметки форм - отсутствие стандартного способа, чтобы это делать
" ... - отсутствие стандартного способа, чтобы это делать". Звучит как то неказисто.
Может быть просто " ... - отсутствие для этого единого стандарта" ?

2.
Цитировать
С такими ориентирами, решение нашлось само собой: использование шаблона проектирования "Декоратор". Этот паттерн традиционно используется

Здесь сначала используется термин "шаблон проектирования", и тут же "паттерн".
Я думаю что в обоих местах нужен употребить один из этих терминов. Лучше конечно "шаблон проектирования"

3.
Цитировать
... формы добавить какую-то новую верстку до, после ...
Может быть лучше "какую-нибудь"?

4. Лично мне режет глаз слово "контент".

5.
Цитировать
Чтобы начать разобираться с настройкой ...
Опечатка.

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 153
    • Homepage
Re: статья: Декораторы Zend_Form
« Ответ #2 : Ноябрь 03, 2008, 19:54:29 »
В целом перевод очень хороший. Я придерусь к мелочам, которые заметил я:
1.
Цитировать
Of course, the problem with generating form markup is that there is no standard way to do it.
и перевод
Цитировать
Конечно, главная проблема генерации разметки форм - отсутствие стандартного способа, чтобы это делать
" ... - отсутствие стандартного способа, чтобы это делать". Звучит как то неказисто.
Может быть просто " ... - отсутствие для этого единого стандарта" ?
Да, этот момент при перечитывании несколько раз преобразовывал пытаясь олитературить, так и не вышло нормально. Про единый стандарт и что-то в этом духе думал... может и стоит что нить в этом духе вставить.

2.
Цитировать
С такими ориентирами, решение нашлось само собой: использование шаблона проектирования "Декоратор". Этот паттерн традиционно используется

Здесь сначала используется термин "шаблон проектирования", и тут же "паттерн".
Я думаю что в обоих местах нужен употребить один из этих терминов. Лучше конечно "шаблон проектирования"
Старался избегать тавтологий...

3.
Цитировать
... формы добавить какую-то новую верстку до, после ...
Может быть лучше "какую-нибудь"?
Пожалуй и правда немного по-лучше звучит...
4. Лично мне режет глаз слово "контент".
да, и такая мысль у меня тоже была, но как-то вот что-то в итоге оставил, наверно не подобрал смыслового аналога на нашем, "вёрскта" не совсем полностью соотвествует... имхо.
5.
Цитировать
Чтобы начать разобираться с настройкой ...
Опечатка.

Спасибо большое, что прочитал! да еще и ошибки высмотрел, наверно времени убилось как на перевод =D

Оффлайн Zh0rzh

  • Team
  • Герой
  • ***
  • Сообщений: 1312
  • Карма: 80
Re: статья: Декораторы Zend_Form
« Ответ #3 : Ноябрь 03, 2008, 20:14:08 »
Цитировать
Цитата: Zh0rzh от Сегодня в 17:38:17
2.
Цитировать
С такими ориентирами, решение нашлось само собой: использование шаблона проектирования "Декоратор". Этот паттерн традиционно используется

Здесь сначала используется термин "шаблон проектирования", и тут же "паттерн".
Я думаю что в обоих местах нужен употребить один из этих терминов. Лучше конечно "шаблон проектирования"
Старался избегать тавтологий...
Можно как в оригинале
Цитировать
A decorator traditionally is used ...
сделать "Декоратор традиционно используется ..."

Оффлайн san

  • Администратор
  • Герой
  • *****
  • Сообщений: 2158
  • Карма: 96
  • zf infected
    • Развитие личности от Александра Махомета
Re: статья: Декораторы Zend_Form
« Ответ #4 : Ноябрь 03, 2008, 21:01:22 »
да, с понятием "контента" траблы, и "верстка" не очень, и "содержимое" не блеск...

в принципе чаще всего можно было бы употреблять выражение хтмл код, но в целом это большой роли не играет

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 153
    • Homepage
Re: статья: Декораторы Zend_Form
« Ответ #5 : Ноябрь 03, 2008, 21:15:41 »
Цитировать
Цитата: Zh0rzh от Сегодня в 17:38:17
2.
Цитировать
С такими ориентирами, решение нашлось само собой: использование шаблона проектирования "Декоратор". Этот паттерн традиционно используется

Здесь сначала используется термин "шаблон проектирования", и тут же "паттерн".
Я думаю что в обоих местах нужен употребить один из этих терминов. Лучше конечно "шаблон проектирования"
Старался избегать тавтологий...
Можно как в оригинале
Цитировать
A decorator traditionally is used ...
сделать "Декоратор традиционно используется ..."

Хотелось уточнить что именно паттерн используется а не декоратор зенд форм, но это я зря, пожалуй... Да, хороший вариант, надо как в оригинале в данном случае.

Оффлайн stfalcon

  • Team
  • Герой
  • ***
  • Сообщений: 1129
  • Карма: 54
  • Добрый сокольничий ^_~
    • My name is Tanasiychuk Stepan і це мій блог
Re: статья: Декораторы Zend_Form
« Ответ #6 : Март 23, 2009, 19:01:58 »
Ошибку нашёл.
Цитировать
Image: оформляет элемент как изображение ( тег <img> )
Цитировать
Image: render a form image based on the current element
Этот декоратор генерирует <input type="image" src".." />

Потом вот здесь:
    $form->setElementDecorators(array(
        
'ViewHelper',
        
'Errors',
        array(array(
'data' => 'HtmlTag'), array('tag' => 'td''class'  => 'element')),
        array(
'Label', array('tag' => 'td'),
        array(array(
'row'  => 'HtmlTag'), array('tag' => 'tr')),
    ));

Не хватает закрывающей скобки для Label
array('Label', array('tag' => 'td')),

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 153
    • Homepage
Re: статья: Декораторы Zend_Form
« Ответ #7 : Март 23, 2009, 19:12:57 »
Ошибку нашёл.
Цитировать
Image: оформляет элемент как изображение ( тег <img> )
Цитировать
Image: render a form image based on the current element
Этот декоратор генерирует <input type="image" src".." />

Потом вот здесь:
    $form->setElementDecorators(array(
        
'ViewHelper',
        
'Errors',
        array(array(
'data' => 'HtmlTag'), array('tag' => 'td''class'  => 'element')),
        array(
'Label', array('tag' => 'td'),
        array(array(
'row'  => 'HtmlTag'), array('tag' => 'tr')),
    ));

Не хватает закрывающей скобки для Label
array('Label', array('tag' => 'td')),

Спасибо, поправил.

Оффлайн stfalcon

  • Team
  • Герой
  • ***
  • Сообщений: 1129
  • Карма: 54
  • Добрый сокольничий ^_~
    • My name is Tanasiychuk Stepan і це мій блог
Re: статья: Декораторы Zend_Form
« Ответ #8 : Март 23, 2009, 19:24:15 »
lcf, эта скобка ещё в нескольких примерах отсутствует.
    $element->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')),
    ));

        public  $elementDecorators = array(
            
'ViewHelper',
            
'Errors',
            array(array(
'data'  => 'HtmlTag'), array('tag' => 'td''class' => 'element')),
            array(
'Label', array('tag' => 'td'),
            array(array(
'row' => 'HtmlTag'), array('tag' => 'tr')),
        );      

Поищи по Label

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 153
    • Homepage
Re: статья: Декораторы Zend_Form
« Ответ #9 : Март 23, 2009, 19:37:44 »
lcf, эта скобка ещё в нескольких примерах отсутствует.
    $element->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')),
    ));

        public  $elementDecorators = array(
            
'ViewHelper',
            
'Errors',
            array(array(
'data'  => 'HtmlTag'), array('tag' => 'td''class' => 'element')),
            array(
'Label', array('tag' => 'td'),
            array(array(
'row' => 'HtmlTag'), array('tag' => 'tr')),
        );      

Поищи по Label
Будет исполнено, мой повелитель. ^_^

Оффлайн stfalcon

  • Team
  • Герой
  • ***
  • Сообщений: 1129
  • Карма: 54
  • Добрый сокольничий ^_~
    • My name is Tanasiychuk Stepan і це мій блог
Re: статья: Декораторы Zend_Form
« Ответ #10 : Март 23, 2009, 19:42:30 »
^_~

Оффлайн stfalcon

  • Team
  • Герой
  • ***
  • Сообщений: 1129
  • Карма: 54
  • Добрый сокольничий ^_~
    • My name is Tanasiychuk Stepan і це мій блог
Re: статья: Декораторы Zend_Form
« Ответ #11 : Март 23, 2009, 23:46:28 »
Я ещё не надоел :)? Просто хотел разобраться с декораторами и пробовал примеры.
        public  function init()
        {
            
$this->addElement('text''username', array(
                
'decorators' => $this->elementDecorators,
                
'label       => 'Username:',
            );
            $this->addElement('
text', 'firstname', array(
                '
decorators' => $this->elementDecorators,
                '
label       => 'First Name:',
            );
            
$this->addElement('text''lastname', array(
                
'decorators' => $this->elementDecorators,
                
'label       => 'Last Name:',
            );
            $this->addElement('
submit', 'save',  array(
                '
decorators' => $this->buttonDecorators,
                '
label       => 'Save',
            );
        }

Не хватает кавычек после label и закрывающих скобок для array. Короче вот так должно быть:
        public  function init()
        {
            
$this->addElement('text''username', array(
                
'decorators' => $this->elementDecorators,
                
'label'       => 'Username:',
            ));
            
$this->addElement('text''firstname', array(
                
'decorators' => $this->elementDecorators,
                
'label'       => 'First Name:',
            ));
            
$this->addElement('text''lastname', array(
                
'decorators' => $this->elementDecorators,
                
'label'       => 'Last Name:',
            ));
            
$this->addElement('submit''save',  array(
                
'decorators' => $this->buttonDecorators,
                
'label'       => 'Save',
            ));
        }


В следующем коде не хватает закрывающих скобок для escape():
Цитировать
    <h4>Пожалуйста,  зарегистрируйтесь!</h4>
    <form  action="<?= $this->escape($this->form->getAction()  ?>"

        method="<?= $this->escape($this->form->getMethod()  ?>">
Думаю в примере создания декоратора тоже ошибки есть, но я эту часть просто прочитал.

Оффлайн DrAw

  • Мастер
  • ****
  • Сообщений: 319
  • Карма: 11
    • BASdesignstudio
Re: статья: Декораторы Zend_Form
« Ответ #12 : Сентябрь 27, 2009, 15:51:05 »
полдня просидел, пытаясь въехать вот в это:
Цитировать
// Или  используя конфигурационный файл INI
    form.elementPrefixPath.my.prefix =  "My_Form_Decorator"
    form.elementPrefixPath.my.path   =  "My/Form/Decorator"
    form.elementPrefixPath.my.type   = "decorator"
вставил этот текст в ini-файл. Эффекта - ноль. Т.е. автоматически почему-то эти конфигурации он не цепляет.
Взял прям в форме добавил код:
$fc Zend_Controller_Front::getInstance();
	
	
if (
$fc->getParam('bootstrap')->hasOption('form'))
	
	
{
	
	
	
$this->setOptions($fc->getParam('bootstrap')->getOption('form'));
	
	
}

После этого заработало, на появилась ошибка: Invalid type "MY" provided to getPluginLoader().
Тогда внес изменения в в ini файл:
Цитировать
form.elementPrefixPath.decorator.prefix =  "Application_Form_Decorator"
form.elementPrefixPath.decorator.path   =  LIBRARY_PATH "/Application/Form/Decorator/"
form.elementPrefixPath.decorator.type   = "decorator"
все заработало. Но мне кажется, что как-то оно не так должно работать. Иначе получается, что может быть всего одна директория для декораторов.
В чем я не прав?

Оффлайн akazakou

  • Новичок
  • *
  • Сообщений: 1
  • Карма: 0
Re: статья: Декораторы Zend_Form
« Ответ #13 : Июнь 06, 2012, 11:56:48 »
Хочу выразить огромную благодарность переводчику. Три дня читал и перечитывал эту статью, писал код пока не понял все нюансы. Огромное спасибо за вашу работу.