📜  Typo3 新闻搜索表单参数丢失分页 - Html (1)

📅  最后修改于: 2023-12-03 14:48:05.867000             🧑  作者: Mango

Typo3 新闻搜索表单参数丢失分页 - Html

最近我们在使用 Typo3 进行新闻搜索时遇到了一个问题,我们发现分页时搜索参数丢失,导致分页不生效,这个问题我们分析后发现是由于代码中缺少了必要的代码所导致的。

问题分析

我们的搜索表单提交到 search 页面,然后在 search 页面的 action 中设置了搜索表单的参数,如下所示:

<form method="get" action="/search">
    <input type="text" name="q">
    <button type="submit">搜索</button>
</form>

然后在 search 页面中,我们使用 Typo3 的搜索插件来进行 SQL 查询,然后将查询结果逐个输出到页面上。

$searchResult = $GLOBALS['TSFE']->cObj->cObjGetSingle(
    'SEARCH_RESULT',
    array(
        'pid' => '123',
        'search.' => array(
            'searchPage' => '456',
            'searchFields' => 'tx_news_domain_model_news.title,tx_news_domain_model_news.bodytext',
            'orderBy' => 'datetime DESC',
            'groupBy' => 'tx_news_domain_model_news.uid',
        ),
    )
);

print $searchResult;

在这个代码中,我们设置了 pid 参数来指定搜索的页面 ID,以及 searchPagesearchFieldsorderBygroupBy 等参数来指定搜索的具体方式。

但是当我们进行分页时,我们发现搜索参数丢失,导致分页不生效。我们分析后发现,这是因为在分页时我们没有将搜索参数带入到分页链接中去。

解决方案

要解决这个问题,我们需要将搜索参数带入到分页链接中去。我们可以通过下面的代码来实现这个功能:

$currentPageNumber = $this->cObj->stdWrap($this->cObj->data['GP']['curPage'], 1);
$pagesConfig['q'] = isset($_GET['q']) ? $_GET['q'] : '';

$pagination = $GLOBALS['TSFE']->cObj->cObjGetSingle(
    'COA_INT',
    array(
        '10 = TEXT',
        '10.value = <nav><ul class="pagination">',
        '20 = USER',
        '20.userFunc = TYPO3\\CMS\\Fluid\\Core\\ViewHelpers\\Widget\\PaginateViewHelper->render',
        '20 {
            itemsPerPage = 10
            insertAbove = 1
            insertBelow = 1

            collection = ' . $searchResultArray . '

            data = paginate

            # Prev and next texts
            prevText = «
            nextText = »

            # Wrap for nav
            wrap = <li>|</li>
            wrap.insertData = 1

            # Active current page
            active = 1

            # Insert current page into links
            insertData = 1

            # Current page number
            curPage = ' . $currentPageNumber . '

            # Link configuration
            link {
                parameter.data = parameters : allParams
                additionalParams = ' . http_build_query($pagesConfig) . '
                additionalParams.insertData = 1
                useCacheHash = 1
            }
        }',
        '30 = TEXT',
        '30.value = </ul></nav>',
    )
);

print $pagination;

在这个代码中,我们首先将搜索参数 q 保存到一个变量 $pagesConfig 中去,然后在分页链接的 additionalParams 中将其添加到分页链接中去。

这样,当我们进行分页时,搜索参数就会被带入到分页链接中去了,从而解决了搜索参数丢失的问题。

总结起来,这个问题的解决方案就是:将搜索参数带入到分页链接中去。