Doskonałe pytanie. AFAIK, na razie nie jest możliwe, z wyjątkiem kodu. Znalazłem to, co wydaje się rozwiązać problem, ale jeszcze go nie przetestowałem.
Mam włączony czysty adres URL, dla innych stron jest on zapisany w sposób przyjazny dla SEO, ale dla odsłoniętego filtru tylko jego ciąg zapytania, np. Kiedy idę do dowolnego artykułu, URL jest przyjazny dla SEO. Daj mi znać, jeśli czegoś brakuje.
Widzę, że może to mieć jakiś sens, ale zanim popadnę w kłopoty, faktycznie szukam dowodów. Co jest ważniejsze: „przyjazny dla SEO adres URL” lub treść odpowiadająca typowym wyszukiwaniom? Jeśli strona wyników ma mocny tytuł, podejrzewam, że będzie o wiele cenniejsza niż jej adres URL. W każdym razie z pewnością skoncentrowałbym się na treści.
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 .
dzięki. Nie wygląda to banalnie. Chcę go głównie do celów SEO, ponieważ pająki wyszukiwarek nie czołgają się poza formularzem. Mogę po prostu użyć drugiego widoku z filtrami kontekstowymi i osadzić odsłonięty blok filtrów. Następnie potrzebuję tylko JavaScript, aby odsłonięty filtr został przesłany do mojego oryginalnego widoku.
hmm, jeśli to zrobię, że mogę użyć javascript, aby zmodyfikować url forma dostać od strony? nazwa1 = wartość1 i nazwa2 = wartość2 do strony / wartosc1 / value2 stackoverflow.com/questions/5815995/... . Jeśli javascript jest wyłączony, mam oryginalny widok jako rezerwowy.
Istnieje moduł Query Parameters To URL , który niedawno wydałem, który rozwiązuje opisywany przez Ciebie problem:
Ten moduł umożliwia przepisanie parametrów zapytań URL na komponenty Wyczyść URL na określonych ścieżkach.
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
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.
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):
/**
* Implements hook_url_inbound_alter().
*/function foo_url_outbound_alter(&$path,&$options, $original_path){if(arg(0)=='panel_url'){// Convert URL like: /panel_url?category=29 into /panel_url/term_name (SEO friendly)
$path_info = parse_url($path);switch(@$path_info['path']){case'panel_url/term_name':case'panel_url/term_name2':
$path ='panel_url/all';// Convert loopy urls into base url}if(strpos($path,'?category=')!== FALSE){// Convert term id into human name
list(, $tid)= explode('=', current(explode('&', $path_info['query'])));// get tid from URL
$term_name = strtolower(taxonomy_term_load((int)$tid)->name);
$path ='/panel_url'.'/'. $term_name;// See also: $path_info['path']}}}
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.