如何条件TYPO3 Solr sortBy

问题描述 投票:0回答:3

我们有一个TYPO3项目并使用SOLR作为搜索引擎。我想知道用 TypoScript 编写的配置文件中的 if 语句/条件是什么样的?

打字错误3:8.7 Apache Solr for TYPO3 - ES:7.5.3

例如:我们使用

plugin.tx_solr.search.query.sortBy = data_datax_title_stringS asc

作为以下构面块的排序设置:

plugin.tx_solr.search.faceting.facets {

但我们只希望在 url 查询字符串的某个部分为空时进行排序(q= 或 q=Searchtext)

因此,如果查询字符串看起来像这样,则应应用 sortBy

http://localhost/?tx_solr%5Bq%5D=&L=0&id=2883

并且不应该应用于

http://localhost/?tx_solr%5Bq%5D=Searchtext&L=0&id=2883

这是实际的块:

[globalVar = TSFE:id={$site.config.search_page_blasts}]

    plugin.tx_solr.search.targetPage = {$site.config.search_page_blasts}

config.defaultGetVars {
    tx_solr.filter.0 = result_type_filter:blast
}

plugin.tx_solr.search.query.sortBy = dynamic_field_A_stringS asc
plugin.tx_solr.search.faceting.facets {

    facetX < lib.solr.facets.directBlast
    facetX.field = dynamic_field_X_boolS

}

非常感谢任何帮助

编辑: 我发现

plugin.tx_solr.search.query.getParameter = q

但这仅定义查询获取参数的名称,以防其他服务需要特定名称。但我需要这个参数的值并通过它的值来条件排序。

编辑:

经过一些研究,我现在处于这种状态:如果设置了查询字符串,则排序有效 - 但如果查询字符串为空,则排序无效

[globalVar = GP:q = ""]
    plugin.tx_solr.search.query.sortBy = wine_winery_title_stringS asc
[else]
    plugin.tx_solr.search.query.sortBy =
[end]

[globalVar = TSFE:id={$site.config.search_page_wineries}]
    plugin.tx_solr.search.targetPage = {$site.config.search_page_wineries}

    config.defaultGetVars {
        tx_solr.filter.0 = result_type_filter:winery
    }


    plugin.tx_solr.search.faceting.facets {

        direct_sale < lib.solr.facets.directSale
        direct_sale.field = winery_direct_sale_boolS

我真的不知道如何以正确的方式格式化它 - 不支持嵌套条件,对吗?

solr typo3 typoscript typo3-8.x
3个回答
1
投票

我们有一个类似的用例,但无法找到具有现有功能集的解决方案,因此我们最终使用用户函数来使用正确的参数进行检查和重定向。

我认为这不是解决问题的最佳方法,所以我对其他建议感到好奇。

# default sort by wine_winery_title_stringS
page.1558101700 = USER_INT
page.1558101700.userFunc = VENDOR\MyExt\UserFuncs\Solr->applyDefaultSorting

userfunc 可能如下所示:

/**
 * @return void
 */
public function applyDefaultSorting()
{
    $requestUrl = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL');
    $solrParameters = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('tx_solr');

    $additionalParameterCharacter = '?';
    if(strpos($requestUrl, '?') !== false){
        $additionalParameterCharacter = '&';
    }
    // todo: get solr search parameter name from settings
    if(isset($solrParameters['q']) === false || empty($solrParameters['q'])){
        $redirectUri = $requestUrl . $additionalParameterCharacter . 'tx_solr[sort]=wine_winery_title_stringS+asc';

        header('Location: '.$redirectUri);
    }
}

希望有帮助


0
投票
[globalVar = GP:q = ""]
    plugin.tx_solr.search.query.sortBy = wine_winery_title_stringS asc
[else]
    plugin.tx_solr.search.query.sortBy =
[end]

但是与

[globalString = GP:q = /^$/]


0
投票

我最终扩展了外部条件,并且只为该页面设置了两个块 - 它感觉多余,但工作得很好。现有条件之外的条件不起作用 - 并且嵌套条件是不可能的。

所以这是解决方案:

globalString
使用正则表达式进行比较

[globalVar = TSFE:id={$site.config.search_page_x}] && [globalString = GP:tx_solr|q = /.+/]

globalVar
对于空参数

[globalVar = TSFE:id={$site.config.search_page_x}] && [globalVar = GP:tx_solr|q =]

希望我可以节省一些人的研究时间 - 感谢大家的意见。

© www.soinside.com 2019 - 2024. All rights reserved.