我实际上正在为我的 pagetree 和内容元素的 xml 导出编写一个扩展。 通过以下示例,我在我的 Page 模型上映射了 typo3“pages”表:
# typo3conf/ext/my_publisher/Configuration/TypoScript/setup.txt
# Module configuration
module.tx_mypublisher.persistence.classes {
Tx_MyPublisher_Domain_Model_Page {
mapping {
tableName = pages
recordType = Tx_MyPublisher_Domain_Model_Page
columns {
uid.mapOnProperty = uid
pid.mapOnProperty = pid
sorting.mapOnProperty = sorting
deleted.mapOnProperty = deleted
title.mapOnProperty = title
is_siteroot.mapOnProperty = is_siteroot
}
}
}
}
现在我想在我的 Controller 中检索页面...
$pages = $this->pageRepository->findAll();
此函数为我提供了我的模型表的结果,该表到目前为止是空的。 所以我想我的存储库中需要一些“初始化”方法来填充我的模型表, 但直到现在我还没有办法解决这个问题。
有人解决这个问题吗?
我使用 Typo3 6.1.1。
请原谅我的英语,我知道这不是最好的
最佳答案
首先:从您的映射中删除 recordType = Tx_MyPublisher_Domain_Model_Page
,这会导致您的存储库仅包含作为您的页面创建的记录,我假设您想要gat 任何 页面。从字面上看,它包括您声明的条件,例如(取决于 TCA 设置)AND record_type = 'Tx_MyPublisher_Domain_Model_Page'
...
其次:确保storagePid
在所有查询中都是IGNORED
,如果您要强制执行一些storagePid
通过 TypoScript 你只会得到给定页面的子页面......最简单的方法是避免 storagePid
在整个 repo 中,将此方法添加到你的 PageRepository
public function initializeObject() {
$this->defaultQuerySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
$this->defaultQuerySettings->setRespectStoragePage(FALSE);
}
第三种:使用this tip对于检查 pages
表的查询,它并不方便,但它是找到为什么你的 repo 没有获得所需数据的最快方法(只需复制语句并将其粘贴到你最喜欢的 DB GUI) .
(最好将其粘贴到您的问题中,这样我们就能看到问题所在)
如果被调试的语句中有AND pages.pid = ?
这样的问号,当然需要用AND pages.pid = 123
替换成需要的值
关于php - TYPO3 扩展库 : Access to external data sources (Typo3 "pages" table),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212184/