Mam wielojęzyczną stronę z Drupalem 7, która używa subdomen takich jak np. Przykład.com, aby wykryć język. Wszystko działa zgodnie z oczekiwaniami, ale mam mobilną wersję witryny, z której chcę być dostępny w domenach takich jak np. Przykład.com. Jak to zrobić? Mogę ustawić admin/config/regional/language
tylko jedną domenę na język, ale musiałbym ustawić dwa, aby to działało, na przykład:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Chciałbym mieć taką samą strukturę jak Wikipedia). Problem polega na tym, że używając subdomen do wyboru języka, Drupal tworzy wszystkie wewnętrzne linki jako absolutne ścieżki. Na przykład łącze menu zostanie utworzone jako:
<li class="menu-773"><a href="http://en.example.com/test" >test</a></li>
and not as
<li class="menu-773"><a href="/test" >test</a></li>
Mogłem więc utworzyć alias domeny za pomocą Apache, aby wysyłać żądania z en.m.example.com do en.example.com, ale wszystkie wewnętrzne linki przywróciłyby użytkownika z wersji mobilnej do normy. Jak mogę rozwiązać ten problem?
Odpowiedzi:
Po skonfigurowaniu Drupal do obsługi różnych języków w różnych domenach, musisz poinstruować swój serwer WWW, aby wysyłał żądania z wielu domen do tej samej witryny Drupal.
W Apache musisz edytować
.conf (httpd.conf)
plik i dodawać aliasy do wszystkich różnych domen. Na przykład:Oprócz tego musisz wskazać serwer nazw domen (DNS) na swój serwer dla wszystkich nazw domen w różnych językach.
źródło
Odpowiedź brzmi: używanie wielu domen dla jednego języka nie jest możliwe w Drupal 7 i - o ile mi wiadomo - żaden moduł nie dodaje tej funkcjonalności.
Aby jednak osiągnąć ten cel, istnieje obejście: Jak wspomniano powyżej, problem z domenami językowymi polega na tym, że wszystkie ścieżki wewnętrzne, które mają alias ścieżki specyficzny dla języka i są tworzone za pomocą funkcji rdzenia Drupal url (), są tworzone jako ścieżki bezwzględne. Odpowiedzialnością za to zachowanie jest funkcja :
Nie ustawiaj domeny językowej dla tego domyślnego języka. Jeśli tego nie zrobisz, Drupal nie utworzy ścieżek bezwzględnych dla domyślnego języka, jeśli - na przykład - użyje domeny xyz.example.com , gdzie xyz.example.com nie jest ustawiony jako domena dla żadnego języka, Drupal utworzy wszystkie adresy URL są względne, więc kliknięcie dowolnego linku wewnętrznego zachowa poddomenę. Ale nie możesz użyć tej metody, jeśli chcesz mieć subdomeny wrażliwe na język, jak opisano powyżej:
w języku angielskim: en.example.com i en.m.example.com
dla języka niemieckiego: de.example.com i de.m.example.com itp.
Tak więc drugą metodą byłoby zmodyfikowanie bieżącego języka wszystkich typów za pomocą funkcji: hook_language_init . Używam następującego kodu, aby powyższy przykład działał:
:
źródło
custom_api
i hakhook_language_init()
. Razem to jestcustom_api_language_init()
. Być może jest to mylące, więc zredagowałem przykład, aby wyjaśnić tę kwestię. Masz rację, użycie „hook_language_switch_links_alter ()” może być lepszym sposobem. Ale ponieważ wydaje się, że prawie nikt nie jest zainteresowany tym problemem, myślę, że może nie warto przepisać tego przykładu.