4

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

gSorry
  • 1,254
  • 2
  • 21
  • 29

3 Answers3

9

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

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);
    }
}
nito
  • 1,157
  • 8
  • 21
4

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);
    }
}
Vishal Tanna
  • 1,165
  • 2
  • 12
  • 36
  • `$querySettings->getQuerySettings()->setIgnoreEnableFields(true)` doesn't work, just use `$querySettings->setIgnoreEnableFields(true)` – andreas Oct 19 '16 at 17:23
3

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();
    }
}
nito
  • 1,157
  • 8
  • 21
gSorry
  • 1,254
  • 2
  • 21
  • 29
  • 5
    In TYPO3 version 6.0.0 and above, this is now `setIgnoreEnableFields(TRUE)`. `setRespectEnableFields` is deprecated and removed from TYPO3 6.2.0. – Charles Brunet Sep 30 '14 at 13:57
  • 1
    "is deprecated and removed from TYPO3 6.2.0" - any more info on this? How do i retrieve hidden/deleted StorageObjects now? – j4k3 May 05 '15 at 13:28