Oczyszczam moje duże zwariowane arkusze stylów (prawdopodobnie związane z przyszłym pytaniem) i zastanawiam się, jak najlepiej dodać niestandardowy CSS do określonego węzła lub strony.
W szczególności strona główna mojej witryny jest stroną panelową i ma wiele różnych stylów. Obecnie CSS jest właśnie dołączony do głównego arkusza stylów motywu.
Czy istnieje sposób, aby powiedzieć „jeśli jest to węzeł Foo, to dodaj foo.css”? Czy szukam CSS Injector ?
I może być zainteresowany w uogólniając to z innymi węzłami / sekcje / etc, ale w tej chwili po prostu chcę, aby obsłużyć ten jeden element.
Co ostatecznie skończyłem.
Korzystam z podtematu Zen i podczas czytania poprzez template.php odkryłem, że istnieje jakiś skomentowany kod do dołączania arkuszy stylów warunkowych. Poniższy kod zrobił dokładnie to, czego potrzebowałem:
if (drupal_is_front_page()) {
drupal_add_css(path_to_theme() . "/foo.css", 'theme','all');
}
(Linia 80 w standardowym pliku Zen template.php, FWIW.)
page--front.tpl.php
ipage.tpl.php
Odpowiedzi:
Jest to coś, co zrobiłbym za pomocą kodu, ale to dlatego, że tak właśnie robię.
W template.php będziesz chciał coś takiego:
Zamień foo na wartości związane z twoim własnym kodem.
źródło
if(drupal_is_front_page()) {
zamiastif(drupal_get_path_alias [etc]
?$vars['#node']->nid == $nid
sprawdzić, jeśli chcesz.$vars['elements']['#node']->nid
zamiast tego muszę użyć w wyszukiwaniu aliasu. Wygląda na to, że w najnowszym Drupalu 7 nie ma#node
korzeniavars
.Możesz rzucić okiem na moduł Code per Node . Jest również opisywany w tym poście na blogu .
źródło
Utwórz kontekst dla swojej strony / sekcji, a następnie użyj modułu Zasoby kontekstowe , aby załadować CSS i / lub javascript dla danego kontekstu.
Kontekst:
Kontekst Dodaj zasoby:
źródło
Jeśli jest to niewielka ilość CSS, być może zastanawiasz się nad wyborem selektorów CSS na podstawie węzła i włączeniem css do CSS motywu? Drupal 7 zapewnia selektor body.page-node-NODEID, a Zen dla Drupal 6 zapewnia podobne klasy CSS ciała.
źródło
Możesz utworzyć niestandardowy moduł i użyć hook_preprocess_node () do selektywnego ładowania arkuszy stylów na podstawie identyfikatora węzła.
Oto przykład:
Zamień MYMODULE na nazwę swojego modułu i zamień MYTHEME na nazwę motywu zawierającego plik css.
źródło
Jeśli kryteria, dla których dodanie stylu CSS zależy od niektórych właściwości węzła, zaimplementowałbym
MYTHEME_preprocess_node(&$variables)
; jedną z wartości przekazywanych do funkcji jest$variables['node']
(zauważ, że nie jest$variables['#node']
).Jeśli kryteria nie zależą od żadnych właściwości węzła, to zaimplementowałbym
MYTHEME_preprocess_page(&$variables)
;$variables['node']
zawiera obiekt węzła, jeśli wyświetlana strona jest stroną węzła. W Drupal 6 również pobiera się funkcja procesu$variables['is_front']
, ale w Drupal 7 ta sama zmienna nie jest przekazywana; jeśli chcesz wiedzieć, czy strona jest stroną pierwszą, musisz użyćdrupal_is_front_page()
.źródło
Aby to zrobić z poziomu administratora, zajrzałbym do modułu CSS . Dodaje pole, w którym można dodać CSS do stron
node/add
inode/edit
.CSS:
źródło
CodePerNode jest świetny, ale instalacja CSS Injector jest prostsza (nie wymaga bibliotek). Moduł pozwala menedżerowi zawartości dynamicznie dodawać CSS do określonych stron, bez dotykania kodu PHP lub plików INFO. 15777 instalacji nie może się mylić - jest to dowód społecznościowy, że moduł działa. CSS jest również buforowany przy użyciu zwykłego systemu buforowania.
źródło
Ponieważ używasz już paneli, może być łatwiej po prostu dodać swój styl CSS jako styl panelu dla każdego regionu panelu strony głównej. Możesz zdefiniować niestandardowe znaczniki i użyć go ponownie w swojej witrynie.
Możesz także przejść do sekcji Ogólne reguły wariantu menedżera stron na swojej stronie głównej. Jest tutaj sekcja dodawania identyfikatorów CSS i reguł tylko dla bieżącego panelu.
Uwaga: to wszystko jest w D7, więc może być tak, że takie podejście jest lepiej obsługiwane przez Panele niż w poprzednich wersjach.
źródło
/ * Przykład użycia motywu bartik do dodawania css na podstawie typu zawartości * /
źródło
Spróbuj dodać to do pliku „template.php”:
Zamień „mytheme” na nazwę katalogu motywów, a „/css/front.css” na ścieżkę do pliku CSS.
Aby wyłączyć plik „front.css” z innych stron, spróbuj dodać do „template.php”:
Ponownie zamień „mytheme” na nazwę katalogu motywów.
Jeśli chcesz usunąć ustawienie „styles.css” ze strony głównej, po prostu połącz te dwa kody.
Załóżmy, że potrzebujesz „front.css” bez „styles.css” na pierwszej stronie i „style.css” bez „front.css” na wszystkich innych stronach. Kod będzie wyglądał mniej więcej tak:
Również zamień „mytheme”.
Mam nadzieję, że będzie to pomocne.
źródło
Pominąłbym całkowicie dotykanie template.php i po prostu dodałem kolejny element w pliku .info twojego motywu
Powiedz, że masz arkusz stylów
css/foo.css
.Tak wyglądałby Twój plik theme_name.info:
W takim razie korzystasz z buforowania go za pomocą głównych arkuszy stylów, a ponieważ zakładam, że jest to dla twojej strony domowej, miałoby to sens.
źródło
Oprócz podejścia Drupal, gdy potrzebujesz tylko krótkiego fragmentu css wewnątrz swojego ciała HTML5, masz atrybut o zasięgu css. Zobacz https://stackoverflow.com/a/4607092/195812
To rozwiązanie pozwoli Ci uniknąć edytowania kodu i instalowania większej liczby modułów
źródło
Możesz wydrukować węzeł strony w znaczniku body
Następnie możesz ograniczyć
Jest to przydatne w przypadku drobnych szybkich zmian
źródło