[FEATURE] Multiple stdWrap executed in numeric order
authorPhilipp Gampe <forge.typo3.org@philippgampe.info>
Wed, 21 Dec 2011 23:09:51 +0000 (00:09 +0100)
committerTolleiv Nietsch <info@tolleiv.de>
Wed, 8 Feb 2012 22:14:59 +0000 (23:14 +0100)
Add possibility to use multiple stdWrap-calls in numeric order.
Offers easier usage than the existing stdWrap-chaining across
multiple hierarchy-levels.

 10 = TEXT
 10.value = a
 10.orderedStdWrap {
  30.wrap = |.
  10.wrap = is | working
  10.innerWrap = &nbsp;|&nbsp;
  20.wrap = This|solution
  20.stdWrap.wrap = &nbsp;|&nbsp;
 }

Results in: "This is a working solution."

Change-Id: I7f2c854d3a2466a21056cf3fa2bb118f408bf4fa
Resolves: #28601
Reviewed-on: http://review.typo3.org/3922
Reviewed-by: Jo Hasenau
Tested-by: Jo Hasenau
Reviewed-by: Tolleiv Nietsch
Tested-by: Tolleiv Nietsch
Reviewed-by: Sebastian Fischer
typo3/sysext/cms/tslib/class.tslib_content.php

index 0b4badf..4cb066b 100644 (file)
@@ -198,6 +198,8 @@ class tslib_cObj {
                'append.' => 'array',
                'wrap3' => 'wrap',
                'wrap3.' => 'array',
+               'orderedStdWrap' => 'stdWrap',
+               'orderedStdWrap.' => 'array',
                'outerWrap' => 'wrap',
                'outerWrap.' => 'array',
                'insertData' => 'boolean',
@@ -1847,7 +1849,7 @@ class tslib_cObj {
                        $this->stdWrapRecursionLevel++;
                        $this->stopRendering[$this->stdWrapRecursionLevel] = FALSE;
 
-                       // execute each funtion in the predefined order
+                       // execute each function in the predefined order
                        foreach ($sortedConf as $stdWrapName => $functionType) {
                                // eliminate the second key of a pair 'key'|'key.' to make sure functions get called only once and check if rendering has been stopped
                                if (!$isExecuted[$stdWrapName] &&
@@ -2967,6 +2969,21 @@ class tslib_cObj {
        }
 
        /**
+        * orderedStdWrap
+        * Calls stdWrap for each entry in the provided array
+        *
+        * @param       string          Input value undergoing processing in this function.
+        * @param       array           stdWrap properties for orderedStdWrap.
+        * @return      string          The processed input value
+        */
+       public function stdWrap_orderedStdWrap($content = '', $conf = array()) {
+               $sortedKeysArray = t3lib_TStemplate::sortedKeyList($conf['orderedStdWrap.'], TRUE);
+               foreach ($sortedKeysArray as $key) {
+                       $content = $this->stdWrap($content, $conf['orderedStdWrap.'][$key . '.']);
+               }
+               return $content;
+       }
+       /**
         * outerWrap
         * Eighth of a set of different wraps which will be applied in a certain order before or after other functions that modify the content
         *
@@ -2980,7 +2997,7 @@ class tslib_cObj {
        }
 
        /**
-        * inserData
+        * insertData
         * Can fetch additional content the same way data does and replaces any occurence of {field:whatever} with this content
         *
         * @param       string          Input value undergoing processing in this function.