Często budujecie stronkę w oparciu o czyjąś skórkę? Ja często. Znajduję coś co kolorystycznie mi się podoba, co pasuje do mojego pomysłu, a następnie modyfikuję style, zmieniam ikonki, tła i tak dalej.
Niestety – wystarczy że autor skóry na której bazuję wyda jej nowszą wersję, jej aktualizacja na mojej stronie polega nie tylko na nadpisaniu plików, ale na ponownym dodaniu zmian, które w miarę rozwoju serwisu były wprowadzane do oryginalnych plików skórki.
Na szczęście Drupal oferuje mechanizm subtheme, który wybawi nas z tych tarapatów. Cóż to takiego?
Subthemes czyli 'skórki potomne’ (w tej chwili nie mogę znaleźć lepszego określenia) to twór pozwalający cieszyć się gładkimi aktualizacjami skórek na których bazują (bo każda skórka potomna ma jedną bazową, z której style i ustawienia są dziedziczone) a jednocześnie zezwalający swobodnie dostosować style i szablony do naszych potrzeb.
W praktyce wygląda to tak:
1) pobieramy, instalujemy, włączamy skórę z drupal.org, przykładowo „sky”
2) w katalogu /sites/all/themes tworzymy katalog „subsky” gdzie będą pliki skórki pochodnej względem skórki sky (możemy też stworzyć ten katalog jako podkatalog w sites/all/themes/sky)
3) w katalogu subsky zakładamy plik subsky.info a w nim:
name = subsky
description = skórka pochodna względem sky
core = 6.x
engine = phptemplate
base theme = sky
stylesheets[all][] = subsky.css
Ważne jest aby nie zapomnieć o podaniu nowego atrybutu – base theme – który wskazuje jaka skórka jest bazową względem naszej nowej skórki potomnej. Bardzo ważne też zdefiniować przynajmniej jeden styl css, inaczej dziedziczenie arkuszy styli nie zadziała!
4) do tegoż pliku kopiujemy ze sky.info wszystkie wiersze zawierające definicje regionów, przykładowo:
regions[sidebar] = Sidebar
regions[banner] = Banner
regions[headline] = Headline
… i tak dalej
Musimy to zrobić ponieważ regiony nie są dziedziczone (nie jest to błąd tylko taki zamysł mieli projektanci mechanizmów dziedziczenia). Możemy dzięki temu sobie zdefiniować inne regiony (ale wtedy musimy też stworzyć w katalogu subsky plik page.tpl.php, gdzie zakodujemy ich wyświetlanie). Na potrzeby tego przykładu załóżmy że skopiujemy regiony 1:1 z pliku sky.info do subsky.info.
5) zakładamy zadeklarowany plik subsky.css w katalogu sites/all/themes/subsky i wprowadzamy do niego nasze zmiany. Możemy w miarę potrzeb nadpisywać style i pliki szablonów (tpl),
6) aktywujemy i ustawiamy jako skórkę subsky,
7) w wypadku wyjścia nowszej wersji skóry sky aktualizujemy ją zwyczajnie a nasze zmiany są zachowywane, jupii!!
Co do szczegółów mechanizmu dziedziczenia to zapraszam do wczytania się w http://drupal.org/node/225125 oraz http://www.advantagelabs.com/how-create-subtheme-drupal-6. W skrócie wygląda to tak:
Skórka potomna dziedziczy:
- wszystkie arkusze styli, pod warunkiem, że skórka pochodna definiuje przynajmniej jeden styl,
- wszystkie pliki js (javascript)
- wszystkie szablony – pliki *.tpl.php
- wszystko zdefiniowane w template.php
- miniaturkę (screenshot)
Skórka potomna nie dziedziczy:
- pliku logo.png, o ile nie był dodany przez wysyłanie plików (upload),
- regiony (obszary) z pliku *.info
- ustawień z pliku theme-settings.php
- ustawień z katalogu color
Miłego nadpisywania skórek!