如何调节 TYPO3 Solr sortBy
How to condition TYPO3 Solr sortBy
我们有一个 TYPO3 项目并使用 SOLR 作为搜索引擎。我想知道用 TypoScript 编写的配置文件中的 if-statement/conditional 是什么样子的?
打字错误3:8.7
适用于 TYPO3 的 Apache Solr - 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
但这仅定义了查询获取参数的名称,以防其他服务需要特定名称。但我需要此参数的值并根据其值对 sortBy 进行条件处理。
编辑:
经过一些研究,我现在处于这种状态:如果设置了查询字符串,则排序有效 - 但如果它为空则无效
[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
我真的不知道如何以正确的方式格式化它 - 不支持嵌套条件对吗?
我们有一个类似的用例,无法找到具有现有功能集的解决方案,因此我们最终使用用户函数来检查并使用正确的参数进行重定向。
我想这不是最好的解决方法,所以我对其他建议很好奇。
# 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);
}
}
希望对您有所帮助
[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 = /^$/]
?
我最终扩展了外部条件并且该页面只有两个块 - 我觉得多余但工作得很好。现有条件之外的条件不起作用 - 嵌套条件是不可能的。所以这是解决方案:
使用 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 =]
希望我可以节省一些研究时间 - 感谢大家的投入
我们有一个 TYPO3 项目并使用 SOLR 作为搜索引擎。我想知道用 TypoScript 编写的配置文件中的 if-statement/conditional 是什么样子的?
打字错误3:8.7 适用于 TYPO3 的 Apache Solr - 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)时进行排序
因此,如果查询字符串看起来像
,则应应用 sortByhttp://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
但这仅定义了查询获取参数的名称,以防其他服务需要特定名称。但我需要此参数的值并根据其值对 sortBy 进行条件处理。
编辑:
经过一些研究,我现在处于这种状态:如果设置了查询字符串,则排序有效 - 但如果它为空则无效
[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
我真的不知道如何以正确的方式格式化它 - 不支持嵌套条件对吗?
我们有一个类似的用例,无法找到具有现有功能集的解决方案,因此我们最终使用用户函数来检查并使用正确的参数进行重定向。
我想这不是最好的解决方法,所以我对其他建议很好奇。
# 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);
}
}
希望对您有所帮助
[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 = /^$/]
?
我最终扩展了外部条件并且该页面只有两个块 - 我觉得多余但工作得很好。现有条件之外的条件不起作用 - 嵌套条件是不可能的。所以这是解决方案:
使用 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 =]
希望我可以节省一些研究时间 - 感谢大家的投入