[FEATURE] Allow to set a custom id for fluid widgets 18/51518/6
authorMarco Huber <mail@marco-huber.de>
Fri, 3 Feb 2017 11:44:20 +0000 (12:44 +0100)
committerGeorg Ringer <georg.ringer@gmail.com>
Tue, 7 Feb 2017 20:14:40 +0000 (21:14 +0100)
With this patch you can set a customWidgetId parameter in the
widget viewhelper. This id is used in the widget identifier
in addition to the nextWidgetNumber.

With this patch two equal widgets in different content elements
don't influence each other.

A good value for the customWidgetId is the {contentObjectData.uid}.

Example:  <f:widget.paginate customWidgetId="{contentObjectData.uid}" ...

Resolves: #47006
Releases: master
Change-Id: Ief1d38457da73a35e652f11d82f441898e0394d3
Reviewed-on: https://review.typo3.org/51518
Reviewed-by: Frans Saris <franssaris@gmail.com>
Tested-by: Frans Saris <franssaris@gmail.com>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
typo3/sysext/core/Documentation/Changelog/master/Feature-47006-ExtendTheWidgetIdentifierWithCustomString.rst [new file with mode: 0644]
typo3/sysext/fluid/Classes/Core/Widget/AbstractWidgetViewHelper.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-47006-ExtendTheWidgetIdentifierWithCustomString.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-47006-ExtendTheWidgetIdentifierWithCustomString.rst
new file mode 100644 (file)
index 0000000..71d2c21
--- /dev/null
@@ -0,0 +1,30 @@
+.. include:: ../../Includes.txt
+
+=================================================================
+Feature: #47006 - Extend the widget identifier with custom string
+=================================================================
+
+See :issue:`47006`
+
+Description
+===========
+
+The parameter "customWidgetId" has been introduced for fluid widgets. This string is used in the widget identifier
+in addition to the nextWidgetNumber.
+
+The widget identifier is used to create the GET parameter names.
+
+A good value for the customWidgetId is the {contentObjectData.uid}.
+
+Example:
+.. code-block:: html
+
+       <f:widget.paginate customWidgetId="{contentObjectData.uid}" ...></f:widget.paginate>
+
+
+Impact
+======
+
+Allows to use the same fluid widget more then once on one page in different content elements.
+
+.. index:: Fluid
index dbc46d6..492ac19 100644 (file)
@@ -92,6 +92,15 @@ abstract class AbstractWidgetViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper
     }
 
     /**
+     * Initialize arguments.
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('customWidgetId', 'string', 'extend the widget identifier with a custom widget id',
+            false, null);
+    }
+
+    /**
      * Initialize the arguments of the ViewHelper, and call the render() method of the ViewHelper.
      *
      * @return string the rendered ViewHelper.
@@ -208,7 +217,7 @@ abstract class AbstractWidgetViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper
     private function initializeWidgetIdentifier()
     {
         $widgetCounter = $this->viewHelperVariableContainer->get(\TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper::class, 'nextWidgetNumber', 0);
-        $widgetIdentifier = '@widget_' . $widgetCounter;
+        $widgetIdentifier = '@widget_' . ($this->arguments['customWidgetId'] !== null ? $this->arguments['customWidgetId'] . '_' : '') . $widgetCounter;
         $this->viewHelperVariableContainer->addOrUpdate(\TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper::class, 'nextWidgetNumber', $widgetCounter + 1);
         $this->widgetContext->setWidgetIdentifier($widgetIdentifier);
     }