コード例 #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 = \TYPO3\CMS\Core\Category\Collection\CategoryCollection::load($aCategory, TRUE, 'pages', $relationField);
         $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;
 }
コード例 #2
0
 /**
  * @test
  * @return void
  */
 public function canLoadADummyCollectionFromDatabaseAfterRemoveOneRelation()
 {
     // Remove one relation
     $fakeName = array('tablenames' => $this->getUniqueId('name'));
     $this->database->exec_UPDATEquery('sys_category_record_mm', 'uid_foreign = 1', $fakeName);
     // Check the number of records
     $collection = \TYPO3\CMS\Core\Category\Collection\CategoryCollection::load($this->categoryUid, true, $this->tableName);
     $this->assertEquals($this->numberOfRecords - 1, $collection->count());
 }
コード例 #3
0
 /**
  * @test
  * @return void
  */
 public function canLoadADummyCollectionWithoutContentFromDatabase()
 {
     /** @var $collection \TYPO3\CMS\Core\Category\Collection\CategoryCollection */
     $collection = \TYPO3\CMS\Core\Category\Collection\CategoryCollection::load($this->categoryUid, FALSE, $this->tableName);
     // Check the number of record
     $this->assertEquals(0, $collection->count());
 }