TbHtml::activeControlGroup PHP Method

activeControlGroup() public static method

Generates an active form row.
public static activeControlGroup ( string $type, CModel $model, string $attribute, array $htmlOptions = [], array $data = [] ) : string
$type string the input type.
$model CModel the data model.
$attribute string the attribute.
$htmlOptions array additional HTML attributes.
$data array data for multiple select inputs.
return string the generated control group.
    public static function activeControlGroup($type, $model, $attribute, $htmlOptions = array(), $data = array())
    {
        $color = TbArray::popValue('color', $htmlOptions);
        $groupOptions = TbArray::popValue('groupOptions', $htmlOptions, array());
        $controlOptions = TbArray::popValue('controlOptions', $htmlOptions, array());
        $label = TbArray::popValue('label', $htmlOptions);
        $labelOptions = TbArray::popValue('labelOptions', $htmlOptions, array());
        // todo: remove everything that has to do with form layout
        $formLayout = TbArray::popValue('formLayout', $htmlOptions, self::FORM_LAYOUT_VERTICAL);
        $labelWidthClass = TbArray::popValue('labelWidthClass', $htmlOptions, self::$defaultFormLabelWidthClass);
        // Retrieve the old-style "span" option
        $span = TbArray::popValue('span', $htmlOptions);
        if (!empty($span)) {
            $controlWidthClass = 'col-md-' . $span;
        } else {
            $controlWidthClass = TbArray::popValue('controlWidthClass', $htmlOptions, self::$defaultFormControlWidthClass);
        }
        $useFormGroup = true;
        $useControls = true;
        $output = '';
        // Special label case case for individual checkboxes and radios
        if ($type == self::INPUT_TYPE_CHECKBOX || $type == self::INPUT_TYPE_RADIOBUTTON) {
            $htmlOptions['label'] = isset($label) ? $label : $model->getAttributeLabel($attribute);
            $htmlOptions['labelOptions'] = $labelOptions;
            $htmlOptions['useContainer'] = true;
            $label = false;
            $useFormGroup = false;
        }
        // Special conditions depending on the form type
        if ($formLayout == self::FORM_LAYOUT_HORIZONTAL) {
            switch ($type) {
                case self::INPUT_TYPE_CHECKBOX:
                case self::INPUT_TYPE_RADIOBUTTON:
                    self::addCssClass(self::switchColToOffset($labelWidthClass), $controlOptions);
                    self::addCssClass(self::switchOffsetToCol($controlWidthClass), $controlOptions);
                    $useFormGroup = true;
                    break;
                default:
                    self::addCssClass(self::switchOffsetToCol($labelWidthClass), $labelOptions);
                    self::addCssClass(self::switchOffsetToCol($controlWidthClass), $controlOptions);
            }
        } elseif ($formLayout == self::FORM_LAYOUT_INLINE || $formLayout == self::FORM_LAYOUT_SEARCH) {
            switch ($type) {
                case self::INPUT_TYPE_TEXT:
                case self::INPUT_TYPE_PASSWORD:
                case self::INPUT_TYPE_URL:
                case self::INPUT_TYPE_EMAIL:
                case self::INPUT_TYPE_NUMBER:
                case self::INPUT_TYPE_RANGE:
                case self::INPUT_TYPE_DATE:
                case self::INPUT_TYPE_FILE:
                case self::INPUT_TYPE_SEARCH:
                    self::addCssClass('sr-only', $labelOptions);
                    if ($label !== null && TbArray::getValue('placeholder', $htmlOptions) !== null) {
                        $htmlOptions['placeholder'] = $label;
                    }
                    break;
                case self::INPUT_TYPE_CHECKBOX:
                case self::INPUT_TYPE_RADIOBUTTON:
                    $useControls = false;
                    break;
            }
        }
        // remove until here.
        if (isset($label) && $label !== false) {
            $labelOptions['label'] = $label;
        }
        $help = TbArray::popValue('help', $htmlOptions, '');
        $helpOptions = TbArray::popValue('helpOptions', $htmlOptions, array());
        if (!empty($help)) {
            $help = self::inputHelp($help, $helpOptions);
        }
        $error = TbArray::popValue('error', $htmlOptions, '');
        $input = isset($htmlOptions['input']) ? $htmlOptions['input'] : self::createActiveInput($type, $model, $attribute, $htmlOptions, $data);
        if (!empty($color)) {
            self::addCssClass($color, $groupOptions);
        }
        self::addCssClass('control-label', $labelOptions);
        if ($label !== false) {
            $output .= parent::activeLabelEx($model, $attribute, $labelOptions);
        }
        if ($useControls) {
            $output .= self::controls($input . $error . $help, $controlOptions);
        } else {
            $output .= $input;
        }
        if ($useFormGroup) {
            self::addCssClass('form-group', $groupOptions);
            return self::tag('div', $groupOptions, $output);
        } else {
            return $output;
        }
    }

Usage Example

 /**
  * Renders a form control that is implemented via a widget.
  */
 protected function renderWidget()
 {
     $input = parent::renderInput();
     return TbHtml::activeControlGroup(null, $this->getParent()->getModel(), $this->name, array('input' => $input));
 }
All Usage Examples Of TbHtml::activeControlGroup
TbHtml