Ծանուցված խնդիրներ Drupal 6 կամ 7-ից Drupal 8 թարմացման ժամանակ
Drupal 6-ից մինչև 8
Ագրեգատորների կատեգորիաներ
Drupal 8-ում այլևս գոյություն չունի ագրեգատորների կատեգորիաների կոնցեպտը, ուստի դրանք չեն տեղափոխվել Drupal 8։
Թույլատրված պրոտոկոլներ
Drupal 8-ում պրոտոկոլները պահվում են կոնտեյների պարամետրի «filter_protocols» մեջ, ուստի եթե փոխել եք «filter_allowed_protocols» փոփոխականը, այն պետք է փոխանցեք services.yml ֆայլում։
Թույլատրված տաքսոնոմիական բառարանների ցանկը
Drupal 6-ում տաքսոնոմիական բառարանի համապատասխան բովանդակության տեսակների ցանկը սահմանված էր բառարանի կարգավորումներում։ Drupal 8-ում թույլատրված բառարանները սահմանվում են տաքսոնոմիայի տերմինի հղման դաշտի կարգավորումներում։ Այս պարամետրը դեռ չի փոխանցվում, ինչի պատճառով Drupal 8-ում կարելի է հղում կատարել բոլոր բառարաններին։ Թույլատրված բառարանները կարող եք ձեռքով կարգավորել Drupal 8-ի թարմացումից հետո։
[ՓՈԽՏՎԱԾ] Ամսաթվերի ձևաչափեր
Փոխադրվում են միայն նախնական, կարճ, միջին և երկար ձևաչափերը։ Մնացած ձևաչափերը ունեն պահեստային ձևաչափ և պետք է թարմացվեն փոխանցումից հետո։
Դաշտեր, որոնք բացակայում են խմբագրման ձևում կամ դիտման էջում
Եթե փոխանցումը թվում է հաջողված, բայց դաշտերը չեն երևում խմբագրման ձևում, գնացեք բովանդակության տեսակի վարչական էջ՝ «Ձևի ցուցադրումը կառավարում» ներդիր և համոզվեք, որ դաշտերը ցույց են տրվում։ Դաշտերը, որոնք ավելացվել են փոխանցումով, կարող են թաքնված լինել։ Եթե չեն երևում հանգույցի դիտման ձևում, հնարավոր է, որ դրանք թաքնված են և պետք է ցուցադրվեն այդ էջում։ Migrate Plus մոդուլը կարող է օգնել օգտատերերի դաշտերի փոխանցման դեպքում։
Գլխավոր էջը չի բեռնվում, թեման չի աշխատում
Փոխադրման ընթացքում երբեմն բեռնվում է սպիտակ էջ և միայն մի քանի էլեմենտ։ Դրա նման է վնասված թեմային։ /user այցելելն ու վերադարձը գլխավոր էջ սովորաբար շտկում է խնդիրը։
UI մենյու
menu_primary_links_source և menu_secondary_links_source փոփոխականները չեն փոխանցվում, քանի որ դրանց համապատասխաններ Drupal 8-ում չկան։
Մոդուլներ և թեմաներ
Փոխադրման սկսից պետք է ակտիվացնել նոր մոդուլները և թեմաները, ինչպես նաև կարգավորել ադմինիստրատորի թեման, եթե կա։
Հանգույցի բովանդակության տեսակներ
Drupal 6-ի նախնական կարգավորումներում բովանդակության տեսակները Story և Page են։ Drupal 8-ում բովանդակության նախնական տեսակներն են Article և Basic Page (որոնք ունեն մեքենայական անուն 'page', ինչպես Drupal 6-ում):
- Փոխադրման ընթացքում Drupal 6-ի Page բովանդակության տեսակն արտապատկերում է Drupal 8-ի Page տեսակի վրա, քանի որ մեքենայական անունները համընկնում են։
- Drupal 8-ում ստեղծվում է Story բովանդակության տեսակ։ Հնարավոր է, ցանկանաք ջնջել Drupal 8-ի Article տեսակը, եթե այն ձեզ պետք չէ։ Տեսեք մանրամասներ՝
#2236289: D6-ից փոխանցվող Story հանգույցները ստեղծում են նոր բովանդակության տեսակ D8-ում
Հանգույցների թարգմանություններ
Drupal 6 և 7-ում հանգույցների թարգմանությունները պահվում էին տարբեր հանգույցներում, իսկ Drupal 8-ում նրանք միացվում են իրենց աղբյուր լեզվի հանգույցների հետ։ Փոխադրման համակարգը կատարում է հանգույցների թարգմանությունների միավորում, սակայն դա կարող է առաջացնել հղումների, որոնք ցույց են տալիս գոյություն չունեցող հանգույցների վրա։ Տեսեք #2746527: [META] Առաջարկել տվյալների մշակման մեխանիզմներ՝ կապված Drupal 6 և 7 հանգույցների թարգմանությունների հետ։
Ուշադրություն դարձրեք, որ թարգմանված հանգույցների խմբագրումները դեռ չեն փոխանցվել։ Տեսեք #2746541: [backport] D6 և D7 հանգույցների խմբագրումների փոխանցում D8։
Բազմալեզու Drupal 6-ից Drupal 8 թարմացման ակնարկ
Պրոֆիլների կատեգորիաներ
Drupal 6-ի պրոֆիլ մոդուլով խմբավորված դաշտերը չեն խմբավորվում Drupal 8-ում։
Պրոֆիլ դաշտ (ընտրանքների ցուցակ)
Drupal 8-ում դաշտի թույլատրված արժեքների կարգավորումը կլինի Drupal 6-ում ընտրված բոլոր օգտատերերի արժեքների և թույլատրված արժեքների համադրություն, ոչ միայն Drupal 6-ում թույլատրվածները։
Վիճակագրություն
Մուտքի գրառման և վիճակագրության կարգավորումները չեն փոխանցվում i18n-ի հետ։ i18n վիճակագրության կոնսոլիդացումը տեղափոխվել է Drupal 8.5.2-ից։ Տեսեք #2930101: i18n/statistics - հանգույցների հաշվիչը չի թարմացվում թարգմանությունների համար
Տեքստ / մուտքագրում ձևաչափեր
Drupal 8-ում չճանաչված ֆիլտրերի ձևաչափերը փոխանցվում են որպես filter_null, որը պարզապես վերադարձնում է դատարկ տող։ Սա նշանակում է, որ ցանկացած մուտքի ձևաչափ, որը օգտագործում է անհայտ ֆիլտր, չի ցուցադրի դաշտի պարունակությունը, չնայած այն պահվում է տվյալների բազայում։ Սա կարող է շփոթեցնել։ Տեսեք #2618332: Ապակողպման գործառույթների ավելի լավ մշակում filter_null-ով և #2630578: Դუბლիկատների ձևաչափեր D6 թարմացման ժամանակ
Չճանաչված ձևաչափերի մեջ է հայտնի PHP կոդի ֆիլտրը և ցանկացած այլ ֆիլտր, որը տրամադրվում է contrib մոդուլով, որը ձեր Drupal 8-ի տեղադրությունում հասանելի չէ։
PHP ֆիլտրն չի աջակցվում Drupal 8 միջուկում — սա վատ պրակտիկա է, բայց կարող եք օգտագործել PHP մոդուլը, եթե դա իսկապես անհրաժեշտ է։
Դրա շտկման համար դուք ունեք մի քանի տարբերակներ՝
- Ստուգեք՝ արդյոք ֆիլտրեր տրամադրող մոդուլներն ունեն Drupal 8 տարբերակ և տեղադրեք դրանք։
- Խմբագրեք և պահպանեք ազդված մուտքային ձևաչափերը։ Սա կջնջի format_null հղումը, և պարունակությունը կսկսի երևալ։ Զգուշացեք, որ քանի որ սկզբնական ֆիլտրը չկա, պարունակությունը չի ֆիլտրավորվի, կարող են երևալ անփոխարինված տոկեններ կամ նույնիսկ անվտանգային խնդիրներ առաջանալ։
- Խմբագրեք պարունակությունը և փոխեք այլ մուտքի ձևաչափի։ Սա փոխ переносит те же проблемы, что и предыдущий пункт.
Ժամային գոտիներ և ամսաթվեր
Drupal 6-ում տեղական ժամանակը հաշվարկվում էր ժամային գոտու օֆսեթով։ Drupal 7 և 8-ում օգտագործվում է ժամային գոտու անունը։ Ցավոք PHP timezone_name_from_abbr() ֆունկցիան, որը օֆսեթն անալիզացնում է ժամային գոտու անունների, տարբեր արդյունքներ է տալիս կախված սերվերի ամառային ժամանակի կարգավիճակից։ Օրինակ՝ 3600 օֆսեթը վերածվում է Europe/Paris, եթե ամառային ժամանակը չաշխատում է, և Europe/London՝ եթե աշխատում է։ Փոխադրման պրոցեսը անտեսում է ամառային ժամանակը։ Ձեր սերվերի կարգավորումների հիման վրա Drupal 8-ի ժամային գոտու կարգավորումները կարող են սխալ լինել փոխանցումից հետո (#2353679: D6-D8 փոխանցման ժամանակ բացակայում է date_default_timezone փոփոխականը)։
Ժամային գոտիներ, որտեղ գործում է ամառային ժամանակը, ամսաթիվը կարող է ընկալվել տարբեր կերպ Drupal 8-ում՝ համեմատած Drupal 6-ի հետ։ Օրինակ, եթե ժամը մոտ է կեսգիշերին, ամսաթիվը կարող է դիտվել որպես հաջորդ օրը։ Սա խնդիրներ է առաջացնում, հատկապես երբ ամսաթվի տոկենները օգտագործվում են ուղիներ կառուցելու համար (օրինակ՝ URL-ների խաբկանքներ, ֆայլի դաշտերի ուղիներ)։ Տեսեք հնարավոր լուծումներ՝ #2926421: D6 և D8 ամսաթվերի տարբերությունների մշակումը
URL մականուններ
Երբ փոխանցում եք URL մականունները այն լեզվի համար, որը դեռ ակտիվ չէ Drupal 8-ում, մականունները չեն աշխատի մինչև այդ լեզուն միացվի։
Views
Views-ը դեռ չի փոխանցվել։ Ձեզ պետք կլինի ձեռքով ստեղծել դիտումները Drupal 8-ում։ Լրացուցիչ տեղեկությունների համար նայեք #2500547: Drupal 6 և 7-ից Views-ի թարմացման ուղին և Views Migration մոդուլը։
Օգտագործողի ակտիվության բլոկի կարգավորումներ
Օգտագործողի ակտիվության կարգավորումները չեն փոխանցվում։ Դրանք պետք է ձեռքով կարգավորվեն համապատասխան դիտման մեջ՝ ֆիլտրեր/մուտքի կարգավորումների բաժնում (#2169327: Օգտագործողի ակտիվության բլոկի կարգավորումների փոխանցում)։
Drupal 7-ից մինչև 8
[ՓՈԽՏՎԱԾ] Թույլատրված տաքսոնոմիական տերմինների բառարաններ
Drupal 7-ում տաքսոնոմիայի տերմինի հղման դաշտի թույլատրված բառարանը սահմանվում է դաշտի կարգավորումներում։ Այս պարամետրը դեռ չի փոխանցվում, ինչի պատճառով Drupal 8-ում կարելի է հղում կատարել բոլոր բառարաններին։ (տես #2763637: D7 տերմինների դաշտերը չեն փոխանցվում՝ թույլատրված բառարաններով)։ Թույլատրված բառարանները կարող եք ձեռքով կարգավորել Drupal 8 թարմացումից հետո։
Պատժված IP հասցեներ
Drupal 7-ի ban_ip աղյուսակի id սյունը չի փոխանցվում։
Մեկնաբանության տեսակներ
Drupal 7-ում մեկնաբանությունները կարող են ունենալ տարբեր դաշտեր տարբեր բովանդակության տեսակների համար։ Ընդհանրապես, մեկնաբանություններին բնորոշ են Օգտագործող, Վերնագիր և Մեկնաբանություն դաշտերը։ Քանի որ տարբեր D7 մեկնաբանություններ կարող են ունենալ տարբեր դաշտեր, փոխանցման ընթացքում ստեղծվում են առանձին D8 մեկնաբանության տեսակներ յուրաքանչյուր բովանդակության համար՝
- Foo բովանդակության տեսակն ունի comment_node_foo մեկնաբանության տեսակ
- Bar բովանդակության տեսակն ունի comment_node_bar մեկնաբանության տեսակ
Միակ բացառությունը ֆորումի մեկնաբանություններն են։ Երբ D8 Forum մոդուլը միացված է, ավտոմատ ստեղծվում է comment_forum մեկնաբանության տեսակ, և D7 ֆորումի մեկնաբանությունները տեղափոխվում են դրան։
Կարևոր նշում․ Drupal 8-ի ստանդարտ տեղադրման պրոֆիլն ու Article բովանդակության տեսակը
Եթե ձեր Drupal 8 կայքը տեղադրվել է ստանդարտ պրոֆիլով, կունենաք Article անունով բովանդակության տեսակ։
- Այս բովանդակության տեսակը կունենա մեկնաբանության դաշտ՝ comment անվամբ։
- Փոխադրման համակարգը չի կարող գուշակել, որ D8 կայքը տեղադրվել է ստանդարտ պրոֆիլով։ Ուստի ստեղծվում է comment_node_article մեկնաբանության տեսակ, և D7-ի Article բովանդակության մեկնաբանությունները տեղափոխվում են այդ տեսակ։
Արդյունքում ձեր Article բովանդակության տեսակը կունենա երկու մեկնաբանության դաշտ՝
- comment, որը ստացվել է D8 ստանդարտ տեղադրման պրոֆիլից և չի օգտագործվում
- comment_node_article, որը ստեղծվել է փոխանցման համակարգով
Հավանական է, որ չեք ցանկանա երկու մեկնաբանության դաշտ ունենալ Article-ի համար, ուստի ձեռքով ջնջեք comment դաշտը (admin/structure/types/manage/article/fields), և անհրաժեշտության դեպքում ջնջեք նաև comment տեսակը (admin/structure/comment), եթե ոչ մի տեղ չեք օգտագործում comment տեսակը։
Խորհուրդ է տրվում ոչ ցանկալի մեկնաբանության դաշտը ջնջել Article բովանդակության տեսակից նախքան փոխանցումների գործարկումը, քանի որ Drupal 8 միջուկում առկա է մի սխալ, կապված մեկնաբանության դաշտի ջնջման հետ։ Տեսեք #2906470: Մեկնաբանություններ և comment_entity_statistics գրառումները կորում են մեկնաբանության դաշտի օրինակի ջնջումից հետո։
PHP կոդ
Չճանաչված Drupal 8 ֆիլտրերի ձևաչափերը փոխանցվում են filter_null, որը վերադարձնում է դատարկ տող։ Սա նշանակում է, որ անհայտ ֆիլտր օգտագործող ցանկացած մուտքային ձևաչափ չի ցուցադրում դաշտերի պարունակությունը, չնայած այն գտնվում է տվյալների բազայում։
Չճանաչված ձևաչափերի մեջ է հայտնի PHP կոդի ֆիլտրը և ցանկացած այլ ֆիլտր, որը տրամադրվում է contrib մոդուլով, որը չի միացված Drupal 8-ի տեղադրմանը։
PHP ֆիլտրը չի աջակցվում Drupal 8 միջուկում՝ սա վատ պրակտիկա է, բայց հնարավոր է օգտագործել PHP մոդուլը եթե դա անհրաժեշտ է։
Դրա շտկման համար կարող եք՝
- Ստուգել, արդյոք ֆիլտրեր տրամադրող մոդուլներն ունեն Drupal 8 տարբերակ և տեղադրել դրանք։
- Խմբագրել և պահպանել ազդված մուտքային ձևաչափերը՝ ջնջելով format_null հղումը, որից հետո պարունակությունը կցուցադրվի։ Զգուշացեք, որ քանի որ սկզբնական ֆիլտրը չկա, պարունակությունը չի ֆիլտրավորվի և հնարավոր են անվտանգության խնդիրներ։
- Փոխել մուտքի ձևաչափը այլընտրանքայինի, ինչը նույն խնդիրներն է կրում ինչպես վերևում նշվածը։
Պարզ տեքստի դաշտեր
Դեպքերի հակասական կարգավորումներ Drupal 7-ում
Drupal 7-ում տեքստի մշակման պարամետրերը սահմանվում են դաշտի օրինակների կարգավորումներում։ Այսինքն՝ նույն դաշտը կարող է օգտագործվել տարբեր բովանդակության տեսակների համար՝ մեկում որպես «Պարզ տեքստ», մյուսում՝ «ֆիլտրված տեքստ»։
Drupal 8-ում տեքստի պահպանումը բաժանված է Text (պարզ) և Text (ֆիլտրված) տեսակի պահեստների։ Կարգավորումը կատարվում է դաշտի պահպանման մակարդակով, ուստի պարզ/ֆիլտրված տարբերակը չի կարող փոխվել բովանդակության տեսակների միջև։
Փոխադրման համակարգը չի կատարում ենթադրություններ։ Եթե հայտնաբերվում են հակասական տեքստի մշակման պարամետրեր, այդ դաշտերը բաց են թողնվում և նշվում են համակարգի օրագրում։ Կայքի կառուցողն ունի երկու տարբերակ՝
1. Փոխել Drupal 7-ում դաշտի մշակման պարամետրերը՝ բոլոր բովանդակության տեսակների համար օգտագործելով նույն պարամետրերը։
- Զգուշացեք՝ տարբեր մշակման պարամետրերի դեպքում հնարավոր են XSS հարձակումներ։
- Եթե ձեր դաշտը Drupal 7-ում սահմանված է որպես Պարզ տեքստ և չվստահելի օգտատերեր կարող են հրապարակել այդ դաշտում, հնարավոր է վնասակար մուտք ունենաք։ Սա չդարձավ XSS Drupal 7-ում, քանի որ դաշտը պարզապես տեքստ էր և չկատարվել վնասակար կոդը։ Բայց եթե այժմ փոխեք դաշտը Ֆիլտրված տեքստի, համոզվեք, որ օգտագործվող տեքստի ձևաչափը թույլ չի տալիս վնասակար մուտք։
2. Եթե ձեզ պետք է երկու տարբեր տեքստի մշակման կարգավորում Drupal 8-ում, ապա պետք է ստեղծեք ձեր սեփական փոխանցման ուղի՝ Drupal 7 դաշտերը բաժանելով երկու Drupal 8 դաշտերի։ Ավելի մանրամասն՝ Փոխանցումների կարգավորում Drupal 8 թարմացման ժամանակ։
Տեքստի դաշտ և ամփոփում Drupal 7-ում
Drupal 7-ում կա Long text և summary դաշտ։ Drupal 8-ի համապատասխան դաշտը Text (ֆիլտրված, երկար, ամփոփմամբ) է։ Drupal 7-ում դաշտի կարգավորումներում կարելի է սահմանել տեքստի մշակումը որպես պարզ տեքստ։ Drupal 8-ի Text (ֆիլտրված, երկար, ամփոփմամբ) դաշտերը միշտ ֆիլտրված տեքստ են։
Փոխադրման համակարգը կրկին չի կատարում ենթադրություններ։ Եթե հայտնաբերվի, որ Long text + summary դաշտը Drupal 7-ում մշակվում է որպես պարզ տեքստ, դաշտը բաց է թողնվում և նշվում օրագրում։ Կայքի կառուցողն ունի նույն երկու տարբերակները ինչպես վերևում՝
1. Փոխել դաշտի կարգավորումը Drupal 7-ում՝ պարզ տեքստից ֆիլտրված տեքստի։
- Նույն XSS զգուշացումները կիրառելի են։
2. Ստեղծել սեփական փոխանցման ուղի և տրամաբանություն՝ ինչպես փոխանցել դաշտերը Drupal 8։ Ավելի մանրամասն՝ Փոխանցումների կարգավորում Drupal 8 թարմացման ժամանակ։
Վիճակագրություն
Մուտքի գրառման և վիճակագրության կարգավորումները չեն փոխանցվում i18n-ի հետ։ i18n վիճակագրության կոնսոլիդացումը տեղափոխվել է Drupal 8.5.2-ից։ Տեսեք #2930101: i18n/statistics - հանգույցների հաշվիչը չի թարմացվում թարգմանությունների համար։
Views
Views-ը դեռ չի փոխանցվել։ Ձեզ պետք կլինի ձեռքով ստեղծել դիտումները Drupal 8-ում։ Տեսեք #2500547: Drupal 6 և 7-ից Views թարմացման ուղին և Views Migration մոդուլը։
ID-ի հնարավոր հակասություններ (D6 կամ D7-ից Drupal 8)
Խնդիր
Ինչպես նշվում է թարմացման պատրաստման ուղեցույցում, Drupal 8 կայքը պետք է ամբողջությամբ դատարկ լինի թարմացման ժամանակ։ Փոխադրման պրոցեսը պահպանում է սկզբնական կայքի ID-ները, երբ դրանք ներմուծում է Drupal 8։ Եթե Drupal 8-ում արդեն եղել է բովանդակություն (օրինակ՝ nid=1 հանգույց), հավանական են ID հակասություններ։
Արդեն աշխատում են ավտոմատ հայտնաբերման և նախազգուշացման վրա՝ տեսեք #2876085: ID հակասությունների հնարավորության ստուգում թարմացման ժամանակ։ Առայժմ ադմինիստրատորները պետք է ձեռքով ուսումնասիրեն հակասությունները։ ID հակասությունների դեպքում բովանդակության կամ տաքսոնոմիայի տերմինների տվյալները կարող են անցնվել մյուսներին՝ տվյալների կորստով կամ վնասված հղումներով։
Հակասությունների առաջացման սցենարներ
- Drupal 8 կայքը արդեն օգտագործվում էր թարմացման պահին, և բովանդակություն է ստեղծվել։
- Սկզբնական փոխանցումը ավարտվել է, բայց բովանդակությունը նաև շարունակվել է ստեղծվել սկզբնական և նպատակային կայքերում, ինչը կարող է առաջացնել ID հակասություններ։
- Drupal 8-ն ամբողջությամբ դատարկ էր, բայց տեղադրված մոդուլները կարող են ստեղծել սեփական տվյալները (օրինակ՝ ֆորումի տաքսոնոմիայի տերմինները) և նրանց ID-ները կարող են հակասել։
- Ծագման տվյալները կարող են չունենալ ID, բայց նպատակային համակարգը պահանջում է։ Օրինակ՝ Drupal 6-ում օգտագործվում են չկառավարվող ֆայլեր առանց ID-ների, իսկ Drupal 8-ում պահանջվում է ID։ Փոխադրման ժամանակ կառավարվող ֆայլեր ստեղծվում են՝ հնարավոր հակասություններով։
- ID հակասությունները թարգմանությունների դեպքում ավտոմատ չեն հայտնաբերվում։
- Եթե ամբողջական թարմացում եք կատարում դատարկ Drupal 8-ում, ամեն ինչ կարգին կլինի։
- Եթե մի մասը թարմացնում եք, իսկ Drupal 8-ում արդեն թարգմանություններ կան, դրանք կարող են վերագրանցվել։
Ձևակերպումներ
Ընդմիջվող փոխանցում հակասող տարրերի համար
Կարող եք կարգավորել փոխանցումը այնպես, որ հակասող տարրերի համար նոր ID-ներ ստեղծվեն։ Սա կանդրադառնա նրանց ներսում ուղուն և հնարավոր է՝ հանրայնացված URL-ներին։ Ուշադիր հետևեք, որ փոփոխված հղումները շտկվեն։
Ավտոինկրեմենտի արժեքների կարգավորում
Եթե Drupal 8-ում նպատակային տվյալներ չկան, բայց փոխանցման պրոցեսը կարող է առաջացնել հակասություններ, կարելի է կարգավորել AUTO_INCREMENT արժեքը տվյալների բազայի աղյուսակներում, որպեսզի ստեղծվող ի հայտ եկած միավորների ID-ները չհակասեն արդեն կանոնավորներին։ Դրա օրինակ է՝ օգտագործողի պատկերների փոխանցումը։
Համաձայնվեք տվյալների վերալցման հետ
Կարող եք շարունակել փոխանցումը, բայց սա ոչ ցանկալի լուծում է, քանի որ կարող է հանգեցնել տվյալների կորստի։
Բազմալեզու կայքերի թարմացում (D6 կամ D7-ից Drupal 8)
Բազմալեզու փոխանցումների համար, որոնք օգտագործում են Drupal 6 և 7-ի i18n մոդուլները և Drupal 7-ի entity_conversion մոդուլը, պետք է, որ Drupal 8-ում միացված լինի migrate_drupal_multilingual հիմնական մոդուլը։
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.