TYPO3 Extbase:访问外部数据源(Typo3“页面”表)

时间:2013-06-20 11:15:21

标签: php typo3 extbase typo3-6.1.x

我实际上正在为我的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。

请原谅我的英语我知道这不是最好的

2 个答案:

答案 0 :(得分:1)

首先:从您的映射中删除recordType = Tx_MyPublisher_Domain_Model_Page,这会导致您的repo仅包含作为您的页面创建的记录,并且我认为您要gat any 页面。从字面上看,它包括你的陈述的条件,如(取决于TCA设置AND record_type = 'Tx_MyPublisher_Domain_Model_Page' ......

第二次:确保所有查询中的storagePidIGNORED,如果你强行使用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,则需要递归函数。此外,您必须在内容元素和页面之间建立关系。