Lazy Load Images - Lazy Load plugins WordPress-ի համար: PHP հավելվածի համար պլագիններ թույլատրելու լավագույն միջոցը Դանդաղ php հավելված

  • 20.06.2020

Ֆունկցիոնալ ֆայլը զվարճալի օգնական է կայքի ֆունկցիոնալությունը ընդլայնելու համար: հատկապես, եթե օգտագործվում է իր նպատակային նպատակի համար, այնուամենայնիվ, բլոգի/կայքի տերերից շատերը հրաշալի են գործառույթները.

Ցանկացած բիզնեսում կան նպատակահարմարություն և սահմանափակումներ (սահմանափակումներ, հաճախ տրամաբանական), և, հետևաբար, որոշ գործարկվող կոդ, որը նախատեսված է WP միջուկի պարամետրերը կարգավորելու համար (ոչ թե թեմաներ), ավելի ճիշտ կլինի տեղափոխել կաղապարից դուրս ...

Երբ խոսակցությունը վերաբերում է կայքի ֆունկցիոնալության արդիականացմանը, «առանց պլագինների...» հոդվածների շարքում, անշուշտ, խորհուրդ է տրվում կոդի բոլոր բլոկները խցկել լեգենդար functions.php-ի մեջ: ճիշտ չէ՛։

Ավելի տրամաբանական է բոլոր զուտ տեխնիկական ընդլայնումները (կաղապարի ոճի հետ ուղղակիորեն չառնչվող) փոխանցել դրանց գրանցման համար կազմակերպված փլագին։

Եկեք ստեղծենք այն: և նաև խոսեք դրական և բացասական կողմերի մասին (որոնցից շատ ավելի քիչ են) ...


Հոդվածի հատվածներ.

ինչպես ստեղծել ձեր plugin-ը

Ստորև բերված տեքստում մենք կսովորենք, թե ինչպես ստեղծել ձեր սեփական փլագինը ձեր սեփական ձեռքերով. մենք կհասկանանք բոլոր մանրամասները, նրբությունները: Մենք կպարզենք, թե որոնք են դրական և բացասական կողմերը (ավելի քիչ են մինուսները !! և ավելի շուտ, դրանք ամենևին էլ դեմ չեն, այլ այս կամ այն ​​նպատակահարմարությունը յուրաքանչյուր ադմինիստրատորի համար)

որն է տարբերությունը functions.php ֆայլի և plugin-ի միջև

Ինչո՞ւ պետք է կայքի ֆունկցիոնալության հետ անմիջականորեն կապված որոշ կոդ տեղափոխվի առանձին փլագին:

Ֆունկցիոնալ ֆայլն ինքնին, դրա նպատակն ու հետևողականությունը ոչնչով չեն տարբերվում պլագինից (պարզապես թեմայի մեջ պլագին)): - նրա հիմնական խնդիրն է հարստացնել կոնկրետ (ակտիվ) ձևանմուշը օգտակար ֆունկցիոնալությամբ:

Օրինակ՝ «նավարկություն», որտեղ, տրամաբանորեն, կոճակի ընտրացանկը ոճավորվում է CSS-ով՝ ակտիվ թեմայի ոճին համապատասխան, ավելի ճիշտ կլինի այն թողնել կաղապարի արմատում։

Ո՞րն է օգուտը՝ ֆունկցիայի ֆայլը բաժանել առանձին ֆայլերի, թե՞ առանձին պլագինի:

Օրինակ, ամենատարածվածը `դուք որոշել եք փոխել կաղապարը: ... արդյունքում բոլոր ֆունկցիոնալ զարգացումները կկորչեն, քանի որ ամբողջ օգտակար կոդը գտնվում է ֆունկցիոնալ ֆայլում (ես մի անգամ տեսել եմ նման ֆայլի չափը 750KILO)

Իհարկե, դուք կարող եք փոխանցել գործառույթների փաստաթղթերը նոր թեմա, բայց ամենից շատ, առանց խմբագրումների, որոնք շատ օգտակար ժամանակ են խլում, դուք չեք կարող դա անել. կապիկ և աշխատանք)

Եւ հետո:

կայքի ֆայլերի բեռնման կարգը

Համառոտ. կայքի հիմնական ֆայլերի բեռնման կարգը մեր օրինակում հետևյալն է. կայքի ակտիվ պլագինները (պլագինների թղթապանակից) և դրանց բովանդակությունը բեռնվում են մի փոքր ավելի վաղ, և միայն դրանից հետո բովանդակությամբ functions.php ֆայլը. մշակված. Ամեն ինչ միլիվայրկյանների մեջ է, և հազիվ թե արժե լրջորեն խոսել էջի արագություն ձեռք բերելու մասին:

Չնայած, թվում է, թե մշակողների կողմից հաստատված նման բեռնման կարգի պատճառներից մեկը, որտեղ երկրորդ տեղը տրվում է ֆունկցիայի ֆայլին (ինչպես. ենթադրաբարավելի թեթև տարր), պարզապես պլագինների լայն կիրառման փաստը, հաճախ զանգվածային բովանդակության ...

Ինչ-որ մեկը կբացականչի. մեկ այլ plugin ...? դա դժվար է!

Իսկ ես ասում եմ՝ դա ոչ մի արագության վրա չի ազդի... ավելի շուտ, ընդհակառակը, եթե մտածված մոտենաք կայքի ստեղծմանը։

Ավելին, ինչ-որ կոդի փոխանցման օգուտը ակնհայտ է մեկ ուրիշի մոտ, այն է՝ կայքի բեռնման արագությունը կախված չէ ակտիվ փլագինների քանակից, այլ դրանց բովանդակությունից: Ուրեմն ինչու չկրճատել ֆունկցիայի ֆայլը, որը, ինչպես նշվեց, բեռնվում է մի փոքր ուշ: և նաև ամբողջական զանգվածային կաղապարի մակարդակի PLUGIN է: Այսպիսով, որտե՞ղ է պատկանում նրա ծածկագրի մեծ մասը:

Իմ կարծիքով, (ակտիվ, աշխատանքային) կաղապարը պետք է պարունակի միայն իր կոնկրետ պարամետրերը։

էքսկուրսիա դեպի թվաբանություն...

  1. ավելի ուշ բեռնված, հարցն այն է, թե ինչու այն չտեղափոխել այն վայր, որտեղ նախ կատարվում է կոդի մշակումը, և, համապատասխանաբար, ադմինիստրատորի կողմից նշված WP հիմնական պարամետրերի ճշգրտումները կկարդան ավելի արագ և կմշակվեն կայքի համապատասխան փուլում: գործարկե՞լ
  2. կայքի գործունակության տխրահռչակ նպատակահարմարությունն ու տրամաբանական կազմակերպումը։
  3. հարմարավետություն, որն անկարևոր չէ:

Բացի այդ, ինչպես ասվեց, ֆունկցիոնալ ֆայլը նույն plug-in-ն է, նորից կհարցնեմ՝ ինչո՞ւ խցկել այն ամենը, ինչ մտնում ես դրա մեջ։ ու կայքի հետ աշխատելու ընթացքում շփոթվել վիթխարի, դժվար ընթեռնելի կոդային փաստաթղթում, որն, ի դեպ, անհավանական ու անհիմն փքված է իր բովանդակությունից։

Ավելի հեշտ և տրամաբանական է ստեղծել թեթև պլագին, կարգավորել և մոռանալ…

Մի խոսքով, ամեն մեկն ինքն է որոշում՝ լսե՞լ իր փորձը, թե՞ որոշակի ուսումնական հոդվածի հեղինակի կարծիքը։

Մինչդեռ WordPress-ի գրադարաններում սովորելը հետևում է, բայց ոչ ըստ հոդվածների… հոդվածներից կարելի է քաղել միայն այս կամ այն ​​գաղափարը…

Ինչ-որ կերպ, պարոն)

... նրանց համար, ովքեր հետաքրքրված են.

դուք կարող եք հրաշալի կերպով սովորել միջուկի բոլոր կանոնները (և, ի դեպ, միջուկի դիրեկտորիաների բեռնման կարգը)) WordPress-ի կոդերում։

... Հետևյալ հոդվածներից մեկում հենց այդպիսի թեմա-բաժակ: ... և օգտակար էջերի հղումներ:


.. բաժանորդագրվելով կայքի թարմացումներին -
... բաժանվելով տգիտությունից ..!

ինչպես ստեղծել լրացուցիչ functions.php ֆայլի պլագին

Քննարկվող plugin-ը, իհարկե, պարզ լուծում է, բայց ուսումնասիրությունը պետք է սկսել զրոյից:

Ավելին, հոդվածում նշված նպատակներին հասնելու համար ոչ մի հզոր փլագիններ պետք չեն:

Գնացեք հյուրընկալող կառավարման վահանակ (կամ FTP) և բացեք ֆայլերի կառավարիչը:

Բացեք plugins թղթապանակը և դրա մեջ ստեղծեք մեկ այլ գրացուցակ (մեր plugin ֆայլերի թղթապանակը): Բացարձակ ցանկացած անուն, լատիներեն: Ես որպես օրինակ ունեմ «թեստ» անունը։

Խնդրում ենք նկատի ունենալ, որ ադմինիստրատորի վահանակում հավելվածի անունը կլինի նույնը, ինչ գրված է տեղեկատվության վերնագրի մեջ Plugin Name: test (տես մեկնաբանությունները):

Բացեք ստեղծված թղթապանակը և դրա մեջ ստեղծեք հիմնական plugin ֆայլը.

... անունով, ասեք my-functions.php և ավելացրեք այդպիսի տողեր նրա մարմնին (և ֆայլի անունը կարող է լինել բացարձակապես ցանկացած)

Մեկնաբանություններում տողեր - տեղեկություններ հավելումների մասին, որոնք կհայտնվեն ադմինիստրատորի վահանակում (պլագինների մենյու):

Թղթապանակն ու ֆայլը ստեղծելուց անմիջապես հետո ձեր փլագինը կհայտնվի ադմինիստրատորի վահանակում։ Նայել.

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

Այսքանը!! ստեղծվել է մի պարզ plug-in և, որ ուշագրավ է, իր ձեռքերով և իր շահի համար (ինչպես ասում էր Մատրոսկին կատուն)։

Այս պահին շոուի վարագույրը ընկնում է ...
... տխուր փոշին թափվում է թեքահարթակների վրա ...

Եվ ի դեպ, օգտակար ֆիլմ «առանց փլագինների» շարքից՝ տեսեք, մտածեք, թե արդյոք տեսանյութում առաջարկվող կոդը պետք է մնա ֆունկցիոնալ ֆայլում ??

Անշուշտ, դուք բազմիցս հանդիպել եք այն փաստի հետ, որ դուք պետք է ավելացնեք որոշ կոդ ձեր WordPress կայքի համար՝ նոր գործառույթներ ավելացնելու համար: Ես չեմ խոսում Google Analytics-ի սկրիպտների մասին, որոնք դուք տեղադրում եք ձեր թեմայի վերնագրի մասում: Ոչ Ես խոսում եմ այն ​​փոքր կոդի հատվածների մասին, որոնք դուք գտել եք համացանցում ֆորումներում և անմիջապես վազել եք դրանք ավելացնել ձեր ֆայլում: functions.php.

Անկեղծ լինենք, չէ՞ որ դուք դա արել եք գոնե մեկ անգամ։ Եվ դա հասկանալի է, քանի որ գրված էր ֆորումում - ավելացրեք այս կոդը ձեր WordPress թեմայի functions.php-ին։

Ճշմարտությունն այն է, որ յուրաքանչյուր կոդ, որը գտնում եք ինտերնետում, functions.php-ին ավելացնելն է միշտ չէ, որ լավ գաղափար է... Ավելի անվտանգ լուծում կլինի այս կոդով ձեր սեփական հատուկ մինի փլագինը ստեղծելը:

Այս ձեռնարկում մենք ձեզ կասենք, թե որ դեպքերում կարող եք կոդ ավելացնել functions.php-ին, և որ դեպքում ավելի լավ է օգտագործել առանձին փլագին։ Մենք նաև ձեզ ցույց կտանք, թե ինչպես կարող եք ինքներդ ստեղծել հատուկ փլագին և ավելացնել ձեր կոդը դրան:

Ինչ է functions.php

Եթե ​​երբևէ թերթել եք ձեր WordPress կայքի ֆայլերը, կարող եք պատահաբար հանդիպել մի քանի functions.php ֆայլերի: Functions.php ֆայլը, որի մասին մենք կխոսենք այս ձեռնարկում, գտնվում է wp-contentthemesyour_themefunctions.php թղթապանակում:

Ակնհայտ է, որ սա նույն ֆայլն է, որը պահպանում է ձեր կոնկրետ թեմայի բոլոր գործառույթներն ու կարգավորումները, ներկայումս ակտիվ է... Ուշադրություն դարձրեք «ակտիվ» բառին, քանի որ սա կլինի այս դասի հիմնական ուղերձը:

Ինչու է վատ գաղափար միշտ օգտագործել functions.php

Ինձ սխալ չհասկանաք, միանգամայն նորմալ է մի քանի տողով կոդերի փոքր կտորների համար functions.php օգտագործելը: Մենք խոսում ենք այն մասին, որ անցանկալի է functions.php-ն օգտագործել որպես պահեստ բացարձակապես այն ամենի համար, ինչ ավելացնում եք կոդ։ Դա յուրաքանչյուր իրավիճակի համար միանվագ լուծում չէ:

Պատճառ թիվ 1.

Եթե ​​ձեր թեմայի համար թարմացում թողարկվի, դուք կկորցնեք այն ամենը, ինչ ավելացրել եք functions.php ֆայլում: Ես գիտեմ, թե ինչ էիր մտածում, բայց արդյոք կա՞ ճիշտ այս իրավիճակներում:

Իհարկե ունեն: Բայց կան նաև շատ մարդիկ, ովքեր գաղափար չունեն, թե ինչ է մանկական թեման: Կամ կան մարդիկ, ովքեր խնդրել են ձեզ օգնել իրենց թեմային կոդ ավելացնելու համար:

Հետեւաբար, այս պատճառն այս ցանկում է: Եթե ​​դուք կոդ եք ավելացնում functions.php-ում առանց երեխայի թեմայի օգտագործման, սա ձեր առաջին արթնացման զանգն է:

Պատճառ թիվ 2.

Նույնիսկ եթե դուք ճիշտ եք կարգավորել և օգտագործել երեխայի թեման: Ի՞նչ կլինի, եթե ցանկանում եք անցնել դիզայնի այլ թեմայի: Հուսով եմ, որ յուրաքանչյուր փոփոխության վրա, որը դուք անում եք ձեր functions.php ֆայլում, մեկնաբանություն եք ավելացրել, քանի որ առանց դրա, այլ թեմայի անցնելը չափազանց ցավալի կլիներ։ Կարծում եմ, դուք հասկացաք գաղափարը:

Պատճառ թիվ 3.

Եթե ​​դուք functions.php-ին ավելացրել եք կոդ, որը բոլորովին անսպասելիորեն կոտրում է ձեր կայքը և տեսնում եք դատարկ սպիտակ էկրան, ապա ձեզ հարկավոր է FTP հաճախորդ՝ «կոտրված» functions.php-ը վերբեռնելու, այն խմբագրելու և ետ վերբեռնելու համար կայք: Նման հաճույք է ինքն իրեն:

Երբ օգտագործել functions.php

Ներկայիս ակտիվ մանկական թեմայի համար functions.php-ի ճիշտ օգտագործումը վավեր տարբերակ է: Բայց հիշեք, ես կենտրոնացել եմ այս բառի վրա. ակտիվ"?

Եթե ​​ավելացնեք կոդի կտորներ, որոնք իմաստ ունեն միայն այս կոնկրետ թեմայի հետ աշխատելիս, ապա կարող եք ապահով կերպով օգտագործել functions.php-ը (երեխայի թեմայում): Ահա մի քանի օրինակներ, որտեղ դա կարող է տեղին լինել.

  • Մեկ այլ ոճաթերթ (.css) ավելացնելով ձեր թեմայի համար
  • Փոխեք գրառման հատվածի երկարությունը, որպեսզի կայքը ավելի լավ տեսք ունենա
  • Ընթացիկ թեմայի համար հատուկ տառատեսակների ավելացում
  • Տեղայնացման ֆայլի ավելացում՝ ընթացիկ թեման թարգմանելու համար

Այլ կերպ ասած, երբ դուք ավելացնեք կամ փոխեք որևէ կոնկրետ ընթացիկ թեմայի հետ կապված որևէ բան, ազատ զգալ օգտագործեք functions.php:

Երբ ավելի լավ է անել առանց գործառույթների.php

Functions.php-ի օգտագործումն ավելի շատ գլոբալ բաներ և գործառույթներ ավելացնելու համար, որոնք տեսականորեն կարող են օգտակար լինել ձեզ մեկ այլ թեմայի համար, վատ գաղափար է:

Ահա մի քանի օրինակ, երբ ավելի լավ է անել առանց functions.php:

  • Պատվերով վիդջեթների ստեղծում, որոնք դուք հաճախ կօգտագործեք
  • Հատուկ կարճ կոդերի ստեղծում
  • Թեմայից անկախ կոդի ավելացում (Google Analytics կոդ և այլն)

Նման դեպքերում լավագույնն է պահպանել այս կոդը՝ անկախ ձեր թեմայից։ Եվ դուք կարող եք դա անել հատուկ պլագինների միջոցով:

Դուք հիմա մտածում եք. տարակուսում եք plugin-ի ստեղծման շուրջ, երբ կարող եք խմբագրել functions.php-ը: Չափազանց դժվար է: Հավատացեք, դա այդպես չէ։ Սա արվում է շատ արագ և հեշտությամբ։

Ինչպես կարգավորել մաքսային հավելված՝ functions.php-ի փոխարեն

Ձեր ծածկագիրը պահելու համար ձեր սեփական հարմարեցված հավելվածը ստեղծելու համար ձեզ հարկավոր է.

  1. Ստեղծեք տեքստային ֆայլ ձեր կոդով և պահեք այն որպես .php ֆայլ
  2. Ստացված .php ֆայլը փաթեթավորեք .zip արխիվի մեջ
  3. Տեղադրեք այս արխիվը որպես սովորական WordPress հավելված մենյուում Փլագիններ → Ավելացնել նոր

Վերջ, ընդամենը 3 գործողություն։

Քայլ 1. Ստեղծեք .php ֆայլ ձեր կոդով

Բացեք Notepad-ը ձեր համակարգչում և տեղադրեք հետևյալ տեքստը.

Դուք, իհարկե, կարող եք օգտագործել ձեր անունը plugin-ի համար Plugin Name տողում.

Պահպանեք ֆայլը և տվեք նրան յուրահատուկ անուն, որպեսզի WordPress-ը չշփոթի ձեր փլագինը արդեն տեղադրվածների հետ: Օրինակ՝ wpcafe-custom-functions.php:

Այո, մի մոռացեք ընտրել «Բոլոր ֆայլերը» ֆայլի տեսակը և պահպանելիս ավելացնել .php ընդլայնումը.

Քայլ 2. Ստեղծեք .zip արխիվ

Չեմ կարծում, որ այստեղ որևէ բացատրություն պետք է։ Պարզապես ստեղծեք .zip արխիվ ձեր ֆայլով ցանկացած հարմար արխիվատորում:

Քայլ 3. Տեղադրեք որպես սովորական պլագին

Ամենահեշտ մասը. Պարզապես գնացեք ձեր WordPress ադմինիստրատորին Փլագիններ → Ավելացնել նորև վերբեռնեք ձեր արխիվը որպես սովորական հավելված:

Այն ակտիվացնելուց հետո դուք պետք է կարողանաք տեսնել ձեր նոր փլագինը մյուս բոլոր տեղադրված պլագինների ցանկում.

Ինչպես ավելացնել ձեր կոդը

Ձեր կոդի հատվածն ավելացնելու համար պարզապես տեղադրեք այն ձեր ստեղծած .php ֆայլում: Կամ, դուք միշտ կարող եք ստեղծել մեկ այլ առանձին plugin երկու տարբեր գործառույթների համար:

Օրինակ, այսպիսի տեսք կունենար ձեր .php ֆայլը, եթե ցանկանայիք ստեղծել «Hello World!» կարճ կոդը.

Այս մեկնաբանությունները ոչ մի կերպ չեն ազդում ձեր կոդի կատարման և plugin-ի կատարման արագության վրա։ Բայց նրանց հետ ձեզ համար ավելի հեշտ կլինի նավարկել և հիշել, թե ինչ է անում ձեր ավելացրած յուրաքանչյուր գործառույթ:

Պարզապես փաթեթավորեք ձեր մեկնաբանությունը կտրատած և աստղանիշի շարահյուսությամբ. /* ձեր մեկնաբանությունը */

Ձեր կոդի մեջ փոփոխություններ կատարելուց հետո կարող եք վերաբեռնել .php ֆայլը FTP-ի միջոցով կամ պարզապես ստեղծել նոր .zip արխիվ և վերբեռնել որպես նոր փլագին և ջնջել հինը:

Functions.php խմբագրումից խուսափելու այլ եղանակներ

Մեծ հաշվով, եթե բավականաչափ վստահ եք ձեր կարողությունների վրա և գիտեք, թե ինչպես ավելացնել կոդ functions.php-ին, ապա չպետք է դժվարություններ ունենաք նաև հատուկ պլագինների հետ: Այստեղ դժվար բան չկա։

Բայց մենք հիանալի հասկանում ենք, եթե դուք ցանկություն չունեք այս ամենի հետ ձեռքով խառնելու: Այնուամենայնիվ, սա WordPress-ն է: Հետևաբար, Code Snippets անվճար հավելվածը կարող է օգտակար լինել, ինչը հեշտացնում է ձեր լրացուցիչ ծածկագիրը կայքում ավելացնելը.

Այս փլագինով դուք կարող եք ավելացնել կոդերի տարբեր հատվածներ, տալ նրանց անուն, նկարագրություն, ակտիվացնել և անջատել կոդի այս կամ այն ​​հատվածը ընտրովի:

Մեկ այլ հետաքրքիր առանձնահատկությունն այն է, որ դուք կարող եք ներմուծել / արտահանել ձեր կոդի հատվածները կայքերի միջև:

Արդյունքներ

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

Այսպիսով, այս մեթոդը իսկապես արժանի է ուշադրության:

cms mysql (4)

Ես փորձում եմ ստեղծել հիմնական պլագինային համակարգ, որը նման է այն համակարգին, որը դուք հաճախ գտնում եք WordPress-ի նման CMS-ում: Դուք ունեք պլագինների թղթապանակ, որոնք կապված են հիմնական համակարգի գործողության հետ՝ օգտագործելով ծանուցումները զարգացումներից սկսածօգտագործելով դիզայնի օրինակ Դիտորդկամ Իրադարձություն .

Խնդիրն այն է, որ համակարգը չի կարող իմանալ ինչ իրադարձություններ plugin-ը ցանկանում է գործել, ուստի համակարգը պետք է բեռնի յուրաքանչյուր պլագին յուրաքանչյուր էջի հարցման համար՝ տեսնելու, թե արդյոք այդ plugin-ը ինչ-որ պահի իսկապես անհրաժեշտ է: Ավելորդ է ասել, որ սա շատ վատնված ռեսուրսներ է. WordPress-ի դեպքում, որը յուրաքանչյուր հարցման համար ավելացնում է մինչև մի քանի ՄԲ հիշողություն:

Կա՞ն դա անելու այլընտրանքային ուղիներ:

Օրինակ, կա՞ միջոց մեկ անգամ ամբողջը բեռնելու և այնուհետև քեշավորելու արդյունքները, որպեսզի ձեր համակարգը իմանա, ինչպես ծույլ բեռնվող պլագինները: Այլ կերպ ասած, համակարգը բեռնում է կազմաձևման ֆայլ, որը թվարկում է բոլոր այն իրադարձությունները, որոնք plugin-ը ցանկանում է կապել և այնուհետև դրանք պահել APC-ում կամ որևէ այլ բան ապագա հարցումների համար:

Եթե ​​դա նույնպես լավ չի աշխատում, ապա միգուցե կա ֆայլի հատուկ կառուցվածք, որը կարող է օգտագործվել խելամիտ կռահումներ անելու համար, թե երբ որոշակի պլագիններ անհրաժեշտ չեն պահանջը կատարելու համար:

Պատասխանները

Ես ունեմ փլագինների կառավարման գործիք, բայց ես այն օգտագործում եմ միայն ընթացակարգային պլագինների հետ և բոլոր ներառվածներով այն սովորաբար անմիջապես բեռնվում է: Բայց իրադարձությունների վրա հիմնված API-ի և ծույլ բեռնման համար ես կարող էի պատկերացնել, որ օգտագործում եմ մակերեսային փաթաթաներ՝ պլագինները կառավարելու և իրական ընդլայնումների համար դիմելու ավտոմատ բեռնման:

/ ** * api՝ ինչ էլ լինի * տարբերակ՝ 0.1 * վերնագիր՝ plugin օրինակ * նկարագրություն՝ ... * կազմաձև: * կախված է այլ պլագին * /$ plugins ["title_event"] = "TitleEventClass"; $ plugins ["երկրորդային"] = զանգված ("Class2", "callback"); ?>

Այս օրինակի համար ես ենթադրում եմ, որ plugin API-ն պարզ ցուցակ է: Այս օրինակ սցենարի feature-plugin-123.php-ը ոչինչ չի անում, քան այն ավելացնում է զանգվածին բեռնվածության ժամանակ: Այս կերպ, նույնիսկ եթե դուք ունեք տասնյակ գործառույթների պլագիններ, դա միայն կհանգեցնի յուրաքանչյուրի համար լրացուցիչ include_once:

Բայց հիմնական հավելվածի / կամ plugin API-ն կարող է փոխարենը պարզապես օրինակել նշված դասերը (կամ նոր $ eventcb; raw-call_user_func_array-ի կամ call_user_func_array-ի համար՝ հետադարձ կապի համար): Իր հերթին, սա կբեռնի իրական առաջադրանքը ավտոբեռնիչի վրա: Այսպիսով, դուք ունեք երկակի համակարգ, որտեղ մի մասը կառավարում է ցուցակը, մյուսը իրական կոդը է:

Այսպիսով, ես դեռ պատկերացնում եմ մի պարզ config.php, որը պարզապես թվարկում է հավելումները և կարգավորումները, ինչպիսիք են.

«user / wrapper-for-htmlpurifier.php»); $ cfg [«գեղեցիկ»] = 1;

Կրկին հաշվի առնելով, որ դրանք պարզապես տվյալների փաթաթիչներ / սցենարներ են, կառավարելիության համար հավելվածի նկարագրությամբ: Կարող եք նաև օգտագործել իրական register_even () API-ն և յուրաքանչյուրում սահմանել լրացուցիչ փաթաթող ֆունկցիա: Բայց թույն անունների ցանկը, թվում է, ամենահեշտ տարբերակն է:

Վերոնշյալ կառավարման գործիքը ժանգոտ և տգեղ տեսք ունի՝ http://milki.include-once.org/genericplugins/
Բայց այն չի օգտագործվում, եթե այն ամենը, ինչ ցանկանում եք, ցուցակն է (sql աղյուսակ) և կարգավորումների կառավարումը: Այս գլխավճարը նախատեսված է միայն plugin-ի մետատվյալները գեղեցիկ տպելու և ընթեռնելի config.php-ը պահելու համար:

Վերջապես.

spl_autoload () to include_path և simple case event-> classname, յուրաքանչյուրը մեկ wrapper script, պարզապես ներառեք բոլորը միանգամից:

Ես կպահեի plugin դասի անունը նրա ստորագրված իրադարձությունների հետ միասին կազմաձևման ֆայլում և այնուհետև կպահեի վերլուծված կազմաձևման ֆայլը, օրինակ, APC: Այնուհետև, երբ իրադարձությունը սկսվում է, համակարգը կարող է ծույլ բեռնել համապատասխան պլագինների դասերը՝ ըստ անհրաժեշտության:

Wordpress-ը և այլ CMS համակարգերը շատ վատ օրինակներ են:

Մենք պետք է հասկանանք, որ մոդուլյար գրեթե միշտ նշանակում է, որ այն ավելի ծանր է։

Լավագույն սխեման, որի հետ ես երբևէ աշխատել եմ այս իրավիճակը լուծելու համար, դասի վրա հիմնված պլագինն է, խիստ անվանման կոնվենցիայով, օգտագործելով autoloader:

Այսպիսով, նախքան plugin-ը օգտագործելը, դուք պետք է օրինականացնեք կամ օգտագործեք ստատիկ գործառույթներ:

Դուք նույնիսկ կարող եք զանգահարել plugin-ին.

օրինակ:

"/plugins/($parts)/($parts).php"); ընդմիջում; ) // ...)?>

Ինչ վերաբերում է իրադարձություններին.

Դուք պետք է գրանցեք այս իրադարձությունը ստատիկ կերպով՝ դինամիկ փոփոխություններից խուսափելու համար:

Տվյալների բազան դրա համար ճիշտ տեղը կլինի: Դուք կարող եք ունենալ իրադարձությունների աղյուսակներ և տեղադրել () և տեղահանել () մեթոդները plugin դասում՝ հատուկ իրադարձություններ ավելացնելու կամ այլ իրադարձություններին կապելու մեթոդներ: Սա տվյալների բազայի հարցումներից մեկն է, և եթե ցանկանում եք դրանից ավելին ստանալ, ավելացրեք այն memcached կամ հարթ ini ֆայլում:

Ինձ մոտ լավ է աշխատում: Այս կերպ ես կարողացա ստանալ ծանր համակարգ, որը սպառում էր 8 ՄԲ յուրաքանչյուր հարցումից մինչև 1 ՄԲ, ճիշտ նույն հնարավորությունների ցանկով, առանց նախնական քեշավորման: Այժմ մենք կարող ենք ավելի շատ հնարավորություններ ավելացնել և համակարգը «մաքուր» պահել

հուսով եմ, որ սա օգնում է

Լավագույն միջոցը նրանց հետ կոդավորում սկսելն է: Դիզայնի նախշերը հիանալի հասկացություն են, որը դժվար է կիրառել միայն դրանց մասին կարդալով: Վերցրեք մի քանի օրինակ իրականացումներ, որոնք դուք գտնում եք ինտերնետում և կառուցում դրանց շուրջ:

Հիանալի ռեսուրս է Տվյալների և օբյեկտների էջը: Նրանք անցնում են կաղապարների միջով և ձեզ տալիս են ինչպես հայեցակարգային, այնպես էլ իրական օրինակներ: Նրանց տեղեկատու նյութը նույնպես հիանալի է:

Սա ձեր WordPress թեմայի հիմնական ֆայլն է: Գտնվում է / wp-content / themes / (այստեղ ձեր թեմայի անունը) /functions.php:
Այն սահմանում է թեմայի կարևոր հատկությունները, հարմարեցնում է կեռիկները, տեսքը և ֆունկցիոնալությունը, ինչպես նաև ավելացնում է ձեզ անհրաժեշտ որոշ գործառույթներ: Այս ֆայլը բեռնվում է ամեն անգամ, երբ բացում եք WordPress-ի որևէ էջ, ուստի այն կարող է օգտագործվել կայքի ցանկացած տարր փոփոխելու համար: Այս առումով, շատ խորհուրդներ a la » ինչպես փոխել ինչ-որ բան WordPress-ում առանց հավելումների «Հաճախ մտահոգում են functions.php-ում փոփոխություններ կատարել՝ այս ֆունկցիոնալության համար առանձին պլագին ստեղծելու կամ պատրաստի լուծում օգտագործելու փոխարեն: Սա հաճախ հանգեցնում է այս ֆայլի տեղեկատվական ծանրաբեռնվածության՝ դժվարացնելով ծածկագիրը վերլուծելը և ուղղումները ավելի դժվարացնելով: Բայց սա ամենավտանգավորը չէ։ Ամենավտանգավորը դա է ակտիվ թեման փոխելիս կայքի անհրաժեշտ ֆունկցիոնալության մի մասը կամ ամբողջը կկորչի.

Ինչպես է functions.php-ը տարբերվում plugin-ից

Ոչինչ։ Իր հիմքում, functions.php-ը մի տեսակ գլոբալ չփոխարկվող հավելված է, որը կապված է ընթացիկ թեմայի հետ: Դուք կարող եք տեսնել, թե ինչպես է այն միանում WordPress-ում wp-settings.php-ում: Ինչպես երևում է սկզբնաղբյուրից, այն բեռնվում է բոլոր պլագիններից հետո, սակայն դա որևէ թերություն կամ առավելություն չի տալիս, բացառությամբ, հնարավոր է, միացված պլագիններում ինչ-որ բան անտեսելու հնարավորությունից: Սա նույնպես չի ազդի կոդի կատարման արագության վրա։ Ազդեցվում է միայն plugins-ի և functions.php-ի բովանդակությունը: Հետևաբար, զգույշ եղեք ձեր թեմայի համար ակտիվ փլագիններ ընտրելիս և հրաժարվեք ավելորդ, ձեզ համար քիչ օգուտներից, այնուհետև կարող եք թեթևացնել ձեր կայքը և արագացնել դրա աշխատանքը:

Երբ օգտագործել functions.php

Առաջնորդվեք հետևյալ կանոնով. եթե ֆունկցիոնալությունն ուղղակիորեն կապված է ընթացիկ թեմայի հետ, բայց ոչ կայքի աշխատանքին, գրեք այն functions.php-ում։

Օրինակ, դա կարող է լինել

  • Մանրապատկերների կարգավորում
  • Կողային տողի չափերի կարգավորում
  • Վիդջեթների համար տեղերի կարգավորում
  • Նավիգացիոն մենյուի տակ գտնվող վայրերի հայտարարություն
  • Թեմայի կարգավորումներ
  • Ձեր թեմայի լրացուցիչ առանձնահատկությունները

Երբ խուսափել functions.php-ից օգտվելուց

Եթե ​​ֆունկցիոնալությունը պետք է աշխատի նույնիսկ ակտիվ թեման փոխելիս, դուք պետք է հոգ տանեք այն առանձին plugin-ի մեջ դնելու մասին:
Դրանք ներառում են.

  • Հաճախումների հաշվիչների սահմանում (Google Analytics, Yandex.Metrika, Liveinternet)
  • Ադմինիստրատորի վահանակի լրացուցիչ գործառույթների կարգավորում (օրինակ)
  • Կազմաձևում է աղբյուրի կոդը ()
  • Կարճ կոդերի սահմանում
  • Գրանցում

Ցուցակները թերի են, դուք ինքներդ կարող եք սահմանել դրանց բովանդակությունը։

Որտեղ կարող եմ ավելացնել այս կոդը, եթե ոչ functions.php-ում: Դրանց համար կարող եք գրել հատուկ պլագիններ, այնուամենայնիվ, կա ավելի հետաքրքիր և պարզ միջոց։

mu-plugins այլընտրանք functions.php

WordPress MU-ից (Multi-User) WordPress-ի ժամանակակից տարբերակներում մեզ է հասել մի հետաքրքիր գործառույթ, որը կոչվում է MU պլագիններ... Դրա էությունը հետեւյալն էր. WordPress MU-ի ադմինիստրատորը երբեմն կարիք ուներ պլագիններ սահմանելու կայքերի ողջ ցանցի համար: Դրան հնարավոր չէր հասնել սովորական ֆունկցիոնալությամբ, ուստի ներկայացվեց հատուկ բաժին. / wp-content / mu-plugins /, որտեղ դրանք սահմանվեցին: Մեկ այլ հետաքրքիր բան այն է, որ այս գրացուցակի պլագին ֆայլերը բեռնվում են բոլոր մյուսներից առաջ, ինչը հնարավորություն է տալիս նախապես սահմանել որոշ հաստատուններ կամ կարգավորումներ:
Ավելի ուշ WPMU-ն չեղարկվեց, դրա կոդը ինտեգրվեց հիմնական բլոգերի հետ, և այժմ ցանկացած WordPress կարող է օգտագործել MU-պլագինների ֆունկցիոնալությունը, որն այժմ նշանակում է. Պետք է օգտագործել, այսինքն՝ պարտադիր օգտագործման համար։

Ինչպես օգտագործել mu-plugins

Նախ, դուք պետք է ստեղծեք հատուկ բաժին / wp-content / mu-plugins /
Մենք դրա մեջ տեղադրում ենք անհրաժեշտ plugin ֆայլերը: Ի տարբերություն սովորական պլագինների, հատուկ շարահյուսությանը հավատարիմ մնալու կարիք չկա, և ֆունկցիոնալությունը կարող է ուղղակիորեն հայտարարվել

Այստեղ, օրինակ, ստեղծվել է հաճախումների հաշվիչների ծածկագրով ֆայլ։
Ներսում այս ֆայլն այսպիսի տեսք ունի

// ... Այս տողի փոխարեն տեղադրեք հաշվիչի կոդը ...

Ադմինիստրատորի տարածքում այն ​​նման կլինի Անհրաժեշտ է

8 պատասխան

Դուք կարող եք օգտագործել Observer օրինակը: Դա անելու պարզ ֆունկցիոնալ միջոց.

Արդյունք:

Սա իմ CRAZY հավելվածն է 4 + 5 = 9 4 * 5 = 20

Նշումներ:

Այս օրինակի սկզբնաղբյուրում դուք պետք է հայտարարեք ձեր բոլոր պլագինները նախքան իրական աղբյուրի կոդը, որը ցանկանում եք թարմացնել: Ես ներառել եմ մի օրինակ, թե ինչպես կարգավորել մեկ կամ մի քանի արժեքներ, որոնք փոխանցվել են plugin-ին: Սրա ամենադժվար մասը փաստացի փաստաթղթեր գրելն է, որը թվարկում է, թե ինչ փաստարկներ են փոխանցվում յուրաքանչյուր կարթին:

Սա PHP-ում plugin համակարգ ստեղծելու ընդամենը մեկ եղանակ է: Կան ավելի լավ այլընտրանքներ, ես առաջարկում եմ ձեզ ստուգել WordPress-ի փաստաթղթերը լրացուցիչ տեղեկությունների համար:

Ներողություն, թվում է, թե ընդգծումները փոխարինվում են HTML Markdown-ով: Ես կարող եմ վերահրապարակել այս կոդը, երբ այս սխալը շտկվի:

Խմբագրել. Ոչ մի բան, այն հայտնվում է միայն խմբագրելիս

Այսպիսով, ենթադրենք, որ ձեզ պետք չէ Observer օրինաչափությունը, քանի որ այն պահանջում է, որ դուք փոխեք դասի մեթոդները լսելու առաջադրանքը կատարելու համար, և դուք ընդհանուր բան եք ուզում: Եվ ենթադրենք, որ դուք չեք ցանկանում օգտագործել ընդլայնված ժառանգությունը, քանի որ դուք արդեն կարող եք ժառանգել ձեր դասը մեկ այլ դասից: Հիանալի չի՞ լինի ունենալ որևէ դասի առանց ջանք գործադրելու ընդհանուր միջոց: Ահա թե ինչպես.

_Class = get_class (& $ RefObject); $ this -> _ RefObject = $ RefObject; ) հանրային ֆունկցիա __set ($ sProperty, $ mixed) ($ sPlugin = $ this -> _ Դաս. "_". $ sProperty. "_setEvent"; if (is_callable ($ sPlugin)) ($ mixed = call_user_func_array ($ sPlugin, $ mixed);) $ this -> _ RefObject -> $ sProperty = $ mixed;) հանրային ֆունկցիա __get ($ sProperty) ($ asItems = (զանգված) $ this -> _ RefObject; $ mixed = $ asItems [$ sProperty] $ sPlugin = $ this -> _ Դաս. "_". $ sProperty. "_getEvent"; if (is_callable ($ sPlugin)) ($ mixed = call_user_func_array ($ sPlugin, $ mixed);) վերադարձնել $ mixed;) public ֆունկցիա __call ($ sMethod, $ mixed) ($ sPlugin = $ this -> _ Դաս. "_". $ sMethod. "_beforeEvent"; if (is_callable ($ sPlugin)) ($ mixed = call_user_func_array ($ sPlugin, $ mixed );) if ($ mixed! = "BLOCK_EVENT") (call_user_func_array (զանգված (& $ this -> _ RefObject, $ sMethod), $ mixed); $ sPlugin = $ this -> _ Դաս. "_". $ sMethod «_afterEvent»; if ( is_callable ($ sPlugin)) (call_user_func_array ($ sPlugin, $ mixed);)))) // վերջի դասի Plugin class Pluggable extends Plugin () // end class Pl uggable //////////////////// // ՄԱՍ 2 ////////////////// դասի Dog (հանրային $ անվանումը = ""; հանրային ֆունկցիայի հաչոց (& $ sHow) (echo «$ sHow
\ n ";) հանրային ֆունկցիա sayName () (echo"
\ nԻմ անունն է. $ this-> Name:
\ n ";)) // ավարտական ​​դաս Dog $ Dog = նոր շուն (); ////////////////// // ՄԱՍ 3 /////// // /////////// $ PDog = նոր Pluggable ($ Dog); ֆունկցիա Dog_bark_beforeEvent (& $ խառը) ($ mixed = «Woof»; // Վերացնել «meow» ասելը «Woof» -ով // $ mixed = "BLOCK_EVENT"; // եթե ցանկանում եք արգելափակել իրադարձությունը, վերադարձնում է $ mixed;) ֆունկցիա Dog_bark_afterEvent (& $ mixed) (echo $ mixed; // show the override) ֆունկցիա Dog_Name_setEvent (& $ mixed) ($ mixed = " Coco"; // փոխարինել «Fido»-ն «Coco»-ով վերադարձնել $ խառը;) Dog_Name_getEvent (& $ mixed) ($ mixed = «Տարբեր»; // փոխարինել «Coco»-ն «Տարբեր» հետ վերադարձնել $ mixed;) // ///////////////// // ՄԱՍ 4 ///////////////// $ PDog-> Անուն = "Fido $ PDog-> Bark («meow»); $ PDog-> SayName (); echo «Իմ նոր անունն է.»: $ PDog-> Անուն;

Առաջին մասը այն է, ինչ դուք կարող եք ներառել պահանջի_once () զանգով ձեր PHP սցենարի վերևում: Այն բեռնում է դասերը, որպեսզի ինչ-որ բան խցանել:

2-րդ մասում, որտեղ մենք բեռնում ենք դասը: Նշում. Ես կարիք չունեի որևէ հատուկ բան անելու այն դասի համար, որը զգալիորեն տարբերվում է Observer-ի օրինակից:

3-րդ մասում, որտեղ մենք կփոխենք մեր դասը «pluggable»-ի (այսինքն՝ պահպանում ենք փլագիններ, որոնք թույլ են տալիս մեզ վերացնել դասի մեթոդներն ու հատկությունները): Այսպիսով, օրինակ, եթե դուք ունեք վեբ հավելված, կարող եք ունենալ պլագինների ռեեստր և կարող եք ակտիվացնել փլագինները այստեղ: Նկատի ունեցեք նաև Dog_bark_beforeEvent () ֆունկցիան։ Եթե ​​վերադարձի քաղվածքից առաջ սահմանեմ $ mixed = «BLOCK_EVENT», այն կարգելափակի շան հաչելը և նաև կարգելափակի Dog_bark_afterEvent, քանի որ իրադարձություն չի լինի:

4-րդ մասում դա սովորական opcode-ն է, բայց նշեք, որ այն, ինչ դուք կարող եք մտածել, այսպես չի աշխատի: Օրինակ, շունը նրան արտասանում է ոչ թե «Ֆիդո», այլ «Կոկո» անունով։ Շունը ոչ թե մյաու է ասում, այլ՝ վուֆ: Իսկ երբ հետո ցանկանաք նայել շան անունը, կտեսնեք, որ դա «Տարբեր» է, այլ ոչ թե «Կոկո»։ Այս բոլոր անտեսումները ներկայացվել են 3-րդ մասում:

Այսպիսով, ինչպես է այն աշխատում: Դե, եկեք բացառենք eval-ը () (որը բոլորն ասում են «չար») և բացառենք, որ դա Observer օրինաչափություն չէ: Այսպիսով, այն աշխատում է թաքնված դատարկ դասի հետ, որը կոչվում է Pluggable, որը չի պարունակում Dog դասի կողմից օգտագործվող մեթոդներն ու հատկությունները: Այսպիսով, երբ դա տեղի ունենա, մեզ համար կկիրառվեն կախարդական մեթոդներ: Հետևաբար, 3-րդ և 4-րդ մասերում մենք կապում ենք Pluggable դասից ստացված օբյեկտի և ոչ թե բուն Dog դասի հետ: Փոխարենը, մենք թույլ ենք տալիս Plugin դասին «դիպչել» Dog օբյեկտին մեզ համար: (Եթե սա ինչ-որ դիզայն է, որի մասին ես չգիտեմ, խնդրում եմ տեղեկացնել ինձ:)

Կեռիկի և լսողի մեթոդը ամենատարածվածն է, բայց կան այլ բաներ, որոնք դուք կարող եք անել: Կախված ձեր հայտի չափից և ով է ուզում տեսնել կոդը (սա կլինի FOSS script, կամ ցանկացած այլ տան մեջ) մեծապես կազդի այն բանի վրա, թե ինչպես եք ցանկանում լուծել պլագինները:

kdeloach-ն ունի գեղեցիկ օրինակ, բայց դրա իրականացումը և hook ֆունկցիան մի փոքր անապահով են: Ես կխնդրեի ձեզ լրացուցիչ տեղեկություններ ստանալ ձեր էլ.փոստի համար php հավելվածի բնույթի և ինչպես եք տեսնում պլագինները:

1 դեպի kdeloach ինձանից.

Ահա այն մոտեցումը, որը ես օգտագործել եմ, այն փորձում է պատճենել Qt ազդանշանի / բնիկի մեխանիզմից, մի տեսակ Observer օրինաչափություն: Օբյեկտները կարող են ազդանշաններ արձակել: Յուրաքանչյուր ազդանշան համակարգում ունի նույնացուցիչ. այն բաղկացած է ուղարկող օբյեկտի id +-ից: Յուրաքանչյուր ազդանշան կարող է կապված լինել ստացողների հետ, ինչը պարզապես «կանչելի» է, դուք օգտագործում եք ավտոբուսի դաս՝ ազդանշաններ ուղարկելու համար, ովքեր հետաքրքրված են դրանք ստանալու համար: ինչ-որ բան է պատահում, դուք ազդանշան եք ուղարկում: Ստորև բերված է օրինակ և իրականացման օրինակ

մուտք (); ?>

Ես գտնում եմ, որ ամենահեշտ ճանապարհը Ջեֆֆի խորհուրդներին հետևելն ու գոյություն ունեցող ծածկագիրը նայելն է: Փորձեք դիտել Wordpress-ը, Drupal-ը, Joomla-ն և այլ հայտնի PHP-CMS-ները՝ տեսնելու, թե ինչպես են նրանց API-ները նայում և զգում: Այսպիսով, դուք կարող եք նույնիսկ գաղափարներ ստանալ, որոնց մասին նախկինում չէիք մտածել՝ իրերը մի փոքր ավելի հաստ դարձնելու համար:

Ավելի անմիջական պատասխանը կլինի ընդհանուր ֆայլեր գրելը, որոնք նրանք կներառեն ներառող ֆայլում՝ ապահովելու օգտագործելիությունը: Սա դասակարգվելու է և ՉԻ տրամադրվելու մեկ «hooks.php» ՄԱՍՍԻՎ ֆայլում: Զգույշ եղեք, որովհետև ինչն ավարտվում է նրանով, որ նրանց մեջ ներառված ֆայլերը, ի վերջո, ավելի ու ավելի շատ կախվածություններ և ֆունկցիոնալություն ունեն: Փորձեք սահմանափակել API-ի կախվածությունը: I.E ավելի քիչ ֆայլեր ներառելու համար:

Կա մի կոկիկ նախագիծ, որը կոչվում է