Ենթաթեմաներ
Ենթաթեմաներ, ինչպես ցանկացած այլ թեմա, առանձնանում են մեկ տարբերությամբ՝ նրանք ժառանգում են իրենց ծնողական թեմայի ռեսուրսները։ Ենթաթեմաների և նրանց ծնողական թեմաների միջև կապող շղթայի մեջ սահմանափակումներ չկան։ Ենթաթեման կարող է լինել մյուս ենթաթեմայի երեխան, և այն կարող է կազմակերպվել ու ճյուղավորվել ինչպես ձեզ անհրաժեշտ է։ Սա տալիս է ենթաթեմաներին մեծ հնարավորություններ։
Ենթաթեմա ստեղծելու համար ներկայացրեք այն ինչպես ցանկացած այլ թեմա և հայտարարեք դրա հիմնական թեման՝ օգտագործելով «base theme» բանալին։ (Ուշադրություն դարձրեք, որ այս բանալին չունի ստորակետ։)
Ենթաթեմայի օրինակ՝ Fluffiness
Fluffiness-ը ենթաթեմայի օրինակ է, որը Classy-ն օգտագործում է որպես հիմնական թեմա։
Ստորև ներկայացված է թղթապանակների կառուցվածքը, որտեղ դուք կունենաք հետևյալ ֆայլերը՝
themes/ └── fluffiness/ ├── fluffiness.info.yml └── fluffiness.libraries.yml
Ինֆորմացիոն ֆայլը կոչվում է 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
Ներբեռնեք fluffiness.libraries.yml ֆայլը՝ ավելացնելու համար css/js վերևում library բանալում սահմանված գլոբալ ոճերի խմբին։
global-styling: css: component: css/style.css: {}
Ավելին տեղեկանալու համար՝ տեսեք Drupal 8-ում CSS և JavaScript ֆայլեր թեմայում ավելացնելու մասին։
Եթե ցանկանում եք օգտագործել այլ անուն «fluffiness»-ի փոխարեն, պարզապես փոխարինեք բոլոր «fluffiness»-ի հանդիպումները ձեր անվան վրա ( «բոլոր հանդիպումներն» ընդգրկում են նաև թղթապանակի անունը)։ Օրինակ՝
themes/ └── my_custom_theme/ ├── my_custom_theme.info.yml └── my_custom_theme.libraries.yml
info.yml ֆայլի name՝ տողում գրած տեքստը կարող է լինել ցանկացած ձևի և պարտադիր չէ, որ հստակ համապատասխանի ձեր ենթաթեմայի ֆայլի անվանը։ Օրինակ՝ կարող է լինել այսպես՝
name: My Custom Theme # (all the other lines omitted for brevity)
Ենթաթեմայի ենթաթեմա
Ենթաթեմայի ենթաթեմա ստեղծելիս դուք պետք է որպես հիմնական թեմա նշեք ենթաթեման։
- Fluffiness՝ 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՝ Fluffiness-ի ենթաթեմա (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
Ուշադրություն դարձրեք, որ base theme՝ պարամետրը նշում է հիմնական թեմայի machine name-ը, իսկ name՝ պարամետրը հանդիսանում է նկարագրական անուն։
Թեմայի տարածաշրջանների ժառանգություն
Թեմայի տարածքները չեն ժառանգվում նշված հիմնական թեմայից։ Եթե ձեր ենթաթեմայի info.yml ֆայլում region: պարամետրը դատարկ է կամ չի պարունակում հիմնական թեմայի բոլոր տարածքները, ապա Drupal-ի նախնական տարածքները կարող են օգտագործվել որպես պահուստային տարբերակներ բլոկների տեղակայման համար ձեր ենթաթեմայում։ Մենք ուժեղորեն խորհուրդ ենք տալիս բոլոր տարածքները, որոնք սահմանված են ձեր հիմնական թեմայում, պատճենել ձեր ենթաթեմայի info.yml ֆայլում։
# Քանի որ տարածքները չեն ժառանգվում, ցանկացած տարածք՝ ներառյալ ստանդարտ # Drupal տարածքները և նաև հիմնական թեմայի տարածքները, պետք է սահմանվեն # ենթաթեմայում։ Այս օրինակն ցուցադրում է ենթաթեմա, որը օգտվում է # ստանդարտ Drupal տարածքների ենթսահմանված մասից (1), նաև հիմնական թեմայից # պատճենված որոշ տարածքներ (2), և վերջապես ենթաթեմայում սահմանված երեք # «կոլոֆոն»-ին առնչվող տարածքներ (3): regions: # 1. Ստանդարտ Drupal տարածքներ (նույնպես սահմանված և օգտագործվող հիմնական թեմայի կողմից)։ # 2. Տարածքներ պատճենված հիմնական թեմայից։ # 3. Լրացուցիչ հատուկ ենթաթեմայի տարածքներ։ 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
Բլոկների տեղավորման ժառանգություն
Drupal 8-ում թեմաները կարող են ունենալ config/install/ թղթապանակ, որտեղ տեղադրված բլոկների նախնական կոնֆիգուրացիաները, այդ թվում նաև թեմաների տարածքներում տեղավորումները, ներմուծվում են թեման միացնելիս։ Drupal կարող է ժառանգել այդ բլոկների կոնֆիգուրացիաներն ու տարածքների տեղադրումները հիմնական թեմայից, սակայն եթե ձեր ենթաթեմայի info.yml-ում սահմանված տարածքները չեն համապատասխանում հիմնական թեմայի տարածքներին, հնարավոր են կանխատեսելի չլինող տեղավորումներ պատահական տարածքներում։
Բլոկների թեմաների ժառանգություն
Եթե ընդլայնվող թեման ունի հարմարեցված բլոկների թեմաներ, դրանք անմիջապես չեն ժառանգվի, քանի որ ենթաթեման ստեղծում է բոլոր ծնողական թեմայի բլոկների պատճենները և վերանայում է դրանք՝ օգտագործելով ենթաթեմայի անունը որպես նախածանց։ Twig բլոկի թեմաները ստացվում են բլոկի անունից, ուստի սա խախտում է կապը այդ թեմաների և բլոկի միջև։ Այս խնդրի շտկումը ներկայումս ենթաթեմայի մեջ պահանջում է ատրիպուտ։ Վերոհիշյալ օրինակներին հետևելով՝ մենք կստեղծենք shaved.theme ֆայլը ենթաթեմայի թղթապանակում։ Այս ֆայլում տեղադրեք հետևյալ hook-ը՝
/** * Implements hook_theme_suggestions_HOOK_alter for blocks. */ function shaved_theme_suggestions_block_alter(&$suggestions, $variables) { // Load theme suggestions for blocks from parent theme. foreach ($suggestions as &$suggestion) { $suggestion = str_replace('shaved_', 'fluffiness_', $suggestion); } }
Ձեր սեփական ենթաթեմաների համար փոխարինեք «shaved»-ը ձեր ենթաթեմայի անվամբ, իսկ «fluffiness»-ը՝ ձեր հիմնական թեմայի անվամբ։
Փոփոխություններ Drupal 7-ից
Drupal 7-ից ամենանշանակալից տարբերությունը այն է, որ .info ֆայլերը դարձել են .info.yml ֆայլեր, որոնք օգտագործում են YAML սինտաքսը։
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.