[BUGFIX] Improve colPos behaviour of SectionViewHelper 05/46005/2
authorGeorg Ringer <georg.ringer@gmail.com>
Sat, 16 Jan 2016 11:29:18 +0000 (12:29 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Sat, 16 Jan 2016 12:15:57 +0000 (13:15 +0100)
Make it possible to render a section menu of content elements
with ignoring the colPos field.

Additionally, a comma separated list of columns can be used
and not only a single colPos.

Resolves: #71733
Releases, master, 7.6
Change-Id: I5f1284ee860c926afd81141d8459efd71cff409d
Reviewed-on: https://review.typo3.org/46005
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/SectionViewHelper.php

index 9ecdabf..d02e89b 100644 (file)
@@ -14,6 +14,7 @@ namespace TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
 
 /**
@@ -56,7 +57,7 @@ class SectionViewHelper extends AbstractViewHelper
     public function initializeArguments()
     {
         $this->registerArgument('as', 'string', 'Name of the template variable that will contain selected pages', true);
-        $this->registerArgument('column', 'integer', 'Column number (colPos) from which to select content', false, 0);
+        $this->registerArgument('column', 'string', 'Column numbers (colPos) from which to select content', false, '0');
         $this->registerArgument('pageUid', 'integer', 'UID of page containing section-objects; defaults to current page', false, null);
         $this->registerArgument('type', 'string', 'Search method when selecting indices from page', false, '');
     }
@@ -81,7 +82,7 @@ class SectionViewHelper extends AbstractViewHelper
         }
 
         return $this->renderChildrenWithVariables(array(
-            $as => $this->findBySection($pageUid, $type, (int)$this->arguments['column'])
+            $as => $this->findBySection($pageUid, $type, $this->arguments['column'])
         ));
     }
 
@@ -99,14 +100,16 @@ class SectionViewHelper extends AbstractViewHelper
      *
      * @param int $pageUid The page uid
      * @param string $type Search method
-     * @param int $column Restrict content by the column number
+     * @param string $column Restrict content by the column number
      * @return array
      */
-    protected function findBySection($pageUid, $type = '', $column = 0)
+    protected function findBySection($pageUid, $type = '', $column = '')
     {
-        $constraints = array(
-            'colPos = ' . (int)$column
-        );
+        $constraints = [];
+        if (trim($column) !== '') {
+            $colPosList = implode(',', GeneralUtility::intExplode(',', $column, true));
+            $constraints[] = 'colPos IN(' . ($colPosList !== '' ?: '0') . ')';
+        }
 
         switch ($type) {
             case 'all':