2017-02-21 118 views
1

我需要獲取具有一個或多個與最近頁面相同的sys_categories的隨機頁面的頁面媒體和摘錄。TYPO3:Extbase通過sys_categories獲取相關頁面

我試圖讓貓IDS的where子句,像這樣:

$categories = $GLOBALS['TSFE']->page['categories']; 
$cats = explode(',',$categories); 
foreach($cats as $cat) { 
    if($whereClauses != '') $whereClauses .= " OR "; 
    $whereClauses .= $cat.' IN pages.categories'; 
} 

但我沒有得到這個工作作爲$this->pageRepository->getRecordsByField 希望任何人的where子句可以幫我訪問該網頁。

這是一個7.6.x TYPO3和extbase

回答

0

pages.categories只包含頁面被分配到類別的數量。

實際的類別ID是以毫米表sys_category_record_mm

2

這些類別分配在MM關係表(sys_category_record_mm)中,因此這些類別不會保存在頁表中。

因此,您必須查詢此表才能將頁面分配給某個類別。

如:

$GLOBALS['TYPO3_DB']->exec_SELECT_mm_query('*', 'sys_category', 'sys_category_record_mm', 'pages', 'tablenames = "pages" AND sys_category.uid = 123') 

編輯:與CategoryCollection用法實例:

$collection = \TYPO3\CMS\Core\Category\Collection\CategoryCollection::load($id, false, 'pages'); 
$items = $collection->getItems(); 
+0

你們兩個是正確的。我已經測試過它: '$ pid = $ GLOBALS ['TSFE'] - > page ['uid']; $ query = \ TYPO3 \ CMS \ Extbase \ Domain \ Repository \ CategoryRepository :: createQuery(); $查詢 - >語句(「SELECT uid_local FROM sys_category_record_mm \t \t \t \t \t \t WHERE \t \t \t \t \t \t表名= '頁' \t \t \t \t \t \t和 \t \t \t \t \t \t uid_foreign = 」。$ PID); $ categories = $ query-> execute();' 但是沒有得到貓的頁面。 –

+0

我不認爲你可以通過一些extbase的東西從類別中獲取頁面。 您可以嘗試使用'\ TYPO3 \ CMS \ Core \ Category \ Collection \ CategoryCollection'來獲取頁面。 –

+0

我爲CategoryCollection添加了一些示例代碼。 –