如何让extbase扩展识别插件中的存储页面?

问题描述 投票:0回答:3

在 TYPO3 6.1.7 上使用扩展构建器构建的 extbase 扩展中,我没有通过 Typoscript 设置任何 storagePid。

但是我在插件中设置了“记录存储页面”:

enter image description here

我希望它现在只会从此页面获取记录。 但事实并非如此,它只是返回该表中的所有项目。

如何让扩展程序识别插件中的设置? 或者(如果它应该开箱即用)我如何找出它为什么不这样做?

php typo3 extbase typo3-6.1.x
3个回答
18
投票

当我的扩展的前端插件(TYPO3 7.6.4)拒绝使用插件的“页面”字段(“记录存储页面”)时,我做了很多研究,所以我想分享我的发现:

我的扩展程序名称是“tx_dhsnews”,我的插件名称是“infobox”

  1. setRespectStoragePage 必须设置为 true(默认):$query->setRespectStoragePage(TRUE)

  2. 在打字稿设置中,插件特定的 storagePid plugin.tx_dhsnews_infobox.persistence.storagePid 根本不能出现!即使是空值也不行!否则“页面”字段将不被尊重!

仅此而已。扩展生成器刚刚创建了一个打字稿设置,其中特定插件“infobox”的 storagePid 设置为空。这导致插件不尊重“页面”字段。

在扩展级别设置 storagePid 没有问题(例如“tx_dhsnews..persistence.storagePid”),该值将与“pages”(“记录存储页面”)中给出的值合并,但作为很快,特定于插件的 tx_[extension]_[plugin].persistence.storagePid 就会出现在打字稿中,它将推翻其他一切!

希望这能帮助某人节省一些时间+紧张


8
投票

将以下代码添加到您的存储库中

namespace <Vendor>\<Extkey>\Domain\Repository;

class ExampleRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {

    // Example for repository wide settings
    public function initializeObject() {
        /** @var $defaultQuerySettings \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */
        $defaultQuerySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
        // add the pid constraint
        $defaultQuerySettings->setRespectStoragePage(TRUE);
}

    // Example for a function setup changing query settings
    public function findSomething() {
        $query = $this->createQuery();
        // add the pid constraint
        $query->getQuerySettings()->setRespectStoragePage(TRUE);
        // the same functions as shown in initializeObject can be applied.
        return $query->execute();
    }
}

您可以在此页面找到更多信息 http://forge.typo3.org/projects/typo3v4-mvc/wiki/Default_Orderings_and_Query_Settings_in_Repository


1
投票

我实际上修改了我的 MVC 控制器以根据实际页面实现记录过滤(storagePid==page.id)..看起来像这样:

use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class MyMVCController extends ActionController {
protected function initializeAction() {
    parent::initializeAction();
    //fallback to current pid if no storagePid is defined
    $configuration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
    if (empty($configuration['persistence']['storagePid'])) {
        $currentPid['persistence']['storagePid'] = GeneralUtility::_GP('id');
        $this->configurationManager->setConfiguration(array_merge($configuration, $currentPid));
    }
[..]

我使用了http://wiki.t3easy.de/的解决方案并修改了storagePid的值,因为我开发了一个后端模块。 他的 tscript 示例对我不起作用.. 另外,Thomas Deuling 的一篇文章对于这个主题也很有趣......

但我仍然没有把整个联系纳入我的脑海..想回到 symfony xD

编辑:对于回购查询的修改,这篇文章看起来也很有趣:

https://forge.typo3.org/projects/typo3v4-mvc/wiki/Default_Orderings_and_Query_Settings_in_Repository

© www.soinside.com 2019 - 2024. All rights reserved.