Zend_Form_Element: рдЕрдкрдирд╛ рддрддреНрд╡ рдмрдирд╛рдПрдВ

0. рдкрд░рд┐рдЪрдпред

рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдмрд╣реБрдд рдмрд╛рд░ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдХрд╕реНрдЯрдо рдЪрдпрди, рдЗрдирдкреБрдЯ, рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдбрд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ ZF рдХреЛ рдорд╛рдирдХ рдлреЙрд░реНрдо рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ (рдХреИрдкреНрдЪрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ)ред рдпрд╣ рд▓реЗрдЦ jQuery рдХреЗ рд▓рд┐рдП facebook- рдЬреИрд╕реЗ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рд▓рд┐рд╕реНрдЯ рдкреНрд▓рдЧрдЗрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рд╣рдмреНрд░ рез

1. рдереНрдпреЛрд░реАред

рджрд░рдЕрд╕рд▓, рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
  1. Zend_Form_Element_Xhtml рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рддрддреНрд╡ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
  2. рд╕рд╣рд╛рдпрдХ рджреЗрдЦреЗрдВ, рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛;
  3. рддрддреНрд╡ рдХрд╛ рдирд╛рдо рд╣рдорд╛рд░реЗ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдИрд╡_) рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

2. рдЕрднреНрдпрд╛рд╕ред

2.1ред рдПрдХ рдИрд╡_Form_Element_TextboxList рдмрдирд╛рдПрдВ
рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
  1. рддрддреНрд╡ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рд╕рд╣рд╛рдпрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛;
  2. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рдирд╛;
  3. рд╕реЗрдЯрд┐рдВрдЧ (рдпрд╛ рд╕рдВрдпреЛрдЬрди) рд╡рд┐рдХрд▓реНрдк (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдЕрдзрд┐рднрд╛рд░;
  4. рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ \ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ Zend_Form_Element рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрд▓рд┐рдореЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╡реЗрд░рд┐рдлрд╛рдЗрдЯрд░реЛрдВ рдХреЗ рдбреЗрдХреЛрд░реЗрдЯрд░ \ рдлрд┐рд▓реНрдЯрд░ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдСрдкреНрд╢рдВрд╕ рдХреЛ рдЙрдирдХреЗ рд╣реЗрд▓реНрдкрд░ рдХреЛ рд╡реНрдпреВ рд╣реЗрд▓реНрдкрд░ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб:
class Eve_Form_Element_TextboxList extends Zend_Form_Element_Xhtml { /** *   * @var string */ public $helper = 'formTextboxList'; /** *  - * @var array */ public $options = array( 'js_main' => '/js/jquery.textboxlist.js', //      'js_autocomplete' => '/js/jquery.textboxlist.autocomplete.js', //       ( ) 'js_growinginput' => '/js/jquery.growinginput.js', //   'use_autocompletion' => '0', //     'autocomplete_script' => null, // backend,    'css_main' => '/css/textboxlist.css', //  'css_autocomplete' => '/css/textboxlist.autocomplete.css', ); /** *         * * @param array $options * @return Eve_Form_Element_TextboxList */ public function setOptions(array $options) { /** *     ,    ,    *     */ $diff = array_intersect_key($options, $this->options); $this->options = array_merge($this->options, $diff); /** *      ,     html    */ foreach ($diff as $key => $option) { unset ($options[$key]); } parent::setOptions($options); return $this; } } 

2.2ред рдПрдХ рджреГрд╢реНрдп рд╕рд╣рд╛рдпрдХ рдмрдирд╛рдПрдВ Eve_View_Helper_FormTextboxList
рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╣рд╛рдпрдХ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЛрдб + рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
 class Eve_View_Helper_FormTextboxList extends Zend_View_Helper_FormElement { /** * Generates a 'textboxList' element. * * @access public * * @param string|array $name If a string, the element name. If an * array, all other parameters are ignored, and the array elements * are extracted in place of added parameters. * * @param mixed $value The element value. * * @param array $attribs Attributes for the element tag. * * @return string The element XHTML. */ public function formTextboxList($name, $value = '', $attribs = null, $options = null) { $id = $name; $elemId = $this->view->escape($id); $xhtml = '<input type="text" name="' . $this->view->escape($name) . '" id="' . $this->view->escape($id) . '"'; //     if (!empty($value)) { $xhtml .= ' value="' . $this->view->escape($value) . '"'; } //     html  $xhtml .= $this->_htmlAttribs($attribs); $xhtml .= '/>' . PHP_EOL; /** *   ,     , ..  ,     *    ,      . */ // add content and end tag $xhtml .= $content . ($this->view->doctype()->isXhtml() ? '/>' : '>') . PHP_EOL; $this->view->headScript->appendFile($options['js_growinginput']); $this->view->headScript->appendFile($options['js_main']); $this->view->headScript->appendFile($options['js_autocomplete']); $this->view->headLink->appendStylesheet($options['css_main']); $this->view->headLink->appendStylesheet($options['css_autocomplete']); $xhtml .= '<script type="text/javascript"> var tl_' . $elemId . ' = new $.TextboxList("#' . $elemId. '", {unique: true, plugins: {autocomplete: {}}}); '; if ((int) $options['use_autocompletion'] == 1) { if (!$options['autocomplete_script']) { throw new Zend_View_Exception('No autocompletion backend is set for ' . __CLASS__ . ' plugin.'); } else { $.getJSON('" . $options['autocomplete_script'] . "', null, function (data) { tl.plugins['autocomplete'].setValues(data); tl.getContainer().removeClass('textboxlist-loading'); });"; } } $xhtml .= '</script>'; return $xhtml; } } 

2.3ред рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рд░рдВрднред
рдпрд╣ рдХрдИ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:
 elements.categories.type = textboxList elements.categories.options.label = Categories elements.categories.options.use_autocompletion = 1 elements.categories.options.autocomplete_script = /categories/ajax/get-all/ 

3. рдЖрдЙрдЯрд░реЛред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЕрд▓рдЧ рддрддреНрд╡ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
Jquery рдкреНрд▓рдЧрдЗрди рд╡рд╣рд╛рдБ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - http://devthought.com/projects/jquery/textboxlist/ ред
рдкреНрд▓рдЧрдЗрди рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рдЗрд╕ рдШрдЯрдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред рдФрд░ рд╣рд╛рдВ, рдкреНрд▓рдЧрдЗрди рдПрдХ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдирд╣реАрдВ рд╣реИред

UPD: 1. рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ ( рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ)


Source: https://habr.com/ru/post/In126133/


All Articles