[!!!][+FEATURE\1d] Add a reserved variable {_all} returning all template variables
authorBastian Waidelich <bastian@typo3.org>
Thu, 28 Jul 2011 11:57:40 +0000 (13:57 +0200)
committerBastian Waidelich <bastian@typo3.org>
Thu, 28 Jul 2011 11:57:40 +0000 (13:57 +0200)
This is especially helpful for passing all arguments
to a partial, using
<f:render partial="..." arguments="{_all}" />

Note: This is a breaking change only if you used the variable "_all" in your template.
In that case just rename that variable to a non-reserved string.

Change-Id: Ifa534dcf72ff8d391e93ab4a4e822c65a13b7985

typo3/sysext/fluid/Classes/Core/ViewHelper/TemplateVariableContainer.php
typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php

index 2438f9c..0e0861b 100644 (file)
@@ -36,7 +36,7 @@ class Tx_Fluid_Core_ViewHelper_TemplateVariableContainer implements ArrayAccess
         * List of reserved words that can't be used as variable identifiers in Fluid templates
         * @var array
         */
-       static protected $reservedVariableNames = array('true', 'false', 'on', 'off', 'yes', 'no');
+       static protected $reservedVariableNames = array('true', 'false', 'on', 'off', 'yes', 'no', '_all');
 
        /**
         * Variables stored in context
@@ -80,6 +80,9 @@ class Tx_Fluid_Core_ViewHelper_TemplateVariableContainer implements ArrayAccess
         * @api
         */
        public function get($identifier) {
+               if ($identifier === '_all') {
+                       return $this->variables;
+               }
                if (!array_key_exists($identifier, $this->variables)) throw new Tx_Fluid_Core_ViewHelper_Exception_InvalidVariableException('Tried to get a variable "' . $identifier . '" which is not stored in the context!', 1224479370);
                return $this->variables[$identifier];
        }
@@ -126,6 +129,10 @@ class Tx_Fluid_Core_ViewHelper_TemplateVariableContainer implements ArrayAccess
         * @api
         */
        public function exists($identifier) {
+               if ($identifier === '_all') {
+                       return TRUE;
+               }
+
                return array_key_exists($identifier, $this->variables);
        }
 
index 8353f4d..c2c7dfd 100644 (file)
  * (depending on the value of {menu})
  * </output>
  *
+ *
+ * <code title="Passing all variables to a partial">
+ * <f:render partial="somePartial" arguments="{_all}" />
+ * </code>
+ * <output>
+ * the content of the partial "somePartial".
+ * Using the reserved keyword "_all", all available variables will be passed along to the partial
+ * </output>
+ *
  * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
  * @api
  */