EXTBASE:如何获取隐藏的记录。

4
如何在前端获取隐藏的记录?想要获取隐藏的记录,则需要将 hidden 改为 0。
3个回答

9

您可以在您的 Repository 中为单个方法进行此设置:

namespace Vendor\ExtensionName\Domain\Repository;

use TYPO3\CMS\Extbase\Persistence\Repository;

/**
 * Some Repository
 */
class SomeRepository extends Repository
{
    /**
     * Find a record by uid even if it is hidden or deleted
     *
     * @param int $uid
     * @return Some
     */
    public function findHiddenByUid($uid): Some
    {
        $query = $this->createQuery();

        // Here you enable the hidden and deleted Records
        $query->getQuerySettings()
            ->setIgnoreEnableFields(true)
            ->setIncludeDeleted(true);

        // Your query
        $query->matching($query->equals('uid', $uid));
        return $query->execute()->getFirst();
    }
}

或者针对整个存储库进行操作。这包括您从TYPO3\CMS\Extbase\Persistence\Repository继承的方法:

namespace Vendor\ExtensionName\Domain\Repository;

use TYPO3\CMS\Extbase\Persistence\Repository;
use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings;

/**
 * Some Repository
 */
class SomeRepository extends Repository
{
    /**
     * Always return hidden and deleted records from this Repository
     */
    public function initializeObject(): void
    {
        // Load the querySettings
        $querySettings = $this->objectManager->get(Typo3QuerySettings::class);

        // Ignore hidden and deleted records
        $querySettings
            ->setIgnoreEnableFields(true)
            ->setIncludeDeleted(true);

        // Set your settings as default for the entire Repository
        $this->setDefaultQuerySettings($querySettings);
    }
}

4
您可以使用Repository的initializeObject方法,这样我们就不必为Repository中的每个方法编写querySettings。
class SomeRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {

    /**
     * initialize querySettings
    */
    public function initializeObject() {
        $querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');

        // Get Hidden and Deleted Records
        $querySettings->getQuerySettings()->setIgnoreEnableFields(true);

        //Disable Storage pid
        $querySettings->setRespectStoragePage(FALSE);
        $this->setDefaultQuerySettings($querySettings);
    }
}

$querySettings->getQuerySettings()->setIgnoreEnableFields(true) doesn't work, just use $querySettings->setIgnoreEnableFields(true) - andreas

3
重点是在“querySettings”中禁用“respectEnableFields”属性。您可以像这样在您的存储库中执行此操作:
class SomeRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {

    public function findHiddenByUid($uid) {
        $query = $this->createQuery();
        $query->getQuerySettings()->setRespectEnableFields(FALSE);
        $query->matching($query->equals('uid', $uid));
        return $query->execute()->getFirst();
    }
}

5
在 TYPO3 6.0.0 及以上版本中,现在使用 setIgnoreEnableFields(TRUE)setRespectEnableFields 已被弃用并从 TYPO3 6.2.0 中删除。 - Charles Brunet
1
“已被弃用并从TYPO3 6.2.0中删除” - 这方面还有更多信息吗?现在我该如何检索隐藏/已删除的StorageObjects? - j4k3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接