ext kesearch - TYPO3 ke_search - Stack Overflow

admin2025-04-15  2

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?

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?

Share Improve this question asked Feb 4 at 10:23 Michael ShornyMichael Shorny 233 bronze badges 3
  • Don't know what you are doing there. But maybe check this out: docs.typo3.org/p/teaminmedias-pluswerk/ke_search/main/en-us/… – Mogens Commented Feb 5 at 22:06
  • Thank you for answering! I am using pages for something like blog-posts in TYPO3. A single post would have its metadata in the metadata of the Page itself. Of course I've seen the manual you linked to, but it does not help (me), since it adds fields from "tt_content" and not from "pages" – Michael Shorny Commented Feb 6 at 12:29
  • Pretty sure the content that is being indexed is the one in $pageContent. Which is an array of: sys_language_uid => full text content. You usually only use those additionalFields, if you want to use them seperatedly later in - for example - the fluid templates. – Nitori Commented Feb 7 at 13:22
Add a comment  | 

1 Answer 1

Reset to default 0

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.

转载请注明原文地址:http://www.anycun.com/QandA/1744727646a86782.html