Ինչպես վեր գրել jQuery Cookie-ը և core/js-cookie գրադարանը Drupal-ում՝ օգտագործելով js_cookie մոդուլը
Ինչու՞ է այս փոփոխությունը պետք
- Այնուամենայնիվ Drupal 9-ում jQuery Cookie-ը հեռացվել է core-ից և փոխարինվել js-cookie գրադարանով։ Drupal 9-ի ընթացքում գոյություն ուներ հետհամատեղելիության շիմ (
core/jquery.cookie), բայց այն հեռացվել է Drupal 10-ի համար։
https://www.drupal.org/node/3104677 - Drupal 10.1-ում
core/js-cookieasset գրադարանը հայտարարվեց հնացած և նախատեսվեց հեռացվել Drupal 11-ում, քանի որ core-ը այլևս չէր օգտագործում այն։ Փոփոխությունների գրառումը առաջարկում է անցում կատարել contrib-ի կողմից տրամադրված JS Cookie մոդուլին։
https://www.drupal.org/node/3322720
https://www.drupal.org/project/drupal/issues/3296086 - Contrib JS Cookie մոդուլը (
drupal/js_cookie) ապահովում է js-cookie գրադարանի asset library սահմանում, որպեսզի module-ները/թեմաները շարունակեն օգտվել cookies-ներից Drupal 10 և 11 տարբերակներում։ https://www.drupal.org/project/js_cookie
Միգրացիոն ուղու ընդհանուր պատկերը
1) Drupal 8 → 9՝ jQuery Cookie → core/js-cookie
Պատմական համատեքստ․ Drupal 9-ը փոխարինեց jQuery Cookie-ը js-cookie-ով և տրամադրեց կոդի ու գրադարանների համապատասխանեցման օրինակներ։ https://www.drupal.org/node/3104677
# ՄԻՆՉԵՎ (Drupal 8 / վաղ 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/jquery
- core/jquery.cookie
- core/drupal
// ՄԻՆՉԵՎ (jQuery Cookie API)
(($, Drupal) => {
Drupal.behaviors.myModule = {
attach: () => {
$.cookie('cutest', 'red panda');
const myCookieValue = $.cookie('cutest');
$.removeCookie('cutest');
$.cookie.json = true;
$.cookie('cutest', { animal: 'red panda' });
},
};
})(jQuery, Drupal);
Դրանից հետո (Drupal 9) դուք կախված էիք core/js-cookie-ից և օգտագործում էիք Cookies.* API-ն։ https://www.drupal.org/node/3104677
# ՀԵՏՈ (Drupal 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- core/js-cookie
// ՀԵՏՈ (Drupal 9, js-cookie API)
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
Cookies.set('cutest', 'red panda');
const myCookieValue = Cookies.get('cutest');
Cookies.remove('cutest');
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutest = JSON.parse(Cookies.get('cutest') || 'null');
},
};
})(Drupal, window.Cookies);
2) Drupal 10.1+ և 11՝ core/js-cookie → contrib js_cookie
Քանի որ Drupal core-ը 10.1-ում հնացած է հայտարարել core/js-cookie-ը և հեռացրել այն 11-ում, դուք պետք է այն փոխարինեք contrib JS Cookie մոդուլի գրադարանով՝ js_cookie/js-cookie։ https://www.drupal.org/node/3322720
Composer
composer require drupal/js_cookie
Սա տեղադրում է մոդուլը, որը մատչելի է դարձնում Drupal-ի asset գրադարանը՝ վերին մակարդակի js-cookie փաթեթի համար։ https://www.drupal.org/project/js_cookie
Մոդուլի/թեմայի կախվածության հայտարարում (contrib/custom նախագծերի համար)
# my_module.info.yml (կամ ձեր թեմայի .info.yml)
name: My Module
type: module
core_version_requirement: ^10 || ^11
dependencies:
- js_cookie:js_cookie
Նախագծի էջում հստակ նշվում է, որ contrib մոդուլները պետք է ավելացնեն js_cookie:js_cookie որպես կախվածություն (և պահանջեն drupal/js_cookie composer-ում, եթե մոդուլն ունի composer.json): [4]
Փոխել ձեր asset գրադարանի կախվածությունը
# Փոխարինեք սա (հնացած 10.1-ում, հեռացված 11-ում)
# - core/js-cookie
# Ասվածով (տրամադրված contrib մոդուլի կողմից)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- js_cookie/js-cookie
Այս ճշգրիտ փոխարինումը առաջարկվում է deprecation-ի մասին core change record-ում։ [2]
JavaScript կոդ
Ձեր JS կոդը չի պահանջում որևէ փոփոխություն, եթե արդեն օգտագործել եք Cookies API-ն js-cookie գրադարանից—փոփոխվում է միայն գրադարանի կախվածությունը։ [2]
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
// Սահմանել cookie:
Cookies.set('cutest', 'red panda', { path: '/', sameSite: 'Lax' });
// Ստանալ cookie:
const myCookieValue = Cookies.get('cutest');
// Հեռացնել cookie:
Cookies.remove('cutest', { path: '/' });
// Ապահով JSON պահպանում/վերականգնում։
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutestRaw = Cookies.get('cutest');
const cutest = cutestRaw ? JSON.parse(cutestRaw) : null;
},
};
})(Drupal, window.Cookies);
Խորհուրդ․ js-cookie-ն համապատասխան է RFC 6265-ին և արժեքները encode է անում այլ կերպ, քան հին jQuery Cookie-ը, հատկապես JSON-ի դեպքում։ Drupal 9-ի փոփոխության գրառումը նկարագրում է այս տարբերությունները։ https://www.drupal.org/node/3104677
Օրինակներ էկոհամակարգից
- EU Cookie Compliance մոդուլը հետևել է
core/js-cookie-ի հնացմանը և առաջարկել է փոխել այնjs_cookie/js-cookie-ով։ https://www.drupal.org/project/eu_cookie_compliance/issues/3380490 - Տարբեր contrib նախագծեր ստեղծել են issue-ներ՝ jQuery Cookie-ը js-cookie-ով փոխարինելու և հետագայում
core/js-cookie-ի հնացման հարցերը լուծելու համար։ https://www.drupal.org/project/quicktabs/issues/3298649
https://www.drupal.org/project/fpa/issues/3505122
Քայլ առ քայլ թարմացման ցուցումներ
A) jQuery Cookie-ից անմիջապես դեպի js_cookie/js-cookie (Drupal 10+)
- Հեռացրեք
core/jqueryևcore/jquery.cookieկախվածությունները ձեր.libraries.ymlֆայլից։ https://www.drupal.org/node/3104677 - Ավելացրեք
js_cookie:js_cookieձեր.info.ymlկախվածություններին (contrib/custom մոդուլների և թեմաների համար)։ https://www.drupal.org/project/js_cookie - Փոխեք գրադարանի կախվածությունը՝ օգտագործելով
js_cookie/js-cookie։ https://www.drupal.org/project/js_cookie - Վերագրեք ձեր JS-ը
$.cookie-ից դեպիCookies.*, ինչպես ցույց է տրված վերևում։ https://www.drupal.org/node/3104677
B) core/js-cookie-ից դեպի js_cookie/js-cookie (Drupal 10.1 → 11)
- Տեղադրեք մոդուլը՝
composer require drupal/js_cookie։ https://www.drupal.org/project/js_cookie - (Contrib) Ավելացրեք
js_cookie:js_cookieձեր.info.yml-ում։ Պարզապես ակտիվացրեք մոդուլը։ https://www.drupal.org/project/js_cookie - Ձեր
.libraries.yml-ում փոխարինեքcore/js-cookie-ը՝js_cookie/js-cookie-ով։ https://www.drupal.org/node/3322720 - Պահպանեք ձեր գոյություն ունեցող
Cookies.*JS կոդը։ Ֆունկցիոնալ փոփոխություններ պետք չեն։ https://www.drupal.org/node/3322720
Կարևոր նկատառումներ և լավագույն փորձեր
- Drupal 11-ի պատրաստվածություն:
core/js-cookie-ը հեռացվել է Drupal 11-ում — համոզվեք, որ բոլոր կախվածությունները ուղղված ենjs_cookie/js-cookie-ին։ https://www.drupal.org/node/3322720 - Գաղտնիություն/CDN: js_cookie նախագծի էջում նկարագրված է, թե ինչպես խուսափել js-cookie-ին CDN-ից բեռնելուց (տվյալների պաշտպանություն)։ Նախընտրելի է տեղային asset-ներ օգտագործել։ https://www.drupal.org/project/js_cookie
- Էնքոդավորում և JSON: Մի հույս դրեք JSON-ի անուղղակի վարքի վրա։ Օգտագործեք
JSON.stringifyևJSON.parse՝ ինչպես ցույց է տրված վերևում։ https://www.drupal.org/node/3104677 - Իրական նախագծային օրինակներ: Դիտարկեք issue queue-ները (օր.՝ EU Cookie Compliance)՝ թարմացման օրինակները տեսնելու համար։ https://www.drupal.org/project/eu_cookie_compliance/issues/3380490