gSorry
gSorry

Reputation: 1274

EXTBASE: How to get hidden record

How to get hidden record in frontend? Want to get hidden record then change hidden to 0.

Upvotes: 4

Views: 9300

Answers (3)

nito
nito

Reputation: 1313

Your can make this settings for a singe method in your 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 SomeRepository
     */
    public function findHiddenByUid(int $uid): SomeRepository
    {
        $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();
    }
}

Or for the entire Repository. This includes the methods that you inherit from 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);
    }
}

Upvotes: 9

gSorry
gSorry

Reputation: 1274

The point is to disable the respectEnableFields property in your querySettings. You can do this in your repository like this:

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();
    }
}

Upvotes: 3

Vishal Tanna
Vishal Tanna

Reputation: 1305

You can use initializeObject Method of Repository so we did not have to write the querySettings for each Methods in Repository

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);
    }
}

Upvotes: 4

Related Questions