Search code examples
typo3ext-kesearch

TYPO3 ke_search


I want ke_search to index metadata of pages like 'author' or 'description' (and add it to "content"). I have a class "AdditionalFields" with 'registerAdditionalFields':

$additionalFields[] = 'author';

and then this:

public function modifyPagesIndexEntry($uid, &$pageContent, &$tags, $cachedPageRecords, &$additionalFields)
    {
        if (isset($cachedPageRecords[0][$uid]['author'])
            && $cachedPageRecords[0][$uid]['author'] > 0
        ) {
            $additionalFields['content'] .= $cachedPageRecords[0][$uid]['author'];
        }
    }

but with this the "content" (in the DB) ist replaced by the 'author'. Any ideas?


Solution

  • The easiest way to achive what you want is to implement following hook.

    EXT:your_extension/Classes/Hooks/KeSearchPageIndexerHook.php

    <?php
    namespace VENDOR\YourExtension\Hooks;
    
    use TYPO3\CMS\Core\Database\ConnectionPool;
    use TYPO3\CMS\Core\Utility\GeneralUtility;
    
    class KeSearchPageIndexerHook
    {
        public function modifyPagesIndexEntry(
            $uid,
            &$pageContent,
            $tags,
            $cachedPageRecords,
            $additionalFields,
            $indexerConfig,
            $indexEntryDefaultValues,
            $pageIndexerClass
        )
        {
            $table = 'pages';
            $querybuilderProductgroup = GeneralUtility::makeInstance(ConnectionPool::class)
                ->getConnectionForTable($table)
                ->createQueryBuilder();
    
            $author = $querybuilderProductgroup
                ->select('author')
                ->from($table)
                ->where(
                    $querybuilderProductgroup->expr()->eq('uid', $uid)
                )
                ->execute()
                ->fetchOne();
    
            if($author != '')
            {
                // Be aware that $pageContent is an array with all localizations of the indexed content.
                // $pageContent[0] is the base-language. Just in case you have a multi-language setup.
                $pageContent[0] = "Author: $author " . $pageContent[0];
            }
    
        }
    
    }
    

    And then register the hook in the localconf. EXT:your_extension/ext_localconf.php

    $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ke_search']['modifyPagesIndexEntry'][] =
        \VENDOR\YourExtension\Hooks\KeSearchPageIndexerHook::class;
    

    That should do the job.