Mam instancję Drupala działającą na example.org. Który ma zainstalowany i aktywowany motyw X. Teraz przez ograniczony czas w miejscu, w którym została „wydzielona” specjalna sekcja, powinno się odbyć wydarzenie. Wszystkie rzeczy związane z tym wydarzeniem będą dostępne na stronie example.org/event2011.
Chcę wyświetlać inny motyw przy każdym wyświetlaniu strony w tej sekcji (np. Http://example.org/event2011/about , http://example.org/event2011/node/123 ). W jaki sposób mogę to zrobić?
Przeszedłem przez wiele modułów, ale żaden z nich nie obsługuje Drupala 7. Najlepiej byłoby, gdyby zrobiono to za pomocą modułów i nie chcę niczego zmieniać na poziomie kodu.
Odpowiedzi:
Biorąc pod uwagę, że zmiana jest ograniczona czasowo i że implementacja takiego kodu nie jest trudna, proponuję zaimplementować niestandardowy moduł zmieniający motyw używany na określonych stronach.
Wystarczy zaimplementować
hook_custom_theme()
w następujący sposób:Jeśli trzeba zmienić motyw tylko dla http://example.com/event2011 , ale nie dla http://example.com/event2011/node/123 , należy zmienić kod na
Jeśli chodzi o korzystanie z wywołań tematycznych w definicji wywołania zwrotnego menu, dokumentacja mówi:
źródło
Niestandardowe rozwiązanie, jak sugeruje inny komentarz, jest prawdopodobnie najlepsze, ale jeśli naprawdę chcesz użyć modułu, najlepszym rozwiązaniem jest ThemeKey . Od 23.05.11 ma stabilne wydanie.
źródło
Alternatywnie możesz użyć nowej
theme callback
opcji systemu menu,hook_menu_alter()
jak opisano poniżej. ps Checkout hook_menu (), aby uzyskać więcej informacji na temattheme callback
Dodatkowo istnieje również przykład użycia bardziej tradycyjnego
hook_custom_theme()
Zaczerpnięte z: http://drupal.org/node/224333#custom_theme
źródło
Możesz po prostu użyć kontekstu i użyć motywu, aby zastosować go, gdy ścieżka to / event2011 /, możesz po prostu ustawić ścieżkę w stanie cotext i zmienić motyw w działaniu zawartości. Dzięki temu możesz bardzo łatwo przełączać się między motywami w witrynie na podstawie adresu URL. Działa nawet na telefony komórkowe;)
źródło
Korzystanie z ThemeKey jest proste i jak dotąd jest najpopularniejszym i najmocniejszym modułem (z obsługą wersji 8.x) reguł przełączania motywów, które pozwalają na automatyczny wybór motywu w zależności od bieżącej ścieżki, terminów taksonomicznych, języka, typu węzła i wielu innych, wiele innych właściwości. Można go również łatwo rozszerzyć, aby obsługiwał dodatkowe właściwości ujawniane przez inne moduły. Oprócz standardowych funkcji ThemeKey automatycznie rozszerza funkcje wielu modułów contrib i ma moduły rozszerzające go.
Użycie (7.x)
Po włączeniu modułu przejdź do
admin/config/user-interface/themekey
. Istnieje wiele opcji przełączania motywu, ale prawdopodobniepath:node_alias
byłbyś zainteresowany , więc ustaw wartość, jak chcesz, tak jak mówisz / my_url, a następnie wybierz motyw, który chcesz włączyć w tym adresie URL. Możesz także używać symboli wieloznacznych, takich jakweb/*
lub/^web/.*
.Sprawdź: jak załadować motyw ścieżki
Zaawansowane użycie
ThemeKey 7.x zawiera opcjonalny moduł o nazwie ThemeKey Przykład, aby zademonstrować programistom, jak rozszerzyć ThemeKey.
Pomoc (7.x)
Sprawdź samouczek wideo autorstwa Mustardseed (7.x).
Więcej pomocy na ten temat można znaleźć na stronie
/admin/help/themekey
.Sprawdź także inne pytania dotyczące SE związane z kluczem tematycznym .
Alternatywnie istnieje również Switchtheme (7.x), który dodaje blok, aby umożliwić użytkownikom przełączanie się między włączonymi motywami.
źródło
Korzystając z aliasów URL lub modułu Pathauto , pamiętaj o subtelnościach i różnicach podczas korzystania ze składników bieżącej ścieżki Drupal.
Są sytuacje, w których możesz nie chcieć używać arg () . W rzeczywistości dokumentacja Drupal API faktycznie sugeruje unikanie korzystania z tej funkcji tam, gdzie to możliwe, ponieważ wynikowy kod jest trudny do odczytania.
Rozważ następujący przykład zaproponowany przez kiamlaluno :
W Drupal 7, jeśli węzeł ma alias event2011 , użycie
arg(0)
zwrócinode
jako pierwszy składnik adresu URL, w przeciwieństwie do aliasu.Zamiast tego, jeśli trzeba pracować z aliasu istnieje kilka sposobów, aby uzyskać aktualny adres URL w Drupal , włącznie z
menu_get_object()
,current_path()
,request_path()
i inne.Oto przerobiony przykład, który używa aliasu jako wyzwalacza do przełączania motywu:
źródło
Jak zmienić motyw w zależności od roli użytkownika:
Utwórz niestandardowy moduł, a następnie skopiuj i wklej następujące elementy:
Musisz wymienić:
mymodule
=> z nazwą twojego modułumoja specjalna rola => z nazwą roli, którą będą musieli pełnić Twoi użytkownicy, aby mogli zobaczyć inny motyw.
mytheme
=> z nazwą motywu, na który chcesz się przełączyćźródło
Możesz użyć modułu Motyw strony , aby dokładnie to osiągnąć
źródło
Możesz użyć modułu Motyw strony, aby osiągnąć dokładnie to: Moduł Motyw strony jest prostym i łatwym w użyciu modułem, który pozwala używać innych motywów niż domyślna strona na określonych stronach.
Cechy :
Przypisz motyw do pojedynczej strony lub listy stron. (Ustaw stronę jako ścieżkę Drupala) Pozwól używać znaku „*” jako symbolu wieloznacznego w ścieżkach Drupala. Pozwalaj układać motywy. (Jeśli strony mają kilka zdefiniowanych definicji, zostanie użyty pierwszy motyw z listy). Pozwól włączyć / wyłączyć motyw. Drupal początkujący przyjazny.
tak jak możesz: Sekcje, które mają większość takich samych funkcji jak Motyw strony, ale dodają wybór oparty na rolach i obszar „fragmentu php” do wyboru motywu.
ale jeśli chcesz używać innych motywów niż domyślna strona do tworzenia, edytowania i przeglądania stron, możesz użyć motywu treści, który pozwala używać innych motywów niż domyślny serwis do tworzenia, edytowania i przeglądania stron.
źródło