3

我实际上正在为我的页面树和内容元素的 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
      }
    }
  }
}

现在我想检索控制器中的页面......

$pages = $this->pageRepository->findAll();

这个函数为我提供了我的模型表的结果,到目前为止它是空的。所以我认为我的存储库中需要一些“初始化”方法来填充我的模型表,但直到现在我还没有办法解决这个问题。

有没有人解决这个问题的方法?

我使用 Typo3 6.1.1。

对不起,我的英语我知道这不是最好的

4

2 回答 2

1

首先recordType = Tx_MyPublisher_Domain_Model_Page从您的映射中删除,这会导致您的存储库仅包含作为您的页面创建的记录,并且我假设您想要获取任何页面。从字面上看,它包括您声明的条件,例如(取决于 TCA 设置AND record_type = 'Tx_MyPublisher_Domain_Model_Page'...

第二:确保在您storagePidIGNORED所有查询中,如果您storagePid通过 TypoScript 强制执行某些操作,您将只获得给定页面的子页面......最简单的方法是避免storagePid在整个回购中,将此方法添加到您的PageRepository

public function initializeObject() {
    $this->defaultQuerySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
    $this->defaultQuerySettings->setRespectStoragePage(FALSE);
}

第三:使用这个技巧来检查pages表的查询,它不舒服,但是它是找出为什么你的 repo 没有得到所需数据的最快方法(只需复制语句并将其粘贴到你最喜欢的 DB GUI)。

最好将其粘贴到您的问题中,以便我们查看问题所在

如果在调试语句中有一些问号AND pages.pid = ?,当然你需要用所需的值替换它们AND pages.pid = 123

于 2013-06-20T13:52:32.790 回答
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 的页面的子页面。如果要导出整个页面树,则需要一个递归函数。此外,您还必须在内容元素和页面之间建立关系。

于 2013-06-20T11:29:34.643 回答