рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╕реВрдЪреА рджрд░реНрдЬ рдХрд░рдирд╛

рдПрдХ рдХрд╛рд░реНрдп рдерд╛ - рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╕реВрдЪреА рддрддреНрд╡реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, KLADR) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЬрдм рдореИрдВ рдбреНрд░реБрдкрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рджреЗрдЦрд╛ рдХрд┐ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдЪрдпрди рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЦреБрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рд╕реЗ рдирд╣реАрдВ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреА рддрд░рд╣ рдХреБрдЫ рдЙрдкрдЬ
рдпрд╣ рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

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

рд╢рд╛рдпрдж рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдХрд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ
рдЙрджрд╛рд╣рд░рдг

рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд┐рд░реНрдл рдХрдХреНрд╖рд╛ рдореЗрдВ 2 рддрд░реАрдХреЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ)

рд╕рдорд╕реНрдпрд╛ рдХрдерди:


рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛:


рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рдЕрдиреБрдХреНрд░рдо:
  1. рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЬрд┐рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ рд╡рд╣ рдЙрддреНрдкрдиреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  2. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╡рд░рдг
  3. рд╡рд░реНрдЧ ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛
  4. рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  5. рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг


1. рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ


2. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг
 //  $(document).ready(function() { /** *          */ $('.select_hierarhy_container').each(function() { selecHierarhyInit(this); }); }); /** *  ,     . : * id (containerId),    (initValue)     * ,    * * @param v_container * - */ function selecHierarhyInit(v_container) { var container = $(v_container); var containerId = container.attr('id'); var initValue = container.children('input').val(); container.load('ajax.php?container_id=' + containerId + '&init_id=' + initValue); } /** *          v_obj,  *      : id  * (containerId)        (level) *    (parent_id)      * ,   (  ,     *  )      * * @param v_obj *    select,   */ function selecHierarhygetChilds(v_obj) { obj = $(v_obj); var containerId = obj.parents('.select_hierarhy_container').attr('id'); var parent_id = obj.val(); obj.nextAll().remove(); $.ajax({ url : 'ajax.php?container_id=' + containerId + '&parent_id=' + parent_id, success : function(data) { $('#' + containerId).append(data); } }); } 


3. рд╡рд░реНрдЧ ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛
 /** * ,     . * *          * $_POST[$selectName]    .   - . *     (,    ) *        *     (  ) *  ,  ,    * * @author dibrovsd */ class HerarhySelect { //  select- private $selectName; /** * @param string $selectName  select-,    */ public function __construct($selectName) { $this->selectName = $selectName; } /** *    * @param int $parentId    */ public function getContent($parentId) { return $this->generateSelect($parentId); } /** *     *    ,     * ( ) *    ,   *   ( )   ,    ,  * @param int $nodeId   */ public function getInit($nodeId) { if($nodeId == '') { return $this->getContent(-1); } else { $s = null; $parents = $this->getDataParentsList($nodeId); foreach($parents as $parentId => $childId) { $s .= $this->generateSelect($parentId, $childId); } $s .= $this->generateSelect($nodeId); return $s; } } /** *     $parentId,    $childId * @param int $parentId    * @param int $childId */ private function generateSelect($parentId, $childId = null) { //    -  $childs = $this->getDataChilds($parentId); if($childs == null) { return; } $s = '<select name='.$this->selectName.'[new][] onChange="selecHierarhygetChilds(this);"> <option></option>'; foreach($childs as $id => $value) { $s .= '<option value="'.$id.'" '. ($id == $childId ? 'selected' : '').'>'. $value.'</option>'; } $s .='</select>'; return $s; } /** *  .   - *    *     * *      . *      , web- *  -  (   ) * * @param int $parentId    */ private function getDataChilds($parentId) { $dataSource = $this->getDataArray(); if(!isset($dataSource[$parentId])) { return null; } else { return $dataSource[$parentId]; } } /** *       , *     $childId *    -      *    ,   -    * *  (   )      *       *       : *  Oracle  , *  PostgreSQL   *     ,     * (       ) * * @param int $child * @return int:int id  : id , *       , *   */ private function getDataParentsList($childId) { $dataSource = $this->getDataArray(); $result = array(); $currentChild = $childId; //      . //    ,     do { $isParentFind = false; foreach($dataSource as $idParent => $childs) { if(isset($childs[$currentChild])) { $result[$idParent] = $currentChild; $isParentFind = true; $currentChild = $idParent; break; } } } while($isParentFind); return array_reverse($result, true); } /** *  -    . *    ,  ,  , *     , *     */ private function getDataArray() { return array( -1 => array(1 => 'test1', 2 => 'test2', 3 => 'test3'), 1 => array(4 => 'test1_1', 5 => 'test1_2', 6 => 'test1_3'), 4 => array(7 => 'test2_1', 8 => 'test2_2', 9 => 'test2_3'), 9 => array(10 => 'test2_1_1', 11 => 'test2_1_2', 12 => 'test2_1_3') ); } } 


4. рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЙрдбрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдирдиреЗ рдкрд░ рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп,
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдЖрдЧ
рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
selecHierarhyInit рдлрд╝рдВрдХреНрд╢рди (рдХрдВрдЯреЗрдирд░_рдмреЙрдЬреЗрдХреНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ
- рдХрдВрдЯреЗрдирд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдЬреЛ рдЗрдирдкреБрдЯ рддрддреНрд╡ рдХреЗ рдирд╛рдо рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
- рдкрджрд╛рдиреБрдХреНрд░рдо рдиреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛

PHP рд╡рд░реНрдЧ, рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ getInit ($ id) рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдпрд╣ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдЬрдбрд╝ рдореЗрдВ рдЕрдзреАрдирд╕реНрде рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрддрд░ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ (рдореИрдВ "рд╕реНрдЯрдм" -1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдиреЛрдб рд╕реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ,
"рд░реЛрд▓ рдбрд╛рдЙрди" рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдирд╛
рддрдм рдпрд╣ рд╕рд╛рдордЧреНрд░реА (рд╕реВрдЪреА рдпрд╛ рдПрдХ рд╕реВрдЪреА рдХреА рд╕реВрдЪреА) javaScript рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ,
рдЖрд░рдВрднреАрдХрд░рдг рдорд╛рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

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

5. рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛
рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд┐рдирд╛

 if(isset($_POST['sendForm'])) { $data1 = array_reverse($_POST['field_1']['new']); $data2 = array_reverse($_POST['field_2']['new']); $val1 = $data1[0] == '' ? $data1[1] : $data1[0]; $val2 = $data2[0] == '' ? $data2[1] : $data2[0]; } else { $val1 = null; $val2 = 12; } 

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


All Articles