logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll

Drupal 8 մոդուլում ոճաթերթերի (CSS) և JavaScript (JS) ավելացում

19/06/2025, by Ivan

Այս փաստաթուղթը վերաբերում է մոդուլներին։ Թեմաների մասին տեղեկությունները տեսեք Drupal 8-ում ոճաթերթերի (CSS) և JavaScript (JS) ավելացման թեմայում

Drupal 8-ում ոճաթերթերը (CSS) և JavaScript (JS) բեռնվում են նույն համակարգով՝ ինչպես մոդուլների (կոդի), այնպես էլ թեմաների համար՝ ակտիվների գրադարանի միջոցով։ Ակտիվների գրադարանները կարող են պարունակել մեկ կամ մի քանի CSS ռեսուրս, մեկ կամ մի քանի JS ռեսուրս և մեկ կամ մի քանի JS կարգավորումներ։

Drupal-ը հետևում է բարձր մակարդակի սկզբունքին. ռեսուրսները (CSS կամ JS) բեռնվում են միայն այն դեպքում, եթե դուք հայտնում եք Drupal-ին, որ դրանք պետք է բեռնվեն։ Drupal-ը չի բեռնում բոլոր ռեսուրսները (CSS/JS) բոլոր էջերում, քանի որ դա վատ է անդրադառնում ինտերֆեյսի աշխատանքի արագության վրա։

Փոփոխություններ Drupal 7-ի համեմատ

Կան երկու կարևոր տարբերություններ ծրագրավորողների համար՝

1. Միայն տվյալ էջի համար անհրաժեշտ JavaScript-ը կավելացվի այդ էջին: Դժվար է ասել, բայց Drupal 7-ում միևնույնն էր jQuery-ը բեռնվում էր բոլոր էջերում ավտոմատ: Այժմ jQuery այլևս ավտոմատ չի բեռնվում բոլոր էջերում:
Այսինքն, եթե ձեր թեման պահանջում է jQuery կամ որևէ այլ JavaScript (որը նույնպես սահմանված է ռեսուրսների գրադարանում), դուք պետք է տեղեկացնեք Drupal-ին դրա մասին՝ հայտարարելով կախվածություն անհրաժեշտ գրադարանի նկատմամբ։

2. Drupal.settings JavaScript օբյեկտը փոխարինվել է drupalSettings-ով։

Առանցքային գործընթացը

Ռեսուրսների (CSS / JS) բեռնման հիմնական քայլերը՝

1. Պահեք CSS կամ JS ֆայլը։
2. Սահմանեք «գրադարան», որը կարող է պարունակել CSS և JS ֆայլեր։
3. «Կցեք» գրադարանը ռենդերային զանգվածին հուքում։

Թեմաների դեպքում 3-րդ քայլը կարող է փոխարինվել, քանի որ թեմաները կարող են բեռնել բազմաթիվ ռեսուրսային գրադարաններ բոլոր էջերում։

Գրադարանի սահմանումը

Մի կամ մի քանի գրադարան սահմանելու համար ավելացրեք *.libraries.yml ֆայլը ձեր մոդուլի ֆոլդերի արմատում (.info.yml ֆայլի հետ միասին): (Օրինակ, եթե ձեր մոդուլը կոչվում է fluffiness, ապա ֆայլը պետք է կոչվի fluffiness.libraries.yml): Յուրաքանչյուր գրադարան ֆայլում գրառում է, որը մանրամասնում է CSS և JS ֆայլերը (ռեսուրսները), օրինակ՝
Հատուկ խորհուրդ է տրվում ֆրանսիացի օգտատերերին՝ ուշադրություն դարձնել ճիշտ գրելու .libraries.yml անունը, ոչ թե .librairies.yml (ֆրանսերենում գրադարանը նշանակում է գրախանութ), քանի որ սխալ անունը կհանգեցնի դժվար հայտնաբերելի սխալների՝ առանց տհաճ հաղորդագրության Drupal-ից։

cuddly-slider:
  version: 1.x
  css:
    layout:
      css/cuddly-slider-layout.css: {}
    theme:
      css/cuddly-slider-theme.css: {}
  js:
    js/cuddly-slider.js: {}

Դուք կարող եք նկատել 'layout' և 'theme' բանալիները css-ում, որոնք բացակայում են js-ում։ Դրանք ցույց են տալիս CSS ֆայլի ոճի տեսակն՝ ըստ SMACSS ստանդարտի (մանրամասներ այստեղ):

  • base: CSS արմատային/նորմալացման ոճեր, HTML տարրերի ձևավորում. կշռում CSS_BASE = -200
  • layout: վեբէջի ընդհանուր դասավորություն՝ ներառյալ ցանցային համակարգերը. կշռում CSS_LAYOUT = -100
  • component: բազմակի օգտագործվող UI բաղադրիչներ. կշռում CSS_COMPONENT = 0
  • state: հաճախորդի կողմից փոխվող կոմպոնենտների ոճեր. կշռում CSS_STATE = 100
  • theme: կոմպոնենտի արտաքին տեսքի ոճեր. կշռում CSS_THEME = 200

Այսպիսով, եթե դուք նշեք theme, դա նշանակում է, որ CSS ֆայլը պարունակում է թեմային վերաբերող արտաքին տեսքի ոճեր։ Ավելին այստեղ։ Սահմանված բանալիներից բացի այլ բանալիներ օգտագործելը կստիպի կոշտ զգուշացումներ։

Օրինակում ենթադրվում է, որ cuddly-slider.js JavaScript ֆայլը գտնվում է ձեր մոդուլի js ենթապանակում։ JS կարող է նաև բեռնվել արտաքին URL-ից։ Ավելին՝ տես CDN / արտաքին գրադարաններ։

Հիշեք, որ Drupal 8-ը այլևս չի բեռնում jQuery բոլոր էջերում ըստ լռության; բեռնում է միայն անհրաժեշտը: Ահա թե ինչու մեր cuddly-slider գրադարանը պետք է հայտարարի կախվածություն core/jquery գրադարանից, որն ապահովում է jQuery-ի բեռնումը: (core/jquery-ն Drupal-ի հիմնական մաս է, ոչ թե մոդուլ կամ թեմա):

cuddly-slider:
  version: 1.x
  css:
    theme:
      css/cuddly-slider.css: {}
  js:
    js/cuddly-slider.js: {}
  dependencies:
    - core/jquery

Ինչպես սպասելի էր, CSS և JS ռեսուրսների հաջորդականությունը որոշում է նրանց բեռնման հերթականությունը։

Դեֆոլտը Drupal-ը տեղադրում է JS ռեսուրսները էջի ներքևում՝ DOM բեռնումը խանգարելու և jQuery-ի հնարավոր սխալների կանխարգելման համար։ Եթե ինչ-որ պատճառով անհրաժեշտ է JS-ի բեռնումը էջի <head> բաժնում, կարող եք օգտագործել header տարբերակը, օրինակ՝

cuddly-slider:
  version: 1.x
  header: true
  js:
    js/cuddly-slider.js: {}

Այժմ js/cuddly-slider.js կբեռնվի էջի վերևում:

Գրադարանի կցում էջերին

Դուք կարող եք կցել անհրաժեշտ ակտիվների գրադարանները տարբեր կերպ՝ կախված նրանից, թե ինչ ռեսուրսներ են անհրաժեշտ բեռնել: Ոմանք պետք են բոլոր էջերում, ոմանք շատ հազվադեպ, իսկ ոմանք՝ մեծ մասում, բայց ոչ բոլորում։

Առավել կարևորն այն է, որ որոշումը, թե կցել գրադարանները, պետք չէ հիմնված լինի ընթացիկ URL-ի կամ երթուղու վրա, այլ հիմնված լինի էջում ցուցադրվող տարրերի վրա: Օրինակ, եթե էջում կա '#type' => 'table', '#type' => 'dropbutton' և '#type' => 'foobar', ապա կբեռնվեն միայն այդ տեսակների գրադարանները։

Կարող եք նաև սահմանել գրադարաններ կոնկրետ '#type' օրինակների համար՝ կցելով դրանք տվյալ ռենդերային զանգվածին։

Բնականաբար հազվադեպ է, որ որոշակի ռեսուրս պետք լինի բոլոր էջերում՝ անկախ դրանց բովանդակությունից (օրինակ՝ վերլուծական JavaScript)։

Հաջորդ բաժինները ներկայացնում են օրինակներ, թե ինչպես անել դա։

Կցում կոնկրետ '#type'-ին (բոլոր օրինակներին)

Որպեսզի գրադարան կցեք կոնկրետ գոյություն ունեցող '#type'-ին, բոլոր օրինակներին, օգտագործեք hook_element_info_alter():

function yourmodule_element_info_alter(array &$types) {
  if (isset($types['table'])) {
    $types['table']['#attached']['library'][] = 'your_module/library_name';
  }
}

Հետո մաքրել կեշը՝ որպեսզի Drupal-ը ճանաչի ձեր հուկի նոր գործադրումը։

Կցում ռենդերային զանգվածին

Գրադարան կցելու համար ռենդերային զանգվածին (և հնարավոր է կոնկրետ '#type' օրինակին) դուք պետք է ունենաք մուտք այդ զանգվածին: Կարող եք կամ սահմանել, կամ փոփոխել զանգվածը հուկում: Դա նման կլինի հետևյալը՝

$build['the_element_that_needs_the_asset_library']['#attached']['library'][] = 'your_module/library_name';

Պատրաստեք թվային բանալիներ միշտ!
Դրա փոխարեն կարող եք փորձել օգտագործել ոչ թվային բանալիներ՝ ի աջակցություն կրկնությունների չստեղծման՝

$build['the_element_that_needs_the_asset_library']['#attached']['library']['your_module/library_name'] = 'your_module/library_name';

Սա մի լավ տարբերակ չէ, քանի որ Drupal-ի զանգվածների միաձուլման մեթոդը կհանգեցնի սխալ կառուցված զանգվածի և հետևյալ սխալներին (googlefood):

Warning: explode() expects parameter 2 to be string, array given in Drupal\Core\Asset\LibraryDependencyResolver->doGetDependencies()
Notice: Array to string conversion in system_js_settings_alter()
Notice: Array to string conversion in Drupal\Core\Asset\AttachedAssets->setLibraries()

Կցում ռենդերային զանգվածին բլոկի պլագինում

Օրինակ՝ եթե հավաքում եք բլոկի պլագին ձեր մոդուլում, կարող եք գրադարաններ կցել ռենդերային զանգվածին ձեր BlockBase դասի build() մեթոդում (սկսած Drupal 8 beta 6-ից):

    return [
      '#theme' => 'your_module_theme_id',
      '#someVariable' => $some_variable,
      '#attached' => [
        'library' => [
          'your_module/library_name',
        ],
      ],
    ];

Գրադարանի կցում ձևին

Քանի որ ձևերը պարզապես ռենդերային զանգվածներ են, գրադարանի կցումը նույնն է՝

/**
 * Implements hook_form_alter().
 */
function yourmodule_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  /* @var Drupal\Core\Entity\FieldableEntityInterface $entity */
  $formObject = $form_state->getFormObject();
  if ($formObject instanceof \Drupal\Core\Entity\EntityFormInterface) {
    $entity = $formObject->getEntity();
    if (
      $entity->getEntityTypeId() === 'node'
      && in_array($entity->bundle(), ['organisation', 'location', 'event', 'article'])
    ) {
      $form['#attached']['library'][] = 'yourmodule/yourlibrary';
    }
  }
}

Գրադարանի կցում բոլոր (կամ ենթավերնագրերի) էջերին

Հետևյալ դեպքերում ռեսուրսները կապվում են ամբողջ էջին, ոչ թե կոնկրետ մասերին: Այս դեպքում գոյություն ունի hook_page_attachments(): Օրինակ՝ «Հետաբերական հղումներ» մոդուլում՝

// From core/modules/contextual/contextual.module.
function contextual_page_attachments(array &$page) {
  if (!\Drupal::currentUser()->hasPermission('access contextual links')) {
    return;
  }

  $page['#attached']['library'][] = 'contextual/drupal.contextual-links';
}

Գրադարանի կցում նախապատրաստման ֆունկցիայում

Կարող եք գրադարան կցել նախապատրաստման ֆունկցիայում՝ օգտագործելով հատուկ '#attached' բանալին՝

function yourmodule_preprocess_maintenance_page(&$variables) {
  $variables['#attached']['library'][] =  'your_module/library_name';
}

Գրադարանի կցում Twig շաբլոնում

Գրադարան կարող եք կցել նաև Twig շաբլոնում՝ օգտագործելով attach_library() ֆունկցիան: Օրինակ՝ ցանկացած *.html.twig ֆայլում՝

{{ attach_library('your_module/library_name') }}
Some markup {{ message }}

Գրադարանի կցում տոկեն փոխարինման ժամանակ

Եթե ձեր սեփական տոկենը կա զտված տեքստում, կարող եք գրադարան կցել BubbleableMetadata օբյեկտին hook_tokens() փոխարինման ժամանակ՝

/**
 * Implements hook_tokens().
 */
function your_module_tokens($type, $tokens, array $data, array $options, \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata) {
    $replacements = [];
    if ($type == 'your_module') {
        foreach ($tokens as $name => $original) {
            switch ($name) {
                case 'your-token':
                    $your_render_array = your_module_build_your_renderable_thing();
                    $replacements[$original] =  \Drupal::service('renderer')->render($your_render_array);
                    // ՆԱԵԼԻ HERE! Մենք կարող ենք ավելացնել նաև գրադարաններ!
                    $bubbleable_metadata->addAttachments(['library' => ['your_module/library_name'] ]);
                break;
            }
        }
    }

    return $replacements;
}

Նշեք, որ այս օրինակում ցուցադրվում է միայն, թե ինչպես կցել գրադարան փոխարինման ժամանակ՝ իսկ ձեր սեփական տոկենը լիովին իրականացնելու համար պետք է նաև իրականացնել hook_token_info():

Գրադարանի կցում ֆիլտրի պլագինում

Եթե մոդուլը տեքստային ֆիլտր է տրամադրում, կարող է օգտագործել setAttachments() կամ addAttachments() մեթոդները FilterProcessResult դասից: Օրինակ՝ filter_caption ֆիլտրը անում է հետևյալը՝

    if (...) { ...
      $result->setProcessedText(Html::serialize($dom))
        ->addAttachments([
          'library' => [
            'filter/caption',
          ],
        ]);
    }

    return $result;

Մատչելի JavaScript-ի ավելացում

Կա հնարավորություն ավելացնել JavaScript էջում, որը կախված է որոշ PHP հաշվարկված տեղեկատվությունից: Դրա համար օգտագործվում է drupalSettings (որը փոխարինում է Drupal 7-ի Drupal.settings-ին), PHP-ում սահմանված կարգավորումների զանգված, որին կարելի է JavaScript-ում հասանելիություն ունենալ որպես կարգավորումների օբյեկտ:

drupalSettings օգտագործելու համար գրադարանում նախ պետք է հայտարարեք կախվածություն core/drupalSettings գրադարանից:

Օրինակ՝ մեր նախորդ գրադարանի սահմանումը կլինի այսպիսին՝

cuddly-slider:
  version: 1.x
  js:
    js/cuddly-slider.js: {}
  dependencies:
    - core/jquery
    - core/drupalSettings

PHP ֆայլերում մենք այժմ կարող ենք փոխանցել անհրաժեշտ drupalSettings-ը մեր գրադարանի հետ: Համաձայնության համաձայն, օգտագործվում է մոդուլի անունը lowerCamelCase ձևաչափով որպես կարգավորումների բանալին և գրադարանի անունը ևս lowerCamelCase ձևաչափով՝ որպես ներքին բանալին:

Եթե ուզում ենք փոխանցել հաշվարկված 'foo' և 'baz' արժեքները PHP-ից JavaScript-ին, կարող ենք անել հետևյալը՝

$computed_settings = [
  'foo' => 'bar',
  'baz' => 'qux',
];

$build['#attached']['library'][] = 'your_module/library_name';
$build['#attached']['drupalSettings']['fluffiness']['cuddlySlider'] = $computed_settings;

Այժմ cuddly-slider.js-ը կարող է հասանելիություն ունենալ drupalSettings.fluffiness.cuddlySlider.foo և drupalSettings.fluffiness.cuddlySlider.baz, որոնց արժեքները համապատասխանաբար «bar» և «qux» են:

Ռենդերային զանգվածները կեշավորվում են: Ձեր հաշվարկված արժեքների և ձեր drupalSettings-ին կցվող կոմպոնենտի բնույթից կախված կարող է անհրաժեշտ լինել համապատասխանաբար փոփոխել կեշավորման մետատվյալները:

JavaScript սցենարի էլեմենտներին ատրիբուտներ ավելացնելը

Եթե ցանկանում եք ավելացնել ատրիբուտներ script թեգին, պետք է ատրիբուտների բանալին ավելացնել JSON-ում script URL-ից հետո: ատրիբուտների օբյեկտի ներսում ավելացրեք անհրաժեշտ ատրիբուտի անունը որպես բանալի, իսկ արժեքը կլինի ատրիբուտի արժեքը: Եթե արժեքը true է, ապա ատրիբուտը կցուցադրվի առանց արժեքի:

Օրինակ՝

 https://maps.googleapis.com/maps/api/js?key=myownapikey&signed_in=true&libraries=drawing&callback=initMap: {type: external, attributes: { defer: true, async: true, data-test: map-link } }

Սա կտա հետևյալ HTML-ը՝

<script src="https://maps.googleapis.com/maps/api/js?key=myownapikey&signed_in=true&libraries=drawing&callback=initMap" async defer data-test="map-link"></script>

Ագրեգացիայի անջատում

Լռությամբ մի քանի տեղական ֆայլեր միավորվում են հնարավորության դեպքում: Ֆայլի համար դա անջատելու համար սահմանեք նրա 'preprocess' դրոշակը false-ին:

cuddly-slider:
  version: 1.x
  js:
    js/cuddly-slider.js: {preprocess: false}
  dependencies:
    - core/jquery
    - core/drupalSettings

CDN / արտաքին գրադարաններ

Կարող եք ցանկանալ օգտագործել JavaScript, որը գտնվում է CDN (Բովանդակության Առաքման Ցանց) սերվերներում՝ էջի բեռնման արագությունն ավելացնելու համար: Դա կարելի է անել՝ հայտարարելով գրադարանի «արտաքին» լինելը և նաև ներառել որոշ տեղեկություններ արտաքին գրադարանի մասին:

angular.angularjs:
  remote: https://github.com/angular/angular.js
  version: 1.4.4
  license:
    name: MIT
    url: https://github.com/angular/angular.js/blob/master/LICENSE
    gpl-compatible: true
  js:
    https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js: { type: external, minified: true }

Inline JavaScript

Inline JavaScript-ը շատ կասկածելի է օգտագործման համար: Խորհուրդ է տրվում JavaScript-ը դնել ֆայլում, քանի որ այդպես այն կարող է կեշավորվել հաճախորդի կողմում, կարելի է կարդալ և գրել կոդը: Inline JS-ը հակասում է շատ կայքերի բովանդակության անվտանգության քաղաքականությանը և կարող է անսարք դարձնել ձեր մոդուլը դրանց համար:

Inline JavaScript, որը ստեղծում է նշագծեր

Սա նույնպես խորհուրդ չի տրվում: JavaScript-ը դարձրեք ֆայլում: Օրինակներ են՝ գովազդները, սոցիալական ցանցերի կիսման կոճակները, սոցիալական ցանցերի ցուցակների վիջեթները, որոնք օգտագործում են inline JS: Սակայն դրանք հատուկ տեսակի բովանդակություն/նշագծեր են, որոնք օգտագործվում են կայքից դուրս բովանդակություն բերելու համար JavaScript-ով:

Դրանք ցանկալի է դնել օգտատիրոջ բլոկում կամ ուղղակի Twig շաբլոնում:

Օրինակ՝

<script type="text/javascript"><!--
ad_client_id = "some identifier"
ad_width = 160;
ad_height = 90;
//--></script>
<script type="text/javascript" src="http://adserver.com/ad.js"></script>
<a class="twitter-timeline" href="https://twitter.com/wimleers" data-widget-id="307116909013368833">Tweets by @wimleers</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>

Inline JavaScript, որը ազդում է ամբողջ էջի վրա

Inline JavaScript-ը շատ խորհուրդ չի տրվում: Օրինակներ են՝ վերլուծականներ (օրինակ Google Analytics) և տեղադրված տառատեսակների ծառայություններ: Այս inline JS-ը կարող է պատկանի երկու կատեգորիաների՝ frontend/ստիլինգ կամ տրամաբանություն: Այս դեպքերի մեծամասնության համար բավարար է ֆիքսված JS ֆայլը և լրացուցիչ կարգավորումները:

Եթե դա արտաքին ինտերֆեյս/ստիլ է (օրինակ տեղադրված տառատեսակների ծառայություններ), ապա դա թեմային է պատկանում, և այս դեպքում նայեք՝ «Drupal 8-ում CSS և JS ավելացնելը թեմայում»:

Այլ դեպքերում JS-ը պատկանում է մոդուլին: Համապատասխան հուկում՝ սովորաբար hook_page_attachments()-ում, սահմանեք HTML տարրերը՝ օգտագործելով #attached-ի 'html_head' բանալին:

function fluffiness_page_attachments(array &$attachments) {
  $attachments['#attached']['html_head'][] = [
    [
      '#type' => 'html_tag',
      '#tag' => 'script',
      '#value' => 'alert("Hello world!");',
      '#attributes' => array('src' => ''),
    ],
    'hello-world',
  ];
}

Դինամիկորեն ստեղծվող CSS և JS

Իջեցված և բարդ դեպքերում կարող եք հարկավորվել դինամիկորեն ստեղծել CSS և JS: Կան երկու «դինամիկության» տեսակ՝

        1. Դինամիկ ստեղծված, բայց օգտագործվում է մի քանի հարցումների համար
        2. Դինամիկ ստեղծված յուրաքանչյուր հարցման համար

Եթե դինամիկ CSS/JS-ն օգտագործվում է մի քանի հարցումների համար, կարող եք օգտագործել hook_library_info_alter(), որպեսզի փոփոխեք գրադարանը՝ ներառելու համար ձեր ավտոմատացված CSS/JS-ը: Drupal 8-ի միջուկի օրինակ է color_library_info_alter(): Հիշեք, որ hook_library_info_build() կամ hook_library_info_alter() օգտագործելը միայն գրադարան ավելացնելու համար չի նշանակում, որ գրադարանը ավտոմատ կցվում է էջին, պետք է նաև կցել այն՝ օգտագործելով վերոհիշյալ մեթոդներից որևէ մեկը:

Եթե դինամիկ CSS/JS-ը ստեղծվում է յուրաքանչյուր հարցման համար, սա բավականին բարդ է, քանի որ յուրաքանչյուր հարցման համար պետք է վերանորոգել ակտիվները, ինչը կդանդաղեցնի Drupal-ը: Մենք չենք առաջարկում լավ API այսպիսի դինամիկության համար, քանի որ չենք ուզում, որ դուք օգտագործեք այդ մոտեցումը:

Այնուամենայնիվ, հնարավոր է: Դինամիկ JS-ի դեպքում ավելի լավ է օգտագործել կարգավորելի JS ֆայլեր՝ լոգիկան պահելով ֆայլում, իսկ հարցման ընթացքում միայն տրամադրել համապատասխան պարամետրերը drupalSettings-ում: Սա կիրառելի է նաև դինամիկ CSS-ի համար՝ կցելով այն drupalSettings-ի միջոցով և JS ֆայլի միջոցով ավելացնելով էջին:

Եթե drupalSettings-ի և JS ֆայլի համակցությունը հնարավոր չէ, ունեք վերջին տարբերակը՝ օգտագործել hook_page_attachments(), որտեղ $page['#attached']['html_head'] ավելացնում եք script կամ style թեգեր, ինչպես ցույց է տրված «Inline JavaScript, որը ազդում է ամբողջ էջի վրա» բաժնում:

hook_library_info_build() ավելացում՝ դինամիկ գրադարանների սահմանման համար

Որոշ առաջադեմ դեպքերում՝ ինչպես օրինակ, բացահայտել արտաքին գրադարաններ, որոնք պետք է ձեռքով բեռնվեն և ներկայացվեն որպես Drupal ռեսուրսների գրադարաններ (օրինակ՝ գրադարանների API մոդուլը), ցանկալի է ունենալ PHP կոդ՝ գրանցելու գրադարանները հավելյալ տրամաբանությամբ, ուստի ավելացվել է hook_library_info_build():

Հիշեք՝ «դինամիկ» չի նշանակում «runtime» (յուրաքանչյուր հարցման ընթացքում), քանի որ դա վատ կլիներ արագության համար: Դինամիկ կերպով ավելացված գրադարանները դեռ կեշավորվում են ինչպես YML ֆայլերով սահմանվածները: Դա նշանակում է, որ պետք է գրադարանը կցեք էջին կամ տարրին՝ վերոհիշյալ մեթոդներից որևէ մեկով: «Դինամիկ» այս դեպքում նշանակում է, որ կարող եք կառավարել գրադարանների կցումը տրամաբանությամբ:

Փոփոխություններ Drupal 7-ից

 

Լրացուցիչ տեղեկություններ

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.