[FEATURE] Place global Fluid ViewHelper namespaces in TYPO3 configuration 54/50354/5
authorClaus Due <claus@namelesscoder.net>
Mon, 24 Oct 2016 22:58:49 +0000 (00:58 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Tue, 25 Oct 2016 15:06:14 +0000 (17:06 +0200)
This change moves the default/global namespaces from being stored
directly on the ViewHelperResolver to being stored in the global
TYPO3 configuration array.

This then allows the namespaces to be manipulated as part of the site
configuration, including from within third party ViewHelper packages
which follow TYPO3 extension rules.

Change-Id: Ic324c023b4fbff6ab3e73e651dfca8dfd78453d9
Releases: master
Resolves: #78415
Reviewed-on: https://review.typo3.org/50354
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/core/Configuration/DefaultConfiguration.php
typo3/sysext/core/Documentation/Changelog/master/Feature-78415-GlobalFluidViewHelperNamespacesMovedToTYPO3Configuration.rst [new file with mode: 0644]
typo3/sysext/fluid/Classes/Core/ViewHelper/ViewHelperResolver.php

index fa06806..4f46ff6 100644 (file)
@@ -274,6 +274,12 @@ return [
         ],
         'fluid' => [
             'interceptors' => [],
+            'namespaces' => [
+                'f' => [
+                    'TYPO3Fluid\\Fluid\\ViewHelpers',
+                    'TYPO3\\CMS\\Fluid\\ViewHelpers'
+                ]
+            ]
         ],
         'linkHandler' => [ // Array: Available link types, class which implement the LinkHandling interface
             'page'   => \TYPO3\CMS\Core\LinkHandling\PageLinkHandler::class,
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-78415-GlobalFluidViewHelperNamespacesMovedToTYPO3Configuration.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-78415-GlobalFluidViewHelperNamespacesMovedToTYPO3Configuration.rst
new file mode 100644 (file)
index 0000000..38ce265
--- /dev/null
@@ -0,0 +1,30 @@
+.. include:: ../../Includes.txt
+
+=================================================================================
+Feature: #78415 - Global Fluid ViewHelper namespaces moved to TYPO3 configuration
+=================================================================================
+
+See :issue:`78415`
+
+Description
+===========
+
+By storing Fluid's namespaces in $GLOBALS['TYPO3_CONF_VARS']['SYS']['fluid']['namespaces'] we can allow adding or
+extending the global namespaces from third party packages in for example ext_localconf.php, or by simply specifying
+the namespace arrays in LocalConfiguration.php.
+
+In terms of performance there is nearly zero impact but in terms of flexibility this should provide the ultimate way
+to manage global namespaces as configuration; something that currently is only possible by implementing custom
+ViewHelperResolver(s).
+
+
+Impact
+======
+
+* Site administrators and third party ViewHelper packages will be able to manipulate the global
+  namespace `f:` in configuration
+* Third party ViewHelper packages will be able to register new global namespaces
+* Template developers can use such global namespaces without first importing them and can use them
+  in all Fluid templates regardless of context.
+
+.. index:: Fluid, LocalConfiguration
\ No newline at end of file
index cf9206a..0b0fd53 100644 (file)
@@ -36,31 +36,28 @@ use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
  * made capable of "mixing" two different ViewHelper namespaces
  * to effectively create aliases for the Fluid core ViewHelpers
  * to be loaded in the TYPO3\CMS\ViewHelpers scope as well.
+ *
+ * Default ViewHelper namespaces are read TYPO3 configuration at:
+ *
+ * $GLOBALS['TYPO3_CONF_VARS']['SYS']['fluid']['namespaces']
+ *
+ * Extending this array allows third party ViewHelper providers
+ * to automatically add or extend namespaces which then become
+ * available in every Fluid template file without having to
+ * register the namespace.
  */
 class ViewHelperResolver extends \TYPO3Fluid\Fluid\Core\ViewHelper\ViewHelperResolver
 {
     /**
-     * Custom merged namespace for CMS Fluid adapter;
-     * will look for classes in both namespaces starting
-     * from the bottom.
-     *
-     * @var array
-     */
-    protected $namespaces = [
-        'f' => [
-            'TYPO3Fluid\\Fluid\\ViewHelpers',
-            'TYPO3\\CMS\\Fluid\\ViewHelpers'
-        ]
-    ];
-
-    /**
      * ViewHelperResolver constructor
      *
-     * Responsible for adding a third namespace in case this is requested from
-     * the admin panel - causes overlaying of `f:` with `f:debug`.
+     * Loads namespaces defined in global TYPO3 configuration. Overlays `f:`
+     * with `f:debug:` when Fluid debugging is enabled in the admin panel,
+     * causing debugging-specific ViewHelpers to be resolved in that case.
      */
     public function __construct()
     {
+        $this->namespaces = $GLOBALS['TYPO3_CONF_VARS']['SYS']['fluid']['namespaces'];
         $configuration = $this->getBackendUser()->uc['TSFE_adminConfig'];
         if (TYPO3_MODE === 'FE'
             && isset($configuration['preview_showFluidDebug'])