Jestem zajęty pracą nad witryną na moim hoście lokalnym, która musi zawierać linki do treści innych niż Drupal.
Mam aktualne ścieżki menu ustawiane tak: http://mylocalsite/the_folder_for_the_other_content
. Gdy próbuję
<front>/the_folder_for_the_other_content
albo /the_folder_for_the_other_content
albo the_folder_for_the_other_content
, otrzymuję błąd „Ścieżka«whatever_I_use»jest nieprawidłowy lub nie masz dostępu do niego.”
Kiedy wchodzę na żywo, oczywiście potrzebuję wszystkich elementów menu, na które ma wskazywać http://myrealsite/the_folder_for_the_other_content
.
Jak mogę to skonfigurować, aby nie musiałem edytować wszystkich ścieżek menu po uruchomieniu?
http://example.com/
.Odpowiedzi:
Odpowiedź kiamlaluno nie do końca zadziałała. Użycie% menu_tail spowodowało burzę błędów, że funkcja menu_tail_load miała problemy z brakującymi argumentami:
To, co zadziałało, było dla mnie
Następnie mógłbym wyświetlać pliki w folderze sites / d8 / files (i podfolderach), używając elementów menu ze ścieżkami takimi jak
sites/d8/files/Documents/MyFile.pdf
System menu wygeneruje następnie link podobny do
href="https://drupal.stackexchange.com/sites/d8/files/Documents/MyFile.pdf"
Jeśli nie użyjesz niestandardowego modułu menu, system menu odrzuci ścieżkę zaczynającą się jak wyżej.
Jeśli spróbujesz użyć ścieżki podobnej
http:sites/d8/files/Documents/MyFile.pdf
, spowoduje to utworzenie linku podobnegohref="http:sites/d8/files/Documents/MyFile.pdf"
, który zadziała, gdy będziesz w katalogu głównym witryny, ale gdy będziesz na stronie z treścią, przeglądarka zinterpretuje adres URL względem strony z treścią, i to nie zadziała.Jeśli użyjesz ścieżki podobnej
http:/sites/d8/files/Documents/MyFile.pdf
, system menu zaakceptuje ją, ale system menu wygeneruje link podobny do tegohref="http:/sites/d8/files/Documents/MyFile.pdf"
, który przeglądarka (przynajmniej Safari) będzie interpretować jakohref="http://sites/d8/files/Documents/MyFile.pdf"
, i nie uda się znaleźć serwera o nazwie „strony”.(Podczas dalszego dochodzenia przyczyną niepowodzenia kodu przy użyciu menu_tail jest konieczność dodania „argumentów ładowania”, jak zauważono tutaj: http://api.drupal.org/api/drupal/includes--menu.inc/function / menu_tail_load / 7. Jeśli dodasz
'load arguments' => array('%map', '%index'),
do definicji $ items w kodzie kiamlaluno, to zadziała. Kwestia, czy menu_tail_load powinien wymagać jawnych argumentów ładowania jest również omawiana tutaj: http://drupal.org/node/298561 )(Nie zapomnij włączyć nowego modułu, w przeciwnym razie system menu nie zaakceptuje nowych linków)
źródło
Po dodaniu nowego łącza łącze jest sprawdzane za pomocą menu_edit_item_validate () , które wywołuje funkcję drupal_valid_path () w celu sprawdzenia, czy ścieżka jest poprawna, lub można uzyskać do niej dostęp od użytkownika.
drupal_valid_path()
zwracaTRUE
jeśli<front>
(<front>/directory
lub wykluczone są podobne ścieżki)TRUE
)Oprócz korzystania z bezwzględnych adresów URL jedynym rozwiązaniem jest posiadanie niestandardowego modułu, który definiuje wywołanie zwrotne menu powiązane ze ścieżką, której chcesz użyć.
Kiedy używasz adresu URL wskazującego na plik lub katalog, serwer sieciowy powinien pokazywać ten plik lub katalog, bez wywoływania Drupala. Tak dzieje się z Apache, ponieważ plik .htaccess dostarczany z Drupalem zawiera następujące dyrektywy:
W twoim przypadku moduł niestandardowy powinien zawierać kod podobny do następującego:
Możesz użyć dowolnych wartości dla wywołania zwrotnego tytułu i strony , ponieważ to wywołanie zwrotne menu nigdy nie powinno być wywoływane. Wartość wywołania zwrotnego dostępu mówi Drupalowi, że każdy użytkownik ma dostęp do tego wywołania zwrotnego menu.
Alternatywnie możesz zdefiniować wywołanie zwrotne menu powiązane z „alias_for_directory /% menu_tail”, które przekieruje użytkownika do katalogu, który chcesz zobaczyć (za pomocą drupal_goto () ). Użyłbym tego rozwiązania, gdy serwer nie korzysta z zawartości .htaccess, i wywołałoby Drupala, nawet jeśli adres URL wskazuje na istniejący plik lub katalog.
źródło
Dla mnie następowała sztuczka (na drupal 6).
Chcę przekierować do innego adresu URL w tej samej domenie, powiedzmy, że Drupal działa
http://www.example.com
i chcę mieć link dohttp://www.example.com/frontend
W pozycji menu wpisz ścieżkę:
Menu Drupal będzie zawierać link do:
http://www.example.com/frontend
Kiedy używasz https, powinieneś wpisać https: / frontend w polu ścieżki dla elementu menu.
źródło
Rozwiązałem problemy z linkiem w następujący sposób:
http://groups.drupal.org/node/210308 i http://drupal.org/node/372252
Okazuje się, że moim motywem było niepoprawne drukowanie menu, więc wszystkie elementy były względne w stosunku do mojej bieżącej lokalizacji (tj. Admin / logout, zamiast / logout).
Mam nadzieję że to pomoże.
źródło
Użyłem sql, aby zastąpić link w strukturze menu:
Nie jestem pewien, czy muszę to zrobić, ale opróżniłem pamięć podręczną menu.
źródło