From 134f1a216becbe8c103c52460468c3d747921f99 Mon Sep 17 00:00:00 2001 From: Ralf Zimmermann <ralf.zimmermann@tritum.de> Date: Fri, 2 Oct 2015 14:57:23 +0200 Subject: [PATCH] [BUGFIX] EXT:form - Allow setting classes via layout for elements Allow to add a class attribute defined in the "layout." section to the desired element tag. This is only needed if the form is in compatibility mode. Resolves: #70209 Releases: master Change-Id: I63c2ed839218ae206359daac4ff20b95f7e38ded Reviewed-on: http://review.typo3.org/43742 Reviewed-by: Bjoern Jacob <bjoern.jacob@tritum.de> Tested-by: Bjoern Jacob <bjoern.jacob@tritum.de> Reviewed-by: Frans Saris <franssaris@gmail.com> Tested-by: Frans Saris <franssaris@gmail.com> --- .../Utility/CompatibilityLayerUtility.php | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php b/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php index 4875a9e60bdf..020a79c35fc4 100644 --- a/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php +++ b/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php @@ -434,6 +434,7 @@ class CompatibilityLayerUtility { $layout['elementOuterWrap'] = $elementWrap; $element->setLayout($layout); } + /* Set container inner wraps */ if (in_array($element->getElementType(), $this->containerElements)) { $elementWrap = $this->determineElementOuterWraps($element->getElementType(), $elementLayout); @@ -509,8 +510,26 @@ class CompatibilityLayerUtility { $element->setHtmlAttribute('class', $classFromLayout); } } + } else { + /* set class attribute for the element tag */ + if ($this->formBuilder->getControllerAction() === 'show') { + if ($elementType === 'TEXTAREA') { + $tagName = 'textarea'; + } elseif ($elementType === 'SELECT') { + $tagName = 'select'; + } else { + $tagName = 'input'; + } + + $classFromLayout = $this->getElementClassFromLayout($element->getElementType(), $tagName); + if (!empty($classFromLayout)) { + if (!empty($element->getAdditionalArgument('class'))) { + $classFromLayout .= ' ' . $element->getAdditionalArgument('class'); + } + $element->setAdditionalArgument('class', $classFromLayout); + } + } } - return; } } @@ -532,17 +551,21 @@ class CompatibilityLayerUtility { /** * Return the class attribute for a element defined by layout. * - * @param string $elementName + * @param string $elementType + * @param string $tagName * @return string */ - protected function getElementClassFromLayout($elementName = '') { + protected function getElementClassFromLayout($elementType = '', $tagName = '') { $class = ''; $libxmlUseInternalErrors = libxml_use_internal_errors(true); $dom = new \DOMDocument('1.0', 'utf-8'); $dom->formatOutput = TRUE; $dom->preserveWhiteSpace = FALSE; - if ($dom->loadXML($this->getGlobalLayoutByElementType(strtoupper($elementName)))) { - $nodes = $dom->getElementsByTagName($elementName); + if ($dom->loadXML($this->getGlobalLayoutByElementType(strtoupper($elementType)))) { + if ($tagName === '') { + $tagName = $elementType; + } + $nodes = $dom->getElementsByTagName($tagName); if ($nodes->length) { $node = $nodes->item(0); if ($node && $node->getAttribute('class') !== '') { -- GitLab