Как подготовить TYPO3 Solr sortBy - PullRequest
0 голосов
/ 17 мая 2019

у нас есть проект TYPO3 и мы используем SOLR в качестве поисковой системы. Мне интересно, как выглядит условное утверждение / условие в файлах конфигурации, написанных на 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

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

Ответы [ 3 ]

1 голос
/ 17 мая 2019

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

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

# 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 голосов
/ 20 мая 2019

Я закончил тем, что расширил внешнее условие и просто имел два блока для этой страницы - я чувствую себя излишним, но работает отлично.условие вне существующего не работало - и вложенные условия невозможны.Итак, вот решение:

с 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 =]

надеюсь, я смогу немного спасти кого-товремя исследования - спасибо всем за их вклад

0 голосов
/ 17 мая 2019
[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 = /^$/]?

...