Kiedy użyłem odsłoniętego filtra, wybór filtra jest przekazywany jako para nazwa / wartość w adresie URL, na przykład:
members?field_a=valuea&field_b=valueb
Jak mogę go skonfigurować, aby używał więcej adresów URL w stylu „pathauto”:
members/valuea/valueb
Odpowiedzi:
Mój kolega już jakiś czas temu stworzył moduł o nazwie dane ścieżki . Jego intencją było rozwiązanie tego samego problemu. Niestety okazało się, że jest ono sprzeczne z regularnych aliasów ścieżek, więc będzie pracować na miejscu jak drupal.org że nie używa aliasy, ale będzie przerwać łącza na ścieżce-alias korzystających z serwisu.
Obecnie uważam, że jedynym ogólnym sposobem rozwiązania tego problemu jest albo manipulowanie adresami URL na warstwie httpd, albo użycie hook_url_inbound_alter i hook_url_outbound_alter . Więcej informacji na temat wspomnianych haczyków można znaleźć w tym pytaniu .
Gdybym jednak sam wykonał kolejną sesję zdjęciową, spróbowałbym zamiast tego zastosować rozwiązanie specyficzne dla Widoku, ponieważ ten problem jest na tyle powszechny, że uzasadnione jest posiadanie modułu do tego.
W hook_views_pre_build można pobrać dane z adresu URL, np. „Członkowie / wartośća / wartośćb”, wcisnąć te wartości do $ _GET ['q'], pozwolić widokom zbudować zapytanie, wyświetlając argumenty „w adresie URL”, a następnie usunąć je ponownie w hook_views_post_build .
źródło
Istnieje moduł Query Parameters To URL , który niedawno wydałem, który rozwiązuje opisywany przez Ciebie problem:
Za pomocą prostego wyrażenia regularnego lub za pomocą haka modułu można skonfigurować, które ścieżki powinny zostać przepisane jako czyste komponenty URL.
W ten sposób możesz przekształcić URL odsłoniętego filtru Wyświetlenia
http://example-site.com/events?field_category_id[0]=100&field_category_id 1 = 101 i nazwa_autora_pola [0] = John i nazwa_autora_pola [0] = Łania
na http://example-site.com/events/p/field_category_id/0__100--1__101/field_author_name/0__John/field_author_sename/0__Doe
Pod nim używa hook_url_inbound_alter, hook_url_outbound_alter i hook_init z przekierowaniami, jeśli to konieczne.
źródło
Odsłonięte filtry to formularze, co oznacza, że miejsce, do którego przekierowują (atrybut „akcji”), musi być znane, zanim użytkownik wybierze jakąkolwiek opcję. Nie możemy więc przekierowywać go do żadnego ładnego adresu URL zawierającego informacje o jego wyborze. Obejścia:
JavaScript. Użyj JavaScript, aby zmieniać na bieżąco atrybut „akcji” odsłoniętej formy filtra w oparciu o opcje, które wybrał użytkownik, i ustaw „akcję” na adres URL odpowiedniego widoku z skonfigurowanymi odpowiednimi filtrami kontekstowymi. Ale wątpię, czy byłoby to „przyjazne SEO” (proszę, popraw mnie, jeśli się mylę).
Wykonaj podwójne przekierowanie. Korzystając z hook_form_alter, po uzyskaniu formularza przekieruj użytkownika na adres URL odpowiedniego widoku, z skonfigurowanymi właściwymi filtrami kontekstowymi, na podstawie jego danych wejściowych. Może to wymagać potwierdzenia użytkownika w niektórych przeglądarkach, więc może być bardzo irytujące.
W obu powyższych metodach należy użyć https://drupal.org/project/views_expost, aby zmienić metodę tych formularzy na POST, aby zmienne nie zanieczyszczały adresów URL użytkowników.
Najważniejsze jest to, że jeśli potrzebujesz ładnych adresów URL z widocznymi filtrami - prawdopodobnie robisz coś złego. Ponieważ uważam, że służą one wyłącznie do filtrowania danych i nie powinny być używane do definiowania nowych stron w witrynie. Jeśli potrzebujesz - możesz utworzyć widok skonfigurowany jako menu, a adresy URL w tym menu przekierowują użytkownika do tego samego widoku, którym jest teraz, ale z różnymi filtrami kontekstowymi.
źródło
Z perspektywy programowej zawsze możesz do tego użyć hook_url_inbound_alter () i hook_url_outbound_alter () .
Możesz wypróbować parametry zapytania do modułu URL lub jeśli korzystasz z interfejsu API wyszukiwania i aspektów , możesz użyć ładnych ścieżek interfejsu API Facet .
Możesz także przekonwertować widok, aby użyć argumentów na swojej ścieżce i użyć modułu Przekierowanie .
Poza powyższym nie ma łatwego sposobu na osiągnięcie tego, ponieważ Drupal 8 wciąż czeka na udostępnienie; zobacz Zezwalaj na ciągi zapytań w aliasach URL .
Kiedy używasz paneli, które używają widoków, a na przykład lepiej widocznych filtrów, możesz zrobić kilka hacków takich jak (przykład URL: / panel_url? Category = 123):
Aby uzyskać więcej informacji, zobacz Przekazywanie argumentów z adresu URL w panelu do okienka lub bloku .
Na koniec możesz użyć hook_menu (), aby zdefiniować własne wywołania zwrotne menu i załadować programowo widok.
źródło
Możesz użyć następującego kodu.
źródło