szkoda, że post q0rban był tak często głosowany, ponieważ nie zadziała - jhedstrom podaje dokładny opis tego, dlaczego po prostu przesłonięcie ścieżki za pomocą hook_menu_alter ulegnie awarii i spaleniu.
aaronbauman
Odpowiedzi:
3
Zwykle robię to za pomocą hook_menu_alter (). Następnie możesz dostosować adres URL w dokładnie taki sposób, jaki wybierzesz:
/**
* Implements hook_menu_alter().
*/function example_menu_alter(&$menu){// Ensure Apache Solr is the default and that the menu item exists.if(variable_get('apachesolr_search_make_default',0)&& isset($menu['search/apachesolr/%menu_tail'])){
$menu['search/%menu_tail']= $menu['search/apachesolr/%menu_tail'];
unset($menu['search/apachesolr/%menu_tail']);}}
Zmiana ścieżki wyszukiwania nie jest trywialna, jeśli używasz tylko modułu wyszukiwania apachesolr. Ponieważ zależy to od głównego modułu wyszukiwania, ścieżka jest prawie zakodowana na stałe. To zależy od wyszukiwania / {module} /% menu_tail. Jeśli spojrzysz na search_view () , wywołanie zwrotne dla modułu wyszukiwania, przekonasz się, że wywołuje funkcję search_get_keys () , która oczekuje, że klucze wyszukiwania znajdują się w określonej części ścieżki. Moduł wyszukiwania apachesolr również używa tej funkcji do pobierania kluczy, więc implementacja prostego hook_menu_alter () nie zadziała sama.
Jak wspomniano w innej odpowiedzi tutaj, jeśli jesteś w stanie uruchomić Views 3.x, najlepszym rozwiązaniem jest skorzystanie z modułu wyświetleń apachesolr . Za pomocą tego modułu możesz łatwo zdefiniować dowolną liczbę niestandardowych ścieżek dla wyników wyszukiwania.
Jeśli nie możesz uruchomić 3.x, musisz użyć kombinacji form alter (w szczególności search_form) i niestandardowych wywołań menu, aby pomyślnie zmienić domyślną ścieżkę wyszukiwania.
Powinno to działać, jeśli umieścisz go w ustawieniach. Php:
function custom_url_rewrite_outbound(&$path,&$options, $original_path){// Filter to get only the apache solr links with filters so it doesn't launch it for every link of our websiteif($path =='search/apachesolr_search/'&& strpos($options['query'],'filters')!== FALSE){
$new_path = $path.'?'.urldecode($options['query']);// See if we have a url_alias for our new path
$sql ='SELECT dst FROM {url_alias} WHERE src="%s"';
$row = db_result(db_query($sql, $new_path));// If there is a dst url_alia, we change the path to it and erase the queryif($row){
$path = $row;
$options['query']='';}}}function custom_url_rewrite_inbound(&$result, $path, $path_language){// See if we have a url_alias for our new path
$sql ='SELECT src FROM {url_alias} WHERE dst="%s"';
$row = db_result(db_query($sql, $path));if($row){// We found a source path
$parts = preg_split('/[\?\&]/', $row);if(count($parts)>1){
$result = array_shift($parts);// That's important because on my website, it doesn't work with the / at the end of resultif($result[strlen($result)-1]=='/'){
$result = substr($result,0, strlen($result)-1);}// Create the $_GET with the filterforeach($parts as $part){
list($key, $value)= explode('=', $part);
$_GET[$key]= $value;// Add this because the pager use the $_REQUEST variable to be set
$_REQUEST[$key]= $value;}}}}
A następnie, gdy tworzysz pozycję menu, umieszczasz link do apache solr: search / apachesolr_search /? Filter = tid: 13
I utwórz alias adresu URL dla wyszukiwania / apachesolr_search /? Filtry = tid: 13 podobnych produktów / tv.html
Sprawdź Dodawanie niestandardowych ścieżek wyszukiwania z hook_menu przez facetów z Evolving Web. Mówi o tym, jak napisali niestandardowy moduł do tworzenia przyjaznych adresów URL dla wyszukiwań Solr. Prawdopodobnie będziesz musiał go trochę ulepszyć, ale to dobry punkt wyjścia.
Jeśli chcesz tylko zmienić search / apachesolr_search / na coś innego, na przykład „ekwipunek”, możesz wypróbować moduł Global redirect .
Sztuczka polega na utworzeniu 2 aliasów - jednego dla wyszukiwania / apachesolr_search / (dla elementów fasetowanych) i drugiego bez końcowego ukośnika (dla głównej strony wyszukiwania). Globalne przekierowanie może odmówić utworzenia 2 aliasów dla tego samego miejsca docelowego, ale możesz wstawić go bezpośrednio do bazy danych.
Odpowiedzi:
Zwykle robię to za pomocą hook_menu_alter (). Następnie możesz dostosować adres URL w dokładnie taki sposób, jaki wybierzesz:
źródło
Zmiana ścieżki wyszukiwania nie jest trywialna, jeśli używasz tylko modułu wyszukiwania apachesolr. Ponieważ zależy to od głównego modułu wyszukiwania, ścieżka jest prawie zakodowana na stałe. To zależy od wyszukiwania / {module} /% menu_tail. Jeśli spojrzysz na search_view () , wywołanie zwrotne dla modułu wyszukiwania, przekonasz się, że wywołuje funkcję search_get_keys () , która oczekuje, że klucze wyszukiwania znajdują się w określonej części ścieżki. Moduł wyszukiwania apachesolr również używa tej funkcji do pobierania kluczy, więc implementacja prostego hook_menu_alter () nie zadziała sama.
Jak wspomniano w innej odpowiedzi tutaj, jeśli jesteś w stanie uruchomić Views 3.x, najlepszym rozwiązaniem jest skorzystanie z modułu wyświetleń apachesolr . Za pomocą tego modułu możesz łatwo zdefiniować dowolną liczbę niestandardowych ścieżek dla wyników wyszukiwania.
Jeśli nie możesz uruchomić 3.x, musisz użyć kombinacji form alter (w szczególności search_form) i niestandardowych wywołań menu, aby pomyślnie zmienić domyślną ścieżkę wyszukiwania.
źródło
Powinno to działać, jeśli umieścisz go w ustawieniach. Php:
A następnie, gdy tworzysz pozycję menu, umieszczasz link do apache solr: search / apachesolr_search /? Filter = tid: 13
I utwórz alias adresu URL dla wyszukiwania / apachesolr_search /? Filtry = tid: 13 podobnych produktów / tv.html
Znalezione przez: http://drupal.org/node/783836#comment-4136475
źródło
Możesz użyć widoków Solr do wyszukiwania w witrynie.
źródło
Sprawdź Dodawanie niestandardowych ścieżek wyszukiwania z hook_menu przez facetów z Evolving Web. Mówi o tym, jak napisali niestandardowy moduł do tworzenia przyjaznych adresów URL dla wyszukiwań Solr. Prawdopodobnie będziesz musiał go trochę ulepszyć, ale to dobry punkt wyjścia.
źródło
Co powiesz na utworzenie nowego wywołania zwrotnego menu, takiego jak poniżej, aby apachesolr zwrócił wyniki dla tej ścieżki?
źródło
Lub możesz po prostu zmodyfikować moduł, który to robi: Ścieżka niestandardowa Apache Solr .
źródło
Jeśli chcesz tylko zmienić search / apachesolr_search / na coś innego, na przykład „ekwipunek”, możesz wypróbować moduł Global redirect .
Sztuczka polega na utworzeniu 2 aliasów - jednego dla wyszukiwania / apachesolr_search / (dla elementów fasetowanych) i drugiego bez końcowego ukośnika (dla głównej strony wyszukiwania). Globalne przekierowanie może odmówić utworzenia 2 aliasów dla tego samego miejsca docelowego, ale możesz wstawić go bezpośrednio do bazy danych.
źródło