invokablegmbh / jar_columnrow

Provides a freely definable and universal grid element with bootstrap-based output.
GNU General Public License v3.0
0 stars 0 forks source link

KE-Search Issues #4

Open aschoelling opened 2 months ago

aschoelling commented 2 months ago

Child elements of hidden columnrow elements are indexed unless they themselves are hdden.

DaPedro commented 1 month ago

@aschoelling You are right, you have to extend your ke_search indexer with a "Zombie Check" (visible elements, in invisible columns), here is an example from an older project:

   public function zombieCheck($record) {
        if(!class_exists('FluidTYPO3\\Flux\\Utility\\ColumnNumberUtility')) {
            return false;
        }

        $parents = $this->getFluxParents($record['uid']);
        if(!empty($parents)) {
            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
            $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
            $queryBuilder->select('pid', 'uid', 'hidden', 'deleted', 'CType')
            ->from('tt_content')
            ->where(
                $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($record['uid'], Connection::PARAM_INT))
            );

            $row = $queryBuilder->execute()->fetch();
            $parents = array_merge([$row], $parents);
        }

        $i = 0;
        foreach($parents as $parent) {
            if($parent['hidden'] == '1' || $parent['deleted'] == '1') {
                return true;
            }
            $i++;
        }

        $page = $this->pageRepository->getPage($record['pid']);
        if(!empty($page)) {
            if($page['hidden'] == '1' || $page['deleted'] == '1' || $page['no_search'] == '1') {
                return true;
            }
        }

        return false;
    }

    public function getFluxParents($uid) {
        $result = [];

        if(!class_exists('FluidTYPO3\\Flux\\Utility\\ColumnNumberUtility')) {
            return $result;
        }

        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
        $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
        $queryBuilder->select('colPos')
        ->from('tt_content')
        ->where(
            $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, Connection::PARAM_INT))
        );

        $res = $queryBuilder->execute()->fetch();

        if(isset($res['colPos'])) {
            $parentUid = ColumnNumberUtility::calculateParentUid($res['colPos']);
        }

        if(is_numeric($parentUid) && !empty(intval($parentUid))) {
            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
            $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
            $queryBuilder->select('pid', 'uid', 'hidden', 'deleted', 'CType')
            ->from('tt_content')
            ->where(
                $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($parentUid, Connection::PARAM_INT))
            );

            $parent = $queryBuilder->execute()->fetch();
            if(!empty($parent)) {
                $result = array_merge([$parent], $this->getFluxParents($parent['uid']));
            }
        }

        return $result;
    }