protected function renderFieldSet()
{
$content = '';
$cols = is_int($this->columns) && $this->columns >= 1 ? $this->columns : 1;
$index = 0;
$attrCount = count($this->attributes);
$rows = (double) ($attrCount / $cols);
$rows = ceil($rows);
$names = array_keys($this->attributes);
$values = array_values($this->attributes);
$width = (int) (self::GRID_WIDTH / $cols);
Html::addCssClass($this->rowOptions, 'row');
$skip = $attrCount == 1;
for ($row = 1; $row <= $rows; $row++) {
$content .= $this->beginTag('div', $this->rowOptions, $skip);
for ($col = 1; $col <= $cols; $col++) {
if ($index > $attrCount - 1) {
break;
}
$attribute = $names[$index];
$settings = $values[$index];
$settings = array_replace_recursive($this->attributeDefaults, $settings);
$colOptions = ArrayHelper::getValue($settings, 'columnOptions', $this->columnOptions);
$colWidth = $width;
if (isset($colOptions['colspan'])) {
$colWidth = $colWidth * (int) $colOptions['colspan'];
unset($colOptions['colspan']);
}
$colWidth = (int) $colWidth;
Html::addCssClass($colOptions, 'col-' . $this->columnSize . '-' . $colWidth);
$content .= "\t" . $this->beginTag('div', $colOptions, $skip) . "\n";
if (!empty($settings['attributes'])) {
$this->raise(self::EVENT_BEFORE_RENDER_SUB_ATTR, $attribute, $index, ['settings' => &$settings]);
$content .= $this->renderSubAttributes($settings, $index);
$this->raise(self::EVENT_AFTER_RENDER_SUB_ATTR, $attribute, $index, ['content' => &$content]);
} else {
$this->raise(self::EVENT_BEFORE_PARSE_INPUT, $attribute, $index, ['settings' => &$settings]);
$content .= "\t\t" . $this->parseInput($attribute, $settings, $index) . "\n";
$this->raise(self::EVENT_AFTER_PARSE_INPUT, $attribute, $index, ['content' => &$content]);
}
$content .= "\t" . $this->endTag('div', $skip) . "\n";
$index++;
}
$content .= $this->endTag('div', $skip) . "\n";
}
return $content;
}