Podteme
Podteme, kao i svaka druga tema, razlikuju se po jednoj karakteristici: one nasleđuju resurse roditeljske teme. Ne postoje ograničenja u lancu koji povezuju podteme sa njihovim roditeljima. Podtema može biti dete druge podteme, i može biti razgranata i organizovana kako god želite. Ovo daje podtemama veliki potencijal.
Da biste kreirali podtemu, definišite je kao bilo koju drugu temu i navedite njenu osnovnu temu pomoću ključa „base theme“. (Napomena: ovaj ključ nema donju crtu.)
Primer podteme: Fluffiness
Fluffiness je primer podteme koja koristi Classy kao osnovnu temu.
Ovo je struktura foldera u kojoj ćete imati sledeće fajlove:
themes/
└── fluffiness/
├── fluffiness.info.yml
└── fluffiness.libraries.yml
Info fajl se zove fluffiness.info.yml:
name: Fluffiness
type: theme
description: This is a fluffy sub theme of Classy
core: 8.x
# Defines the base theme
base theme: classy
# Defines libraries group in which we can add css/js.
libraries:
- fluffiness/global-styling
# Regions
regions:
header: Header
featured: Featured
content: Content
sidebar_first: First sidebar
sidebar_second: Second sidebar
footer: Footer
Uključite fajl fluffiness.libraries.yml da biste dodali css/js u grupu globalnih stilova definisanu gore u sekciji library:
global-styling:
css:
component:
css/style.css: {}
Više informacija o dodavanju CSS stilova i JavaScript fajlova u Drupal 8 temu.
Ako želite da koristite drugo ime umesto „fluffiness“, jednostavno zamenite sva pojavljivanja „fluffiness“ svojim imenom (uključujući ime foldera). Na primer:
themes/
└── my_custom_theme/
├── my_custom_theme.info.yml
└── my_custom_theme.libraries.yml
Tekst koji unesete u liniju „name:“ u info.yml fajlu je slobodan i ne mora tačno da odgovara imenu fajla vaše podteme. Na primer, može izgledati ovako:
name: My Custom Theme
# (sve ostale linije su izostavljene radi preglednosti)
Podtema podteme
Kada kreirate podtemu podteme, morate kao osnovnu temu navesti podtemu.
- Fluffiness: prva podtema Classy
name: Fluffiness
type: theme
description: This is a fluffy sub theme of Classy
core: 8.x
# Defines the base theme
base theme: classy
- Shaved: podtema Fluffiness (podtema podteme Classy)
name: Shaved
type: theme
description: This is a reduced fluff sub theme of Fluffiness
core: 8.x
# Defines the base theme
base theme: fluffiness
Napomena: parametar base theme je machine name osnovne teme, dok je name opisni naziv.
Nasleđivanje tematskih regiona
Regije teme se ne nasleđuju od navedene osnovne teme. Ako parametar regions: ostane prazan u info.yml fajlu vaše podteme ili ne sadrži sve regione osnovne teme, onda se podrazumevane regije u Drupalu mogu koristiti kao rezervne opcije za postavljanje blokova u vašoj podtemi. Preporučujemo da kopirate sve regione definisane u osnovnoj temi u info.yml vaše podteme.
# Pošto se regioni ne nasleđuju, svaki region uključujući standardne
# Drupal regione kao i regione osnovne teme mora biti definisan u
# podtemi. Ovaj primer prikazuje podtemu koja koristi
# podskup standardnih Drupal regiona (1), plus neke prilagođene
# regione definisane u osnovnoj temi (2), i na kraju tri
# "kolofonska" regiona definisana u ovoj podtemi.
regions:
# 1. Standardni Drupal regioni (takođe definisani i korišćeni u osnovnoj temi).
# 2. Regioni preuzeti iz osnovne teme.
# 3. Dodatni prilagođeni regioni podteme.
header: 'Header' # 1
primary_menu: 'Main menu' # 1
secondary_menu: 'Secondary menu' # 1
highlighted: 'Highlighted' # 1
help: 'Help' # 1
section_nav: 'Section Nav' # 2
breadcrumb: 'Breadcrumb' # 1
page_title: 'Page Title' # 2
local_tasks: 'Local Tasks' # 2
content: 'Content (Constrained)' # 1
content_fullwidth: 'Content (Edge-to-edge)' # 2
colophon_first: 'Colophon First Col' # 3
colophon_second: 'Colophon Second Col' # 3
colophon_third: 'Colophon Third Col' # 3
footer: 'Footer' # 1
Nasleđivanje postavljanja blokova
U Drupalu 8 teme mogu dolaziti sa folderom config/install/, gde se unapred definisane konfiguracije blokova, uključujući njihovu poziciju u regionima tema, uvoze prilikom aktivacije teme. Drupal može naslediti te konfiguracije blokova i pozicije regiona od osnovne teme, ali ako regioni definisani u info.yml fajlu vaše podteme ne odgovaraju onima u osnovnoj temi, može doći do nepredvidivog postavljanja blokova u slučajnim regionima.
Nasleđivanje blok šablona
Ako proširena tema ima prilagođene blok šablone, oni neće biti odmah nasledjeni, jer podtema kreira kopije svih blokova iz roditeljske teme i preimenuje ih sa prefiksom imena podteme. Twig šabloni za blokove se dobijaju iz imena bloka, što narušava vezu između tih šablona i njihovih blokova. Rešenje ovog problema trenutno zahteva trik u podtemi. Sledeći primer pravi fajl shaved.theme u direktorijumu podteme. U njega ubacite sledeći hook:
/**
* Implements hook_theme_suggestions_HOOK_alter for blocks.
*/
function shaved_theme_suggestions_block_alter(&$suggestions, $variables) {
// Učitaj sugestije tema za blokove iz roditeljske teme.
foreach ($suggestions as &$suggestion) {
$suggestion = str_replace('shaved_', 'fluffiness_', $suggestion);
}
}
Za vaše podteme zamenite „shaved“ sa imenom vaše podteme, a „fluffiness“ sa imenom vaše osnovne teme.
Razlike u odnosu na Drupal 7
Najprimetnija razlika u odnosu na Drupal 7 je što su .info fajlovi postali .info.yml fajlovi koji koriste YAML sintaksu.