рдЫрд╡рд┐ рдЪрдпрди рдХреЗ рд▓рд┐рдП Zend_Form рддрддреНрд╡

рдирдорд╕реНрддреЗ рд▓рдВрдмреЗ рдкрд░рд┐рдЪрдп рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рддрддреНрд╡ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрддрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ:

Zend_Form RadioImage Element

рдореИрдВрдиреЗ рдЗрд╕реЗ RadioImage рдХрд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдореЗрдВ рдЙрддреНрдкрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдЗрдХрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди jQuery рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫреЛрдЯреЗ рдЖрдЗрдХрди рдЪреБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ (рдпрд╣ рддрд╕реНрд╡реАрд░ рдореЗрд░реА рдирд╣реАрдВ рд╣реИ):

рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ

(рдФрд░ рддрдм, рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ рдФрд░ рдПрдХ рдЕрд▓рдЧ рдбреЗрдХреЛрд░реЗрдЯрд░ / рддрддреНрд╡ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджрд┐рдпрд╛)ред

рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░, рдЖрдЗрдХрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдмрдбрд╝реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдЦрдЯрдЦрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдврд╝ рдЧрдпрд╛ рдерд╛:
рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪреЗрдХрдмреЙрдХреНрд╕

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдордзреНрдпрд╕реНрде рдХреЗ рд░реВрдк рдореЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рд╕рд╛рде рд╣реА, рдпрд╣ рдлрд┐рд░ рд╕реЗ MultiImageCheckbox рдХрд╛ Zend_Form рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рджреГрд╢реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реАрдзреЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ html рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рджреВрд╕рд░реА рдмрд╛рд░ рдХрд╛рдо рдореЗрдВ рдЖрдпрд╛, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдорд╛рдирд╡реАрдп рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕ рдмрд╛рд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдЖрдЗрдХрди рдХрд╛ рдЪрдпрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рддрддреНрд╡ рдПрдХрд╛рдзрд┐рдХ рдЪрдпрди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ (рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдФрд░ рддрддреНрд╡ рдмрдирд╛рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреЗрдХрдЗрдореЗрдЬ)ред

рдПрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - jQuery, рдореБрдЭреЗ ZendX_JQuery рдЬреИрд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк Zend_VIew_Helper_HeadScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ js рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЗрдП рдЪрд▓рддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдбред рдореИрдВ рд╡рд╛рдкрд╕ рд╕рд╛рдордиреЗ рдЖрдирд╛ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ - рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде:

рдЖрд╡реЗрджрди / рдкреНрд░рдкрддреНрд░ / ProductStatus.php
<?php class Form_ProductStatus extends Zend_Form { public function init() { $this->setMethod('post'); $this->setName('statusform'); $this->setAttrib('enctype', 'multipart/form-data'); $this->addElement('text', 'prodstatus_name', array( 'required' => true, 'label' => 'Status Name', 'filters' => array('StringTrim') )); //     $img = new App_Form_Element_RadioImage('prodstatus_icon', array( 'label' => 'Select Icon', // HTML         <img /> 'width' => '48' )); // BaseUrl        , //        - $bu = $this->getView()->baseUrl(); //     /  , //       $icons = array( "black_new.png" => $bu.'/icons/black_new.png', "black_sale.png" => $bu.'/icons/black_sale.png', "blue_new.png" => $bu.'/icons/blue_new.png', "label_sale.png" => $bu.'/icons/label_sale.png', "new_blue.png" => $bu.'/icons/new_blue.png', "new_red.png" => $bu.'/icons/new_red.png', "sale_blue.png" => $bu.'/icons/sale_blue.png', "sale_green.png" => $bu.'/icons/sale_green.png', "sale_yellow.png" => $bu.'/icons/sale_yellow.png', "sticker_blue_sale.png" => $bu.'/icons/sticker_blue_sale.png' ); //  $key -      // . .    [┬лprodstatus_icon┬╗] => $key (  ) // $val       img .. <img src="$val"/> foreach ($icons as $key => $val) { //      (      select) //     addMultiOptions()   //       $img->addMultiOption($key, $val); } $this->addElement($img); $this->addElement('submit', 'Save'); } } 


рд╢рд╛рдпрдж рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрд╡ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддрд╛ рд╣реИ:
  $img = new App_Form_Element_SelectImage('prodstatus_icon', array( 'label' => 'Select Icon', 'width' => '48' )); $icons = App_Tool::scandir(PUBLIC_PATH.'/modules/products/icons', 'png'); foreach ($icons as $icon) { $img->addMultiOption($icon, $this->getView()->baseUrl().'/modules/products/icons/'.$icon); } $this->addElement($img); 


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рддрддреНрд╡ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдмрд╣реБрдд рд╣реА рдЪреАрдЬрд╝ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдРрдк / рдлреЙрд░реНрдо / рдПрд▓рд┐рдореЗрдВрдЯ / RadioImage.php
 <?php require_once 'Zend/Form/Element/Multi.php'; /** * RadioImage form element * * @category App * @package App_Form * @subpackage Element */ class App_Form_Element_RadioImage extends Zend_Form_Element_Multi { /** * @var string */ public $helper = 'FormRadioImage'; } 


рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд Zend_Form рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХреЗ рдЕрдиреБрд░реВрдк, рд╣рдорд╛рд░рд╛ рддрддреНрд╡ рдХреЗрд╡рд▓ FormRadioImage рд╕рд╣рд╛рдпрдХ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:

App / рджреЗрдЦреЗрдВ / рд╕рд╣рд╛рдпрдХ / FormRadioImage.php
 <?php require_once 'Zend/View/Helper/FormElement.php'; /** * @category App * @package App_View * @subpackage Helper * @uses ZendX_Jquery */ class App_View_Helper_FormRadioImage extends Zend_View_Helper_FormElement { /** * @param string|array $name     "name"  <input /> * @param mixed $value   -   *   . * @param array|string $attribs Html    . * @param array $options        . * @return string  html */ public function formRadioImage($name, $value = null, $attribs = null, $options = null) { $info = $this->_getInfo($name, $value, $attribs, $options); extract($info); // name, value, attribs, options //       (     ) $options = (array) $options; $xhtml = ''; $list = array(); //      ,   $list[] = '<input type="hidden" id="'.$name.'" name="'.$name.'" value="'.$value.'" />'; require_once 'Zend/Filter/Alnum.php'; $filter = new Zend_Filter_Alnum(); //   CSS      //    class="selected" $selectedClass = (isset($attribs['selectedClass']) && !empty ($attribs['selectedClass']))?$attribs['selectedClass']:'selected'; $selectedClass = $filter->filter($selectedClass); if(!isset($attribs['class'])) $attribs['class'] = null; //      CSS  ( ) $classBck = $attribs['class']; //    foreach ($options as $optVal => $imgPath) { //  id   <img /> $imgId = $id . '-' . $filter->filter($optVal); //  ,       selected if ($optVal == $value) { $attribs['class'] .= " ".$selectedClass; } //     $list[] = '<img ' . 'src="'.$imgPath.'" ' . 'id="'.$imgId.'" ' . 'rel="'.$optVal.'" ' . $this->_htmlAttribs($attribs) . '/>'; //   selected,        if(strstr($attribs['class'], $selectedClass)) $attribs['class'] = $classBck; } //    ,       $list[] = '<br /><a href=\"javascript;\">Reset Selection</a>'.PHP_EOL; $xhtml .= implode(PHP_EOL, $list); //     jQuery //        hidden  $this->view->jQuery()->addOnLoad(" //    $('#$name-element img').click(function(){ $('#$name').val($(this).attr('rel')); $('#$name-element img').removeClass('$selectedClass'); $(this).addClass('$selectedClass'); }); //    $('#$name-element a').click(function(){ $('#$name-element img').removeClass('$selectedClass'); $('#$name').val('') return false; }); "); //     (-) //    css        CSS $this->view->headStyle(" #$name-element img {cursor:pointer; border:3px solid white} #$name-element img.selected {border:3px solid blue} "); return $xhtml; } } 


рд╡рд╣ рд╕рдм рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рднреВрд▓ рдЧрдпрд╛ рд╣реИред

рдлрд┐рд░ рд╕реЗ рдЪрд┐рддреНрд░, рддрд╛рдХрд┐ рд╕реНрдХреНрд░реЙрд▓ рди рд╣реЛ:

Zend_Form RadioImage Element


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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


All Articles