values = isset($options[$c = self::VALUES]) ? $options[$c] : []; $this->inputs = isset($options[$c = self::INPUTS]) ? $options[$c] : []; $this->options = $options; return $this; } function toJSON(){ return [ 'values' => $this->values, 'inputs' => $this->inputs, //'options' => $this->options, ]; } protected function toString($a){ $res = ''; foreach ($a as $k=>$v){ switch ($v[Form::VIEW]){ // Если это строка, то начинаем рекурсивно выводить колонки case Form::TITLE: $res.='
'.$v[Form::TITLE_TEXT].'
'; break; case Form::ROW: $res.='
'.$this->toString($v[Form::COLS]).'
'; break; case Form::BUTTONS: $res.='
'.$this->toString($v[Form::COLS]).'
'; break; // Если это поле ввода, то отрисовываем его case Form::INPUT: case Form::BUTTON: $isButton = $v[Form::VIEW]==Form::BUTTON; // Определяем что это за тип, и вызываем соответствующий конструктор и отрисовку $input = null; $key = $v[Form::KEY_VALUE]; $value = $this->values[ $key ]; $o = $v[Form::INPUT_OPT]; if($key) $o[Input::NAME] = $key; if(!isset($o[Input::VALUE])) $o[Input::VALUE] = $value; if($c = $this->options[Form::INPUT_ALL_THEME_FORCE]) { $o[Input::THEME] = $c; } switch ($v[Form::TYPE]) { case eInputType::HIDDEN : $input = new Hidden($o); break; case eInputType::TEXT : $input = new Text($o); break; case eInputType::SELECT : $input = new Select($o); break; case eInputType::DATE : $input = new Date($o); break; case eInputType::SELECT_SEARCH : $input = new Select_Search($o); break; case eInputType::SUBMIT : $input = new Submit($o); break; case eInputType::CANCEL : $input = new Cancel($o); break; case eInputType::SELECT_MULTI : $input = new Select_Multi($o); break; case eInputType::DATE_RANGE_TIME : $input = new Date_Range_Time($o); break; case eInputType::DATE_TIME : $input = new Date_Time($o); break; case eInputType::TEXTAREA : $input = new Textarea($o); break; case eInputType::CHECKBOX : $input = new Checkbox($o); break; case eInputType::YANDEX_COUNTRY_CITY : $input = new Yandex_Country_City($o); break; case eInputType::SWITCH_IOS : $input = new Switch_Ios($o); break; case eInputType::COLOR_PICKER : $input = new Color_Picker($o); break; case eInputType::AVATAR_PICKER : $input = new Avatar_Picker($o); break; case eInputType::SELECT_AJAX : $input = new Select_Ajax($o); break; case eInputType::EMAIL : $input = new Email($o); break; case eInputType::SCRIPT : $input = new Script($o); break; case eInputType::HTML : $input = new Html($o); break; case eInputType::IMAGE : $input = new Image($o); break; case eInputType::RADIO : $input = new Radio($o); break; case eInputType::VIDEO : $input = new Video($o); break; case eInputType::SUBMIT_AND_CLOSE : $input = new Submit($o); break; } $col_classes = $v[Form::COL_CLASSES]; $isCol = isset($v[Form::COL_CLASSES]); if(!$isButton) { if (isset($this->options[Form::COL_CLASSES_ALL_FORCE])) { $col_classes = $this->options[Form::COL_CLASSES_ALL_FORCE]; $isCol = boolval($col_classes); } } if ($input) $res .= ($isCol?'
':'').$input->render().($isCol?'
':''); } } return $res; } function __toString(){ $isFormWrap = isset($this->options[FORM::FORM_WRAP]) ? boolval($this->options[FORM::FORM_WRAP]) : true; return ($isFormWrap? '
options[FORM::CONTROLLER])?'data-controller="'.$c.'" ':'') .(($c = $this->options[FORM::ACTION])?'data-action="'.$c.'" ':'') .'onsubmit="'.(($c = $this->options[Form::ON_SUBMIT])?$c:'return false').'">' :'
') .$this->toString($this->inputs).'
'. ($isFormWrap?'':'
'); } }