コード例 #1
0
 /**
  * Collects all pages for the selected categories, sorted according to configuration.
  *
  * @param string $selectedCategories Comma-separated list of system categories primary keys
  * @param array $configuration TypoScript configuration for the "special." keyword
  * @param \TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject $parentObject Back-reference to the calling object
  * @return string List of selected pages
  */
 public function collectPages($selectedCategories, $configuration, $parentObject)
 {
     $selectedPages = array();
     $categoriesPerPage = array();
     // Determine the name of the relation field
     $relationField = '';
     if (isset($configuration['relation.'])) {
         $relationField = $parentObject->parent_cObj->stdWrap($configuration['relation'], $configuration['relation.']);
     } elseif (isset($configuration['relation'])) {
         $relationField = $configuration['relation'];
     }
     // Get the pages for each selected category
     $selectedCategories = GeneralUtility::intExplode(',', $selectedCategories, TRUE);
     foreach ($selectedCategories as $aCategory) {
         $collection = CategoryCollection::load($aCategory, TRUE, 'pages', $relationField);
         $categoryUid = 0;
         if ($collection instanceof AbstractRecordCollection) {
             $categoryUid = $collection->getUid();
         }
         // Loop on the results, overlay each page record found
         foreach ($collection as $pageItem) {
             $parentObject->getSysPage()->versionOL('pages', $pageItem, TRUE);
             if (is_array($pageItem)) {
                 $selectedPages[$pageItem['uid']] = $parentObject->getSysPage()->getPageOverlay($pageItem);
                 // Keep a list of the categories each page belongs to
                 if (!isset($categoriesPerPage[$pageItem['uid']])) {
                     $categoriesPerPage[$pageItem['uid']] = array();
                 }
                 $categoriesPerPage[$pageItem['uid']][] = $categoryUid;
             }
         }
     }
     // Loop on the selected pages to add the categories they belong to, as comma-separated list of category uid's)
     // (this makes them available for rendering, if needed)
     foreach ($selectedPages as $uid => $pageRecord) {
         $selectedPages[$uid]['_categories'] = implode(',', $categoriesPerPage[$uid]);
     }
     // Sort the pages according to the sorting property
     self::$sortingField = isset($configuration['sorting.']) ? $parentObject->getParentContentObject()->stdWrap($configuration['sorting'], $configuration['sorting.']) : $configuration['sorting'];
     $order = isset($configuration['order.']) ? $parentObject->getParentContentObject()->stdWrap($configuration['order'], $configuration['order.']) : $configuration['order'];
     $selectedPages = $this->sortPages($selectedPages, $order);
     return $selectedPages;
 }