[BUGFIX] Make be.buttons.icon-ViewHelper extensible 93/25293/3
authorStefan Neufeind <typo3.neufeind@speedpartner.de>
Mon, 11 Nov 2013 22:43:29 +0000 (23:43 +0100)
committerMarkus Klein <klein.t3@mfc-linz.at>
Tue, 12 Nov 2013 14:17:01 +0000 (15:17 +0100)
Many of the standard-ViewHelpers (tag-based) at least support
additionalAttributes. Introduce this for be.buttons.icon as well
to allow for attributes like onclick or target. Those arguments
will be assigned to the surrounding a-tag if an uri is specified.

Change-Id: I0b8ef12842a818ed5d49437a003287aff9b08f13
Resolves: #53538
Releases: 6.2, 6.1, 6.0
Reviewed-on: https://review.typo3.org/25293
Reviewed-by: Eric Chavaillaz
Tested-by: Eric Chavaillaz
Reviewed-by: Pascal Dürsteler
Tested-by: Pascal Dürsteler
Reviewed-by: Markus Klein
Tested-by: Markus Klein
typo3/sysext/fluid/Classes/ViewHelpers/Be/Buttons/IconViewHelper.php

index 1064212..e259465 100755 (executable)
@@ -47,6 +47,16 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Be\Buttons;
 class IconViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper {
 
        /**
+        * Initialize arguments
+        *
+        * @return void
+        * @api
+        */
+       public function initializeArguments() {
+               $this->registerArgument('additionalAttributes', 'array', 'Additional tag attributes. They will be added directly to the resulting HTML tag.', FALSE);
+       }
+
+       /**
         * Renders a linked icon as known from the TYPO3 backend.
         *
         * If the URI is left empty, the icon is rendered without link.
@@ -57,11 +67,17 @@ class IconViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendView
         * @return string The rendered icon with or without link
         */
        public function render($uri = '', $icon = 'actions-document-close', $title = '') {
+               $additionalAttributes = '';
+               if ($this->hasArgument('additionalAttributes') && is_array($this->arguments['additionalAttributes'])) {
+                       foreach ($this->arguments['additionalAttributes'] as $argumentKey => $argumentValue) {
+                               $additionalAttributes .= ' ' . $argumentKey . '="' . $argumentValue . '"';
+                       }
+               }
                $icon = \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon($icon, array('title' => $title));
                if (empty($uri)) {
                        return $icon;
                } else {
-                       return '<a href="' . $uri . '">' . $icon . '</a>';
+                       return '<a href="' . $uri . '"' . $additionalAttributes . '>' . $icon . '</a>';
                }
        }
 }