Как подготовить TYPO3 Solr sortBy

у нас есть проект TYPO3 и мы используем SOLR в качестве поисковой системы. Мне интересно, как if-оператор / условный выглядит в файлах конфигурации, написанных на TypoScript?

TYPO3: 8.7 Apache Solr для 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

но это определяет имя для параметра get запроса только в том случае, если другой службе требуется конкретное имя. но мне понадобится значение этого параметра и условие 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

я действительно не знаю, как правильно отформатировать это - вложенные условия не поддерживаются, верно?

Всего 2 ответа


У нас был похожий вариант использования, и мы не смогли найти решение с существующим набором функций, поэтому в итоге мы использовали пользовательскую функцию для проверки и перенаправления с использованием правильных параметров.

Однако, это не лучший способ, которым это должно быть решено, поэтому мне любопытны другие предложения.

# default sort by wine_winery_title_stringS
page.1558101700 = USER_INT
page.1558101700.userFunc = VENDORMyExtUserFuncsSolr->applyDefaultSorting

userfunc может выглядеть так:

/**
 * @return void
 */
public function applyDefaultSorting()
{
    $requestUrl = TYPO3CMSCoreUtilityGeneralUtility::getIndpEnv('TYPO3_REQUEST_URL');
    $solrParameters = TYPO3CMSCoreUtilityGeneralUtility::_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 = /^$/] ?


Есть идеи?

10000