/** * 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; }
/** * @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()); }
/** * @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()); }