110 $targetStructure = [];
111 $mainStructureCounter = -1;
112 $fieldsArray = $this->data[
'fieldsArray'];
114 foreach ($fieldsArray as $fieldString) {
116 $fieldName = $fieldConfiguration[
'fieldName'];
117 if ($fieldName ===
'--palette--') {
119 if (!empty($paletteElementArray)) {
120 $mainStructureCounter++;
121 $paletteLabel = $fieldConfiguration[
'fieldLabel'];
122 if ($paletteLabel ===
null
123 && !empty($this->data[
'processedTca'][
'palettes'][$fieldConfiguration[
'paletteName']][
'label'])
127 $paletteLabel = $this->data[
'processedTca'][
'palettes'][$fieldConfiguration[
'paletteName']][
'label'];
129 $targetStructure[$mainStructureCounter] = [
131 'fieldName' => $fieldConfiguration[
'paletteName'],
132 'fieldLabel' => $languageService->sL($paletteLabel),
133 'elements' => $paletteElementArray,
137 if (!is_array($this->data[
'processedTca'][
'columns'][$fieldName])) {
142 $options[
'fieldName'] = $fieldName;
144 $options[
'renderType'] =
'singleFieldContainer';
145 $childResultArray = $this->nodeFactory->create($options)->render();
147 if (!empty($childResultArray[
'html'])) {
148 $mainStructureCounter++;
150 if (!empty($this->data[
'processedTca'][
'columns'][$fieldName][
'label'])) {
151 $fieldLabel = $this->data[
'processedTca'][
'columns'][$fieldName][
'label'];
153 $targetStructure[$mainStructureCounter] = [
155 'fieldName' => $fieldConfiguration[
'fieldName'],
156 'fieldLabel' => $fieldLabel,
157 'fieldHtml' => $childResultArray[
'html'],
167 foreach ($targetStructure as $element) {
168 if ($element[
'type'] ===
'palette') {
169 $paletteName = $element[
'fieldName'];
172 $isHiddenPalette = !empty($this->data[
'processedTca'][
'palettes'][$paletteName][
'isHiddenPalette']);
174 $paletteElementsHtml =
'<div class="row">' . $paletteElementsHtml .
'</div>';
176 $content[] = $this->
fieldSetWrap($paletteElementsHtml, $isHiddenPalette, $element[
'fieldLabel']);
180 $content[] = $element[
'fieldHtml'];
188 $finalResultArray[
'html'] = implode(LF, $content);
189 return $finalResultArray;
201 if (empty($paletteName) || empty($this->data[
'processedTca'][
'palettes'][$paletteName][
'showitem'])) {
205 $resultStructure = [];
206 $foundRealElement =
false;
207 $fieldsArray = GeneralUtility::trimExplode(
',', $this->data[
'processedTca'][
'palettes'][$paletteName][
'showitem'],
true);
208 foreach ($fieldsArray as $fieldString) {
210 $fieldName = $fieldArray[
'fieldName'];
211 if ($fieldName ===
'--linebreak--') {
212 $resultStructure[] = [
213 'type' =>
'linebreak',
216 if (!is_array($this->data[
'processedTca'][
'columns'][$fieldName])) {
220 $options[
'fieldName'] = $fieldName;
222 $options[
'renderType'] =
'singleFieldContainer';
223 $singleFieldContentArray = $this->nodeFactory->create($options)->render();
225 if (!empty($singleFieldContentArray[
'html'])) {
226 $foundRealElement =
true;
228 if (!empty($this->data[
'processedTca'][
'columns'][$fieldName][
'label'])) {
229 $fieldLabel = $this->data[
'processedTca'][
'columns'][$fieldName][
'label'];
231 $resultStructure[] = [
233 'fieldName' => $fieldName,
234 'fieldLabel' => $fieldLabel,
235 'fieldHtml' => $singleFieldContentArray[
'html'],
242 if ($foundRealElement) {
243 return $resultStructure;
259 $lastLineWasLinebreak =
true;
260 foreach ($elementArray[
'elements'] as $element) {
261 if ($element[
'type'] ===
'linebreak') {
262 if (!$lastLineWasLinebreak) {
264 $groupedFields[$row][] = $element;
266 $lastLineWasLinebreak =
true;
269 $lastLineWasLinebreak =
false;
270 $groupedFields[$row][] = $element;
276 foreach ($groupedFields as
$fields) {
278 $colWidth = (int)floor(12 / $numberOfItems);
280 $colClass =
'col-md-12';
282 if ($colWidth == 6) {
283 $colClass =
'col-sm-6';
285 2 =>
'visible-sm-block visible-md-block visible-lg-block',
287 } elseif ($colWidth === 4) {
288 $colClass =
'col-sm-4';
290 3 =>
'visible-sm-block visible-md-block visible-lg-block',
292 } elseif ($colWidth === 3) {
293 $colClass =
'col-sm-6 col-md-3';
295 2 =>
'visible-sm-block',
296 4 =>
'visible-md-block visible-lg-block',
298 } elseif ($colWidth <= 2) {
299 $colClass =
'checkbox-column col-sm-6 col-md-3 col-lg-2';
301 2 =>
'visible-sm-block',
302 4 =>
'visible-md-block',
303 6 =>
'visible-lg-block'
308 for ($counter = 0; $counter < $numberOfItems; $counter++) {
310 if ($element[
'type'] ===
'linebreak') {
311 if ($counter !== $numberOfItems) {
312 $result[] =
'<div class="clearfix"></div>';
318 if ($counter + 1 < $numberOfItems && !empty($colClear)) {
319 foreach ($colClear as $rowBreakAfter => $clearClass) {
320 if (($counter + 1) % $rowBreakAfter === 0) {
321 $result[] =
'<div class="clearfix ' . $clearClass .
'"></div>';
329 return implode(LF, $result);
340 protected function fieldSetWrap($content, $paletteHidden =
false, $label =
'')
342 $fieldSetClass =
'form-section';
343 if ($paletteHidden) {
344 $fieldSetClass .=
' hide';
348 $result[] =
'<fieldset class="' . $fieldSetClass .
'">';
350 if (!empty($label)) {
351 $result[] =
'<h4 class="form-section-headline">' . htmlspecialchars($label) .
'</h4>';
354 $result[] = $content;
355 $result[] =
'</fieldset>';
356 return implode(LF, $result);
368 $fieldName = $element[
'fieldName'];
370 $paletteFieldClasses = [
372 't3js-formengine-validation-marker',
373 't3js-formengine-palette-field',
375 foreach ($additionalPaletteClasses as $class) {
376 $paletteFieldClasses[] = $class;
382 $label .=
'<code>[' . htmlspecialchars($fieldName) .
']</code>';
386 $content[] =
'<div class="' . implode(
' ', $paletteFieldClasses) .
'">';
387 $content[] =
'<label class="t3js-formengine-label">';
389 $content[] =
'</label>';
390 $content[] = $element[
'fieldHtml'];
391 $content[] =
'</div>';
393 return implode(LF, $content);
404 $fieldName = $element[
'fieldName'];
406 $this->data[
'processedTca'][
'columns'][$fieldName][
'config'][
'type'] ===
'user'
407 && !empty($this->data[
'processedTca'][
'columns'][$fieldName][
'config'][
'noTableWrapping'])