我实际上正在为我的pagetree和内容元素的xml导出编写扩展。 通过以下示例,我在页面模型上映射了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
}
}
}
}
现在我想检索控制器中的页面......
$pages = $this->pageRepository->findAll();
这个函数为我提供了我的模型表的结果,直到现在它都是空的。 所以我想我的存储库中需要一些“初始化”方法来填充我的模型表, 但直到现在我还没有办法解决这个问题。
有没有针对此问题的解决方案?
我使用Typo3 6.1.1。
请原谅我的英语我知道这不是最好的
答案 0 :(得分:1)
首先:从您的映射中删除recordType = Tx_MyPublisher_Domain_Model_Page
,这会导致您的repo仅包含作为您的页面创建的记录,并且我认为您要gat any 页面。从字面上看,它包括你的陈述的条件,如(取决于TCA设置)AND record_type = 'Tx_MyPublisher_Domain_Model_Page'
......
第二次:确保所有查询中的storagePid
为IGNORED
,如果你强行使用TypoScript storagePid
{39} ;只获取给定页面的子页面...最简单的方法是在整个仓库中避免使用storagePid
,将此方法添加到PageRepository
public function initializeObject() {
$this->defaultQuerySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
$this->defaultQuerySettings->setRespectStoragePage(FALSE);
}
第三次:使用this tip检查pages
表的查询,这不是很舒服,但这是查找原因的最快方法repo没有获得所需的数据(只需复制该语句并将其粘贴到您最喜欢的数据库GUI)。
(最好将其粘贴到您的问题中,以便我们可以看到错误)
如果在调试语句中有一些问题标记如AND pages.pid = ?
,您当然需要将其替换为所需的值AND pages.pid = 123
答案 1 :(得分:0)
我认为你需要设置一个storagePid,因为你的findAll-query依赖于它。
# TS
plugin.tx_yourext {
persistence {
storagePid = {$plugin.tx_yourext.persistence.storagePid}
}
}
# Or in query
$query->getQuerySettings()->setStoragePageIds(array($yourId);
在您的情况下,它可能是0或您想要开始导出的任何页面。但这只会为您提供页面的子页面,其中storagePid为其uid。如果要导出整个pagetree,则需要递归函数。此外,您必须在内容元素和页面之间建立关系。