Încerc să creez o înregistrare de jurnal a căutărilor efectuate prin intermediul blocului meu de formulare expuse Search API View în Drupal 9.
Din anumite motive, la o căutare nouă, primesc 2 duplicate (3 intrări în total) și se pare că îmi amintesc că am citit undeva că formularele pot fi trimise de mai multe ori. Asa ca as dori sa stiu cum as putea elimina asta.
Actualizare: iată o problemă pentru Drupal 7
https://www.drupal.org/project/views/issues/2088549
De asemenea, la căutările de cuvinte cheie care au ca rezultat „fără rezultate”, nu văd o intrare în jurnal. Acest comportament pare greșit. Folosesc următorul cod cu succes limitat:
/**
* Implementează hook_form_views_exposed_form_alter().
*/
funcția MY_form_views_exposed_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
// Creați o funcție de trimitere search_log pentru watchdog
$view_names = array('search_api_view');
$view = $form_state->getStorage('view');
if ($form_id == 'views_exposed_form' && in_array($view['view']->id(), $view_names)) {
if ($form['#id'] == 'vizualizări-exposed-form-search-api-view-page-1') {
$form['#submit'][] = 'MY_search_api_log';
}
}
}
funcția MY_search_api_log(&$form, FormStateInterface $form_state) {
if ($form_state->getValue('search_api_fulltext') != "") {
// Creați un link
$link = Url::fromRoute('view.search_api_view.page_1', [], ['query' => ['search_api_fulltext' => $form_state->getValue('search_api_fulltext'), ], ]);
// înregistrează trimiterea
\Drupal::logger('search_api_results')->info($form_state->getValue('search_api_fulltext'), ['link' => Link::fromTextAndUrl('results', $link)->toString()]) ;
}
}
Încerc să convertesc această funcție dintr-un cârlig pe care îl folosesc în D7, care funcționează bine:
/**
* Implementează hook_form_views_exposed_form_alter().
*/
funcția MY_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
//Creează o funcție de trimitere search_log pentru watchdog
if($form_state["view"]->base_field == 'search_api_id') {
$form['#submit'][] = 'MY_search_api_log';
}
}
funcția MY_search_api_log(&$form, $form_state) {
dacă ($form_state['values']['search_api_views_fulltext'] != "") {
$link = l('results', '/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);
}
}