Я пытаюсь создать запись в журнале поиска, сделанного с помощью моего блока формы Search API View в Drupal 9.
По какой-то причине при совершенно новом поиске я получаю 2 дубликата (всего 3 записи), и кажется, что я где-то читал, что формы можно отправлять несколько раз. Поэтому я хотел бы знать, как я мог бы устранить это.
Обновление: вот проблема для Drupal 7
https://www.drupal.org/project/views/issues/2088549
Кроме того, при поиске по ключевым словам, которые приводят к «отсутствию результатов», я не вижу записи в журнале. Такое поведение кажется удачным. Я использую следующий код с ограниченным успехом:
/**
* Реализует hook_form_views_exposed_form_alter().
*/
функция MY_form_views_exposed_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
// Создаем функцию отправки search_log для сторожевого таймера
$view_names = массив('search_api_view');
$view = $form_state->getStorage('view');
if ($form_id == 'views_exposed_form' && in_array($view['view']->id(), $view_names)) {
if ($form['#id'] == 'views-exposed-form-search-api-view-page-1') {
$form['#submit'][] = 'MY_search_api_log';
}
}
}
функция MY_search_api_log(&$form, FormStateInterface $form_state) {
если ($form_state->getValue('search_api_fulltext') != "") {
// Создаем ссылку
$link = Url::fromRoute('view.search_api_view.page_1', [], ['query' => ['search_api_fulltext' => $form_state->getValue('search_api_fulltext'), ], ]);
// регистрируем отправку
\Drupal::logger('search_api_results')->info($form_state->getValue('search_api_fulltext'), ['link' => Link::fromTextAndUrl('results', $link)->toString()]) ;
}
}
Я пытаюсь преобразовать эту функцию из хука, который я использую в D7, который отлично работает:
/**
* Реализует hook_form_views_exposed_form_alter().
*/
функция MY_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
//Создаем функцию отправки search_log для сторожевого таймера
if($form_state["view"]->base_field == 'search_api_id') {
$form['#submit'][] = 'MY_search_api_log';
}
}
функция MY_search_api_log(&$form, $form_state) {
если ($ form_state['значения']['search_api_views_fulltext'] != "") {
$link = l('результаты', '/search-results', ['query' => ['search_api_views_fulltext' => $form_state['values']['search_api_views_fulltext'], ], ]);
watchdog('search_api_results', $form_state['values']['search_api_views_fulltext'], [], WATCHDOG_INFO, $link);
}
}