最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

ext kesearch - TYPO3 ke_search - Stack Overflow

programmeradmin1浏览0评论

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./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.

发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>