Mga Larawan ng Lazy Load - Mga plugin ng Lazy Load para sa WordPress. Pinakamahusay na Paraan upang Pahintulutan ang Mga Plugin para sa PHP Application Sluggish php plugin

  • 20.06.2020

Ang file ng pagpapaandar ay isang nakakaaliw na katulong sa pagpapalawak ng pag-andar ng site! lalo na kung ginamit para sa inilaan nitong hangarin - gayunpaman, maraming mga may-ari ng blog / site ang kahanga-hanga sa paggawa ng mga function.php isang hodgepodge.

Sa anumang negosyo, may kakayahang magamit at mga paghihigpit (mga paghihigpit, madalas na lohikal), at samakatuwid ang ilang maipapatupad na code na idinisenyo upang ayusin ang mga parameter ng WP core (hindi mga tema), magiging mas tama na lumipat sa labas ng template ...

Kapag ang pag-uusap ay tungkol sa paggawa ng makabago ang pag-andar ng site, sa linya ng mga artikulo na "walang mga plugin ..." ipinapayo sa lahat na itulak ang lahat ng mga bloke ng code sa maalamat na mga function.php. Hindi ito tama!

Mas lohikal na ilipat ang lahat ng pulos mga teknikal na extension (hindi direktang nauugnay sa istilo ng template) sa isang plugin na inayos para sa kanilang pagpaparehistro.

Lumikha tayo nito! at pag-uusapan din ang tungkol sa mga kalamangan at kahinaan (na kung saan mayroong mas kaunti) ...


Mga seksyon ng artikulo:

kung paano lumikha ng iyong plugin

mula sa teksto sa ibaba, matututunan namin kung paano lumikha ng iyong sariling plugin gamit ang iyong sariling mga kamay: mauunawaan namin ang lahat ng mga detalye, mga nuances. Malalaman natin kung ano ang mga kalamangan at kahinaan (mayroong mas kaunting kahinaan !! at sa halip, ang mga ito ay hindi mabuti, ngunit isa o iba pang kakayahang magamit para sa bawat tagapangasiwa)

ano ang pagkakaiba sa pagitan ng mga function.php file at ang plugin

Bakit dapat ilipat ang isang ilang code na may kaugnayan sa direktang pag-andar ng site sa isang hiwalay na plugin?

Ang file ng pag-andar mismo, ang layunin at pagkakapare-pareho nito ay hindi naiiba mula sa isang plugin (simpleng isang plugin sa isang tema))! - ang pangunahing gawain nito ay upang pagyamanin ang isang tukoy (aktibo) na template na may kapaki-pakinabang na pag-andar.

Halimbawa, ang "nabigasyon", kung saan, lohikal, ang menu ng pindutan ay naka-istilo ng CSS alinsunod sa istilo ng aktibong tema - marahil ay mas tama na iwanan ito sa ugat ng template.

Ano ang pakinabang - upang hatiin ang file ng pag-andar sa magkakahiwalay na mga file, o isang hiwalay na plugin?

Halimbawa, ang pinaka-karaniwang - nagpasya kang baguhin ang template!? ... bilang isang resulta, mawawala ang lahat ng mga pagpapaunlad na nagagamit, dahil ang lahat ng kapaki-pakinabang na code ay matatagpuan sa file ng pag-andar (minsan kong nakita ang isang laki ng file na 750KILO)

Siyempre, maaari mong ilipat ang dokumentasyon ng mga pagpapaandar sa isang bagong paksa, ngunit higit sa lahat, nang walang mga pag-edit na tumatagal ng maraming kapaki-pakinabang na oras, hindi mo ito magagawa: isang unggoy at trabaho)

At pagkatapos:

pagkakasunud-sunod ng paglo-load ng mga file ng site

Sa madaling sabi: ang pagkakasunud-sunod ng paglo-load ng mga pangunahing file ng site sa aming halimbawa ay ang mga sumusunod - ang mga aktibong plugin ng site (mula sa folder ng mga plugin) at ang kanilang nilalaman ay nai-load nang kaunti mas maaga, at pagkatapos lamang ang mga function.php file na may nilalaman ay naproseso Ang lahat ay nasa milliseconds, at mahirap sulit na pag-usapan ang seryoso tungkol sa pagkakaroon ng bilis ng pahina mismo.

Bagaman, tila ang isa sa mga dahilan para sa naturang isang pagkarga ng order na itinatag ng mga developer, kung saan ang pangalawang lugar ay ibinibigay sa file ng pag-andar (tulad ng siguro mas magaan na elemento), ang katotohanan lamang ng laganap na paggamit ng mga plugin, madalas na napakalaking nilalaman ...

May magsisigaw: ibang plugin ...? mahirap!

At sinasabi ko, hindi ito makakaapekto sa anumang bilis ... sa halip - sa kabaligtaran, kung lalapit ka sa paglikha ng isang site nang may pag-iisip.

Bukod dito, ang pakinabang ng paglilipat ng ilang code ay halata sa isa pa, lalo, ang bilis ng pag-load ng isang site ay hindi nakasalalay sa bilang ng mga aktibong plugin, ngunit sa kanilang nilalaman! Kaya't bakit hindi pag-urongin ang file ng pag-andar, na, tulad ng nabanggit, ay nai-load nang kaunti sa paglaon ..? at isa ring ganap na napakalaking template ng antas ng template! Kaya saan nabibilang ang karamihan sa kanyang code?

Sa palagay ko, ang template na (aktibo, gumagana) ay dapat maglaman lamang ng mga tukoy na parameter.

iskursiyon sa aritmetika ...

  1. na-load sa paglaon, ang tanong ay, bakit hindi ilipat ito sa lugar kung saan isinagawa ang pagproseso ng code muna, at, nang naaayon, ang mga pagsasaayos sa mga pangunahing parameter ng WP na tinukoy ng admin ay mababasa nang mas mabilis at maproseso sa kaukulang yugto ng site ilunsad?
  2. ang kilalang kabutihan at lohikal na organisasyon ng pagpapaandar ng site.
  3. kaginhawaan, na kung saan ay hindi mahalaga!

Bilang karagdagan, tulad ng sinabi, ang file ng pag-andar ay pareho ng plug-in - muli ay tatanungin ko, bakit ko isinasama ang lahat ng napasok mo dito? at sa proseso ng pagtatrabaho sa site ay nalilito sa isang malaking, mahirap basahin na dokumento ng code, na, sa pamamagitan ng paraan, ay hindi kapani-paniwala at hindi makatarungang namamaga ng nilalaman nito.

Mas madali at mas lohikal na lumikha ng isang magaan na plugin, i-configure at kalimutan ...

Sa isang salita, ang bawat isa ay nagpasya para sa kanyang sarili: kung makinig sa kanyang sariling karanasan, o sa opinyon ng may-akda ng isang tiyak na artikulong pang-edukasyon.

Sapagkat ang pag-aaral ay sumusunod sa mga aklatan ng WordPress, ngunit hindi ayon sa mga artikulo ... mula sa mga artikulo posible na mangalap ng isang ideya lamang o iba pa ...

Kahit papaano, ginoo)

... para sa mga interesado:

maaari mong malaman ang lahat ng mga patakaran ng kernel (at, sa pamamagitan ng paraan, ang pagkakasunud-sunod ng paglo-load ng mga direktoryo ng kernel)) sa isang mahusay na paraan sa mga code ng WordPress.

... sa isa sa mga sumusunod na artikulo, tulad ng isang paksa-beaker! ... at mga link sa mga kapaki-pakinabang na pahina.


! .. pag-subscribe sa mga update sa site -
... paghihiwalay sa kamangmangan ..!

kung paano lumikha ng isang plugin ng karagdagang mga function.php file

Ang pinag-uusapan na plugin ay, siyempre, isang simpleng solusyon, ngunit ang pag-aaral ay dapat magsimula mula sa simula!

Bukod dito, upang makamit ang mga layunin na kinuha sa artikulo, walang mga malakas na plugin ang kinakailangan!

Pumunta sa host control panel (o FTP) at buksan ang file manager.

Buksan ang folder ng mga plugin at lumikha ng isa pang direktoryo dito (ang folder para sa aming mga file ng plugin). Ganap na anumang pangalan, sa Latin. Mayroon akong pangalang "pagsubok" bilang isang halimbawa.

Mangyaring tandaan na ang pangalan ng plugin sa admin panel ay ang isang nakasulat sa header ng impormasyon Pangalan ng Plugin: pagsubok (tingnan ang mga komento).

Buksan ang nilikha na folder at lumikha ng pangunahing file ng plugin dito:

... na may isang pangalan, sabihin ang my-functions.php at idagdag ang mga naturang linya sa katawan nito (at ang pangalan ng file ay maaaring maging ganap na anuman)

Mga linya sa mga komento - impormasyon tungkol sa plugin na lilitaw sa panel ng admin (menu ng mga plugin).

Kaagad pagkatapos likhain ang folder at file, lilitaw ang iyong plugin sa admin panel. Tingnan mo.

Bilang isang dating, maaari mo itong buhayin nang ilang sandali - ngunit walang nangyayari, ang plugin ay nananatili pa rin.

Yun lang !! Ang isang simpleng plug-in ay nilikha at, kung saan kapansin-pansin, gamit ang kanyang sariling mga kamay at para sa kanyang sariling pakinabang (tulad ng sinasabi ng pusa na Matroskin).

Sa ito, ang kurtina ng palabas ay bumagsak ...
... malungkot na alikabok ay nahuhulog sa mga rampa ...

At sa pamamagitan ng paraan, isang kapaki-pakinabang na pelikula mula sa serye na "walang mga plugin" - tingnan, isipin, sulit bang iwan ang code na iminungkahi sa video sa file ng pag-andar ??

Tiyak, paulit-ulit mong napagtanto ang katotohanan na kailangan mong magdagdag ng ilang piraso ng code para sa iyong WordPress site upang magdagdag ng bagong pagpapaandar. Hindi ko pinag-uusapan ang mga script ng Google analytics na iyong inilagay sa header na bahagi ng iyong tema ngayon. Hindi. Pinag-uusapan ko ang tungkol sa mga maliit na snippet ng code na nakita mo sa mga forum sa Internet at agad na tumakbo upang idagdag ang mga ito sa iyong file pagpapaandar.php.

Tapat tayo, nagawa mo ito kahit isang beses lang di ba? At ito ay naiintindihan, dahil nakasulat ito sa forum - idagdag ang code na ito sa mga function.php ng ​​iyong tema sa WordPress.

Ang totoo, pagdaragdag ng bawat code na mahahanap mo sa internet sa mga function.php ay hindi palaging isang magandang ideya... Ang isang mas ligtas na solusyon ay ang paglikha ng iyong sariling pasadyang mini plugin gamit ang code na ito.

Sa tutorial na ito, sasabihin namin sa iyo kung aling mga kaso maaari kang magdagdag ng code sa functions.php, at kung saan mas mahusay na gumamit ng isang hiwalay na plugin. Ipapakita din namin sa iyo kung paano ka makakalikha ng isang pasadyang plugin at idagdag ang iyong code dito.

Ano ang pagpapaandar.php

Kung nag-browse ka na sa pamamagitan ng iyong mga file ng site ng WordPress, maaaring nadapa ka sa maraming mga function.php file. Ang mga function.php file na pag-uusapan natin sa tutorial na ito ay matatagpuan sa folder: wp-contentthemesyour_themefunctions.php.

Malinaw na, ito ay ang parehong file na nag-iimbak ng lahat ng mga pag-andar at setting ng iyong partikular na tema, kasalukuyang aktibo... Bigyang pansin ang salitang "aktibo", sapagkat ito ang magiging pangunahing mensahe ng araling ito.

Bakit masamang ideya na laging gumamit ng mga function.php

Huwag kang magkamali, perpektong normal na gumamit ng mga function.php para sa maliliit na piraso ng code sa isang linya. Pinag-uusapan natin ang katotohanan na hindi kanais-nais na gumamit ng mga function.php bilang isang lalagyan para sa ganap na lahat ng bagay na idinagdag mo ang code. Ito ay hindi isang isang sukat na akma sa lahat ng solusyon para sa bawat sitwasyon.

Dahilan # 1.

Kung mayroong isang pag-update para sa iyong tema, mawawala sa iyo ang lahat ng naidagdag mo sa file na functions.php. Alam ko kung ano ang iniisip mo lang - ngunit may para lang ba sa mga sitwasyong ito?

Syempre meron. Ngunit maraming mga tao rin na walang ideya kung ano ang isang tema ng bata. O may mga tao na humiling sa iyo na makatulong na magdagdag ng isang piraso ng code sa kanilang tema.

Samakatuwid, ang dahilang ito ay nasa listahang ito. Kung nagdagdag ka ng code sa functions.php nang hindi gumagamit ng isang tema ng bata, ito ang iyong unang panggising na tawag.

Dahilan # 2.

Kahit na na-configure mo at ginamit nang tama ang tema ng bata. Ano ang mangyayari kung nais mong lumipat sa ibang tema ng disenyo? Inaasahan kong nagdagdag ka ng isang komento sa bawat pagbabago na gagawin mo sa iyong function.php file, dahil kung wala iyon, ang paglipat sa isa pang paksa ay magiging napakasakit. Sa palagay ko nakuha mo ang ideya.

Dahilan bilang 3.

Kung nagdagdag ka ng code sa functions.php na ganap na hindi inaasahan na sinisira ang iyong site at nakakita ka ng isang puting puting screen - kakailanganin mo ng isang FTP client upang mai-upload ang "sirang" mga function.php, i-edit ito at i-upload ito pabalik sa site. Ang nasabing kasiyahan sa sarili.

Kailan gagamit ng mga function.php

Ang paggamit ng mga function.php nang tama para sa kasalukuyang aktibong tema ng bata ay isang wastong pagpipilian. Ngunit tandaan, nakatuon ako sa salitang ito " aktibo"?

Kung nagdagdag ka ng mga chunks ng code na magkakaroon lamang ng kahulugan kapag nagtatrabaho kasama ang partikular na tema, maaari mong ligtas na magamit ang mga function.php (sa isang tema ng bata). Narito ang ilang mga halimbawa kung saan ito maaaring maging naaangkop:

  • Pagdaragdag ng isa pang styleheet (.css) para sa iyong tema
  • Baguhin ang haba ng sipi ng post upang gawing mas mahusay ang hitsura ng site
  • Pagdaragdag ng mga pasadyang font para sa kasalukuyang tema
  • Pagdaragdag ng isang file ng localization upang isalin ang kasalukuyang tema

Sa madaling salita, tuwing nagdagdag o nagbago ka ng anumang nauugnay sa isang partikular na kasalukuyang tema, huwag mag-atubiling gumamit ng mga function.php.

Kailan mas mahusay na gawin nang walang pagpapaandar.php

Ang paggamit ng mga function.php upang magdagdag ng higit pang mga pandaigdigang bagay at pag-andar na maaaring maging teoretikal na maging kapaki-pakinabang sa iyo para sa isa pang tema ay isang masamang ideya.

Narito ang isang pares ng mga halimbawa kung kailan mas mahusay na gawin nang walang mga pag-andar.php:

  • Lumilikha ng mga pasadyang widget na gagamitin mong madalas
  • Lumilikha ng mga pasadyang mga shortcode
  • Pagdaragdag ng code na walang independensya sa tema (code ng Google Analytics, atbp.)

Sa mga ganitong kaso, pinakamahusay na panatilihin ang code na ito anuman ang iyong tema. At magagawa mo ito sa mga pasadyang plugin.

Iniisip mo ngayon - nakakaisip sa paglikha ng isang plugin, kailan mo mai-e-edit ang mga function.php? Napakahirap! Maniwala ka sa akin, hindi ito ang kaso. Ginagawa ito nang napakabilis at madali.

Paano mag-set up ng isang pasadyang plugin sa halip na mga function.php

Upang lumikha ng iyong sariling pasadyang plugin para sa pagtatago ng iyong code, kailangan mo:

  1. Lumikha ng isang text file kasama ang iyong code at i-save ito bilang isang .php file
  2. I-pack ang nagresultang .php file sa isang .zip archive
  3. I-install ang archive na ito bilang isang regular na WordPress plugin sa menu Mga Plugin → Magdagdag ng Bago

Iyon lang, 3 na aksyon lang.

Hakbang 1. Lumikha ng isang .php file kasama ang iyong code

Buksan ang Notepad sa iyong computer at i-paste ang sumusunod na teksto:

Maaari mong syempre gamitin ang iyong pangalan para sa plugin sa linya ng Pangalan ng Plugin:

I-save ang file at bigyan ito ng ilang natatanging pangalan upang hindi malito ng WordPress ang iyong plugin sa mga naka-install na. Halimbawa: wpcafe-custom-functions.php.

Oo, huwag kalimutang piliin ang uri ng file na "Lahat ng mga file" at idagdag ang extension na .php kapag nagse-save:

Hakbang 2. Lumikha ng isang .zip archive

Sa palagay ko hindi na kailangan ng anumang paliwanag dito. Lumikha lamang ng isang .zip archive kasama ang iyong file gamit ang anumang maginhawang archiver.

Hakbang 3. I-install bilang isang regular na plugin

Ang pinakamadaling bahagi. Pumunta lamang sa iyong lugar ng admin ng WordPress sa Mga Plugin → Magdagdag ng Bago at i-upload ang iyong archive bilang isang regular na plugin.

Kapag na-aktibo mo ito, dapat mong makita ang iyong bagong plugin sa listahan ng lahat ng iba pang mga naka-install na plugin:

Paano idagdag ang iyong code

Upang idagdag ang iyong code snippet, i-paste lamang ito sa .php file na iyong nilikha. O maaari mong palaging gumawa ng isa pang magkakahiwalay na plugin para sa dalawang magkakaibang mga pag-andar.

Halimbawa, ito ang magiging hitsura ng iyong .php file kung nais mong gawin ang "Hello World!" Shortcode:

Ang mga komentong ito ay hindi nakakaapekto sa anumang paraan sa pagganap ng iyong code at ang bilis ng pagpapatupad ng plugin. Ngunit sa kanila mas madali para sa iyo na mag-navigate at tandaan kung ano ang ginagawa ng bawat pag-andar na idinagdag mo.

Balutin lamang ang iyong puna sa slash at asterisk syntax: /* ang puna mo */

Matapos gumawa ng mga pagbabago sa iyong code, maaari mong i-reload ang file na .php sa pamamagitan ng FTP o lumikha lamang ng isang bagong .zip archive at i-upload bilang isang bagong plugin at tanggalin ang luma.

Iba pang mga paraan upang maiwasan ang pag-edit ng mga function.php

Sa pamamagitan ng at malaki, kung may kumpiyansa ka sa iyong mga kakayahan at alam kung paano magdagdag ng code sa mga function.php, hindi ka dapat magkaroon ng kahirapan sa mga pasadyang plugin din. Walang mahirap dito.

Ngunit lubos naming nauunawaan kung wala kang pagnanais na mag-tinker ng lahat ng ito nang manu-mano. Gayunpaman, ito ang WordPress. Samakatuwid, ang libreng Code Snippets plugin ay maaaring maging madaling gamiting, na ginagawang madali upang idagdag ang iyong karagdagang code sa site:

Sa plugin na ito, maaari kang magdagdag ng iba't ibang mga snippet ng code, bigyan sila ng isang pangalan, paglalarawan, buhayin at i-deactivate ang isa o ibang piraso ng code nang pili.

Ang isa pang cool na tampok ay ang maaari mong i-import / i-export ang iyong mga snippet ng code sa pagitan ng mga site.

Kinalabasan

Maaaring mukhang isang maliit na detalye, ngunit ang tamang pagkakalagay ng iyong karagdagang code ay magbibigay-daan sa iyo upang madaling lumipat sa pagitan ng iba pang mga tema sa hinaharap. Maaari mo ring paganahin o huwag paganahin ang isa o ibang pag-andar nang magkahiwalay kung hinati mo ang bawat karagdagang pag-andar sa pagitan ng magkakahiwalay na mga plugin.

Kaya't ang pamamaraan na ito ay talagang nararapat pansin.

cms MySQL (4)

Sinusubukan kong lumikha ng isang pangunahing sistema ng plugin na katulad ng madalas mong makita sa CMS tulad ng WordPress. Mayroon kang isang folder ng mga plugin na nakatali sa pangunahing pagpapatakbo ng system gamit ang mga abiso tungkol sa mga pagpapaunlad simula pa gamit ang isang pattern ng disenyo Tagamasid o Kaganapan .

Ang problema ay hindi maaaring malaman ng system anong mga pangyayari ang plugin ay nais na kumilos - kaya kailangang i-load ng system ang bawat plugin para sa bawat kahilingan sa pahina upang makita kung talagang kailangan ang plugin na iyon sa ilang mga punto. Hindi na kailangang sabihin, ito ay maraming nasayang na mapagkukunan - sa kaso ng WordPress, na nagdaragdag ng hanggang sa ilang dagdag na mga MB ng memorya para sa bawat kahilingan!

Mayroon bang mga kahaliling paraan upang magawa ito?

Halimbawa, mayroong isang paraan upang mai-load ang buong bagay nang isang beses at pagkatapos ay i-cache ang mga resulta upang malaman ng iyong system tulad ng tamad na pag-load ng mga plugin? Sa madaling salita, naglo-load ba ang system ng isang config file na naglilista ng lahat ng mga kaganapan na nais ng plugin na bigkasin at pagkatapos ay iimbak ang mga ito sa APC o isang bagay para sa mga kahilingan sa hinaharap?

Kung hindi rin ito gumana nang maayos, kung gayon marahil ay may isang espesyal na istraktura ng file na maaaring magamit upang makagawa ng mga pinag-aralan na hula kung kailan hindi kinakailangan ang ilang mga plugin upang matupad ang kahilingan.

Mga sagot

Mayroon akong tool sa pamamahala ng plugin, ngunit ginagamit ko lang ito sa mga pang-proseso na plugin at kasama ang lahat ng kasama na kadalasang naglo-load kaagad. Ngunit para sa isang API na nakabatay sa kaganapan at tamad na paglo-load, naiisip ko ang paggamit ng mababaw na mga pambalot upang pamahalaan ang mga plugin at paggamit sa awtomatikong paglo-load para sa aktwal na mga extension.

/ ** * api: anuman * bersyon: 0.1 * pamagat: halimbawa ng plugin * paglalarawan: ... * config: * nakasalalay: otherplugin * /$ plugins ["title_event"] = "TitleEventClass"; $ plugins ["pangalawang"] = array ("Class2", "callback"); ?>

Para sa halimbawang ito, ipinapalagay kong ang plugin API ay isang simpleng listahan. Ang halimbawang script tampok na ito-plugin-123.php ay walang ginawa kundi idagdag ito sa array na nilo-load. Sa ganitong paraan, kahit na mayroon kang isang dosenang mga plugin ng tampok, magreresulta lamang ito sa isang karagdagang pagsasama-sama sa bawat isa.

Ngunit ang pangunahing application / o plugin API ay maaaring sa halip ay maitaguyod lamang ang mga nabanggit na klase (alinman sa bagong $ eventcb; para sa raw-call_user_func_array o call_user_func_array para sa mga callback). Sa turn, mai-load nito ang aktwal na gawain sa autoloader. Kaya mayroon kang isang dalawahang system kung saan pinamamahalaan ng isang bahagi ang listahan, ang iba pa ay ang totoong code.

Sa gayon ay naiisip ko pa rin ang isang simpleng config.php na naglilista lamang ng mga plugin at setting na tulad nito:

"user / wrapper-for-htmlpurifier.php"); $ cfg ["medyo"] = 1;

Muli na isinasaalang-alang na ang mga ito ay mga data wrappers / script lamang, na may isang paglalarawan ng plugin para sa kakayahang pamahalaan. Maaari mo ring gamitin ang aktwal na register_even () API at tukuyin ang isang karagdagang pag-andar ng pambalot sa bawat isa. Ngunit ang isang listahan ng mga cool na pangalan ay tila ang pinakamadaling pagpipilian.

Ang tool sa pamamahala sa itaas ay mukhang kalawangin at pangit: http://milki.include-once.org/genericplugins/
Ngunit hindi ito ginagamit kung ang nais mo lamang ay isang listahan (mesa ng sql) at pamamahala ng mga setting. Ang overhead na ito ay para lamang sa maayos na pag-print ng metadata ng plugin at pinapanatili ang nababasa na config.php.

Panghuli:

spl_autoload () upang isama ang_path at simpleng case event-> classname, isang pambalot na script bawat isa, isama lang lahat nang sabay-sabay.

Itatago ko ang pangalan ng klase ng plugin kasama ang mga naka-sign na kaganapan sa isang config file at pagkatapos ay i-save ang parsed config file sa APC halimbawa. Pagkatapos, kapag nag-apoy ang kaganapan, maaaring tamad ng system ang pag-load ng naaangkop na mga klase ng plugin kung kinakailangan.

Ang Wordpress at iba pang mga system ng CMS ay napakasamang halimbawa.

Dapat nating maunawaan na ang modular halos palaging nangangahulugang ito ay mas mabibigat.

Ang pinakamahusay na pamamaraan na nakatrabaho ko upang malutas ang sitwasyong ito ay isang nakabatay sa klase na plugin, na may isang mahigpit na kombensyon sa pagpapangalan, gamit ang isang autoloader.

Kaya, kailangan mong patunayan o gumamit ng mga static na pag-andar bago gamitin ang plugin.

Maaari mo ring tawagan ang plugin:

Halimbawa:

"/plugins/($parts)/($parts).php"); pahinga; ) // ...)?>

Tulad ng para sa mga kaganapan:

Dapat mong irehistro ang kaganapang ito nang statically upang maiwasan ang pabago-bagong pagbabago.

Ang database ay magiging tamang lugar para dito. Maaari kang magkaroon ng mga talahanayan ng kaganapan at mai-install ang () at i-uninstall () ang mga pamamaraan sa klase ng plugin upang magdagdag ng mga tukoy na kaganapan o magbigkis ng mga pamamaraan sa iba pang mga kaganapan. Ito ay isang query sa database, at kung nais mong makakuha ng higit dito, idagdag ito sa memcached o flat ini file.

Gumagawa ng maayos para sa akin. Kaya't nakakuha ako ng isang mabibigat na system na kumonsumo ng 8MB bawat kahilingan na bumagsak sa 1MB, na may eksaktong parehong listahan ng tampok, walang paunang pag-cache. Ngayon ay maaari kaming magdagdag ng higit pang mga tampok at panatilihing "malinis" ang system

sana makatulong ito

Ang pinakamahusay na paraan ay upang simulan ang pag-cod sa kanila. Ang mga pattern ng disenyo ay isang mahusay na konsepto na mahirap ilapat sa pamamagitan lamang ng pagbabasa tungkol sa mga ito. Kumuha ng ilang halimbawang pagpapatupad na nakikita mo sa Internet at bumuo sa paligid nila.

Ang isang mahusay na mapagkukunan ay ang pahina ng Data at Bagay. Dumaan sila sa mga template at binibigyan ka ng parehong mga halimbawa ng pang-konsepto at real-world. Ang kanilang materyal na sanggunian ay mahusay din.

Ito ang pangunahing file sa iyong tema sa WordPress. Matatagpuan sa / wp-nilalaman / mga tema / (narito ang pangalan ng iyong tema) /function.php.
Tinutukoy nito ang mahahalagang katangian ng tema, pinapasadya ang mga kawit, hitsura at pag-andar, at nagdadagdag din ng ilang mga tampok na kailangan mo. Ang file na ito ay na-load tuwing magbubukas ka ng anumang pahina sa WordPress, kaya maaari itong magamit upang baguhin ang anumang elemento ng site. Kaugnay nito, maraming mga tip a la " kung paano baguhin ang isang bagay sa WordPress nang walang mga plugin »Kadalasan nababahala sa paggawa ng mga pagbabago sa functions.php, sa halip na lumikha ng isang hiwalay na plugin para sa pagpapaandar na ito o paggamit ng isang nakahandang solusyon. Ito ay madalas na humantong sa isang labis na impormasyon ng file na ito, na ginagawang mahirap i-parse ang code, at ginagawang mas mahirap ang mga pagwawasto. Ngunit hindi ito ang pinaka-mapanganib na bagay. Ang pinaka-mapanganib na bagay ay iyon kapag binabago ang aktibong tema, mawawala ang bahagi o lahat ng kinakailangang pag-andar ng site.

Paano naiiba ang functions.php mula sa isang plugin

Wala. Sa core nito, ang functions.php ay isang uri ng pandaigdigang hindi maaaring palitan na plugin na nakatali sa kasalukuyang tema. Maaari mong makita kung paano ito kumokonekta sa WordPress sa wp-setting.php. Tulad ng nakikita mo mula sa pinagmulang code, na-load ito pagkatapos ng lahat ng mga plugin, gayunpaman, hindi ito nagbibigay ng anumang mga kawalan o pakinabang, maliban sa marahil ang kakayahang mag-override ng isang bagay sa mga konektadong plugin. Hindi ito makakaapekto sa bilis ng pagpapatupad ng code alinman. Ang nilalaman lamang ng mga plugin at function.php ang apektado. Samakatuwid, mag-ingat sa pagpili ng mga aktibong plugin para sa iyong tema at sumuko na hindi kinakailangan, ng maliit na paggamit sa iyo, pagkatapos ay maaari mong pagaanin ang iyong site at pabilisin ang gawain nito.

Kailan gagamit ng mga function.php

Gabayan ng sumusunod na panuntunan: kung ang pagpapaandar ay direktang nauugnay sa kasalukuyang tema, ngunit hindi sa pagpapatakbo ng site, isulat ito sa mga function.php.

Halimbawa, maaaring ito ay

  • Pagse-set up ng mga thumbnail
  • Pagtatakda ng mga laki ng sidebar
  • Pagse-set up ng mga lugar para sa mga widget
  • Pag-anunsyo ng mga lugar sa ilalim ng menu ng nabigasyon
  • Mga setting ng tema
  • Karagdagang mga tampok ng iyong tema

Kailan maiiwasang gumamit ng mga function.php

Kung dapat gumana ang pagpapaandar kahit na binago ang aktibong tema, dapat mong alagaan ang paglalagay nito sa isang hiwalay na plugin.
Kabilang dito ang:

  • Kahulugan ng mga counter ng pagdalo (Google Analytics, Yandex.Metrika, Liveinternet)
  • Pagse-set up ng karagdagang pag-andar ng admin panel (halimbawa)
  • Pag-configure ng source code ()
  • Pagtukoy sa mga shortcode
  • pagpaparehistro

Ang mga listahan ay hindi kumpleto, maaari mong tukuyin ang kanilang nilalaman sa iyong sarili.

Saan ko maidaragdag ang code na ito kung wala sa functions.php? Maaari kang magsulat ng mga espesyal na plugin para sa kanila, gayunpaman, mayroong isang mas kawili-wili at mas simpleng paraan.

kahalili ng mu-plugins sa pagpapaandar.php

Ang isang kagiliw-giliw na pag-andar ay dumating sa amin sa mga modernong bersyon ng WordPress mula sa WordPress MU (Multi-User), na tinawag Mga Plugin ng MU... Ang kakanyahan nito ay ang mga sumusunod. Minsan kinakailangan ng tagapangasiwa ng WordPress MU upang tukuyin ang mga plugin para sa buong network ng mga site. Hindi ito makakamtan sa karaniwang pag-andar, kaya ipinakilala ang isang espesyal na seksyon: / wp-content / mu-plugins /, kung saan tinukoy ang mga ito. Ang isa pang kagiliw-giliw na bagay ay ang mga file ng plugin mula sa direktoryong ito na na-load bago ang lahat, na ginagawang posible na paunang tukuyin ang ilang mga Constant o setting.
Nang maglaon ay natapos ang WPMU, ang code nito ay isinama sa pangunahing pag-blog, at ngayon ang anumang WordPress ay maaaring gumamit ng pagpapaandar ng mga MU-plugin, na ngayon ay nangangahulugang Dapat gamitin, iyon ay, sapilitan para sa paggamit.

Paano gumamit ng mu-plugins

Una, kailangan mong lumikha ng isang espesyal na seksyon / wp-nilalaman / mu-plugins /
Inilagay namin dito ang kinakailangang mga file ng plugin. Hindi tulad ng maginoo na mga plugin, hindi na kailangang sumunod sa isang espesyal na syntax, at ang pagpapaandar ay maaaring ideklara nang direkta

Dito, halimbawa, isang file na may code ng mga counter ng pagdalo ay nilikha.
Sa loob, ganito ang hitsura ng file na ito

// ... Sa halip na linyang ito, ipasok ang counter code ...

Sa lugar ng admin, magiging hitsura nito Kailangan

8 sagot

Maaari mong gamitin ang pattern ng Observer. Isang simpleng paraan ng pagganap upang magawa ito:

Output:

Ito ang aking CRAZY application 4 + 5 = 9 4 * 5 = 20

Mga Tala:

Sa halimbawang source code na ito, dapat mong ideklara ang lahat ng iyong mga plugin bago ang aktwal na source code na nais mong i-renew. Nagsama ako ng isang halimbawa ng kung paano hawakan ang isa o higit pang mga halagang ipinasa sa plugin. Ang pinakamahirap na bahagi nito ay ang pagsusulat ng aktwal na dokumentasyon na naglilista kung anong mga argumento ang naipasa sa bawat kawit.

Ito ay isang paraan lamang upang lumikha ng isang plugin system sa PHP. Mayroong mas mahusay na mga kahalili, iminumungkahi ko na suriin mo ang dokumentasyon ng WordPress para sa karagdagang impormasyon.

Paumanhin, mukhang ang mga underscore ay pinalitan ng mga HTML Markdown na entity? Maaari kong muling mai-post ang code na ito kapag naayos ang bug na ito.

I-edit: Huwag alalahanin, lilitaw lamang ito kapag nag-edit ka

Kaya't sabihin nating hindi mo kailangan ang pattern ng Observer sapagkat kinakailangan mong baguhin ang mga pamamaraan ng klase upang hawakan ang gawain sa pakikinig at nais mo ang isang bagay na pareho. At sabihin nating ayaw mong gumamit ng nagpapalawak ng mana dahil maaari mo nang mana ang iyong klase mula sa ibang klase. Hindi ba't mahusay na magkaroon ng isang pangkaraniwang paraan upang maisagawa ang anumang klase na maipapasok nang walang kahirap-hirap? Narito kung paano:

_Class = get_class (& $ RefObject); $ ito -> _ RefObject = $ RefObject; ) public function __set ($ sProperty, $ mixed) ($ sPlugin = $ this -> _ Class. "_". $ sProperty. "_setEvent"; if (is_callable ($ sPlugin)) ($ mixed = call_user_func_array ($ sPlugin, $ mixed);) $ this -> _ RefObject -> $ sProperty = $ mixed;) public function __get ($ sProperty) ($ asItems = (array) $ this -> _ RefObject; $ mixed = $ asItems [$ sProperty] ; $ sPlugin = $ this -> _ Class. "_". $ sProperty. "_getEvent"; if (is_callable ($ sPlugin)) ($ mixed = call_user_func_array ($ sPlugin, $ mixed);) return $ mixed;) public function __call ($ sMethod, $ mixed) ($ sPlugin = $ this -> _ Class. "_". $ sMethod. "_beforeEvent"; if (is_callable ($ sPlugin)) ($ mixed = call_user_func_array ($ sPlugin, $ mixed );) if ($ mixed! = "BLOCK_EVENT") (call_user_func_array (array (& $ this -> _ RefObject, $ sMethod), $ mixed); $ sPlugin = $ this -> _ Class. "_". $ sMethod . "_ AfterEvent"; if (is_callable ($ sPlugin)) (call_user_func_array ($ sPlugin, $ mixed);))))) // end class Plugin class Pluggable ay umaabot sa Plugin () // end class Pl uggable // ///. // /// ""; pagpapaandar ng publiko (& $ sHow) (echo "$ sHow
\ n ";) pampublikong pagpapaandar sayName () (echo"
\ nAng Pangalan ko ay: ". $ this-> Pangalan."
\ n ";)) // end class Dog $ Dog = bagong Aso (); ////////////////// // // BAHAGI 3 /////// // // /// halo = "BLOCK_EVENT"; // kung nais mong harangan ang event return $ mixed;) function Dog_bark_ AfterEvent (& $ mixed) (echo $ mixed; // show the override) function Dog_Name_setEvent (& $ mixed) ($ mixed = " Coco "; // override" Fido "with" Coco "return $ mixed;) function Dog_Name_getEvent (& $ mixed) ($ mixed =" Iba't ibang "; // override" Coco "na may" Iba't ibang "return $ mixed;) // // ///. "; $ PDog-> Bark (" meow "); $ PDog-> SayName (); echo" Ang Aking Bagong Pangalan ay: ". $ PDog-> Pangalan;

Ang unang bahagi ay kung ano ang maaari mong isama sa nangangailangan_once () tawag sa tuktok ng iyong PHP script. Naglo-load ito ng mga klase upang makagawa ng isang bagay na maisasabog.

Sa bahaging 2, kung saan naglo-load kami ng klase. Tandaan Hindi ko na kailangang gumawa ng anumang bagay na espesyal para sa isang klase na ibang-iba sa pattern ng Observer.

Sa bahagi 3, kung saan ililipat namin ang aming klase sa "pluggable" (ibig sabihin, mapanatili ang mga plugin na nagpapahintulot sa amin na i-override ang mga pamamaraan at pag-aari ng klase). Kaya, halimbawa, kung mayroon kang isang web application, maaari kang magkaroon ng isang pagpapatala ng plugin at maaari mong buhayin ang mga plugin dito. Tandaan din ang pag-andar ng Dog_bark_beforeEvent (). Kung magtakda ako ng $ mixed = "BLOCK_EVENT" bago ang pahayag sa pagbabalik, hahadlangan nito ang aso mula sa pagtahol at hahadlangan din ang Dog_bark_ AfterEvent sapagkat walang kaganapan.

Sa bahagi 4, iyon ang normal na opcode, ngunit tandaan na kung ano ang maaari mong isipin na hindi gagana tulad nito. Halimbawa, hindi siya binibigkas ng aso ng pangalang "Fido" ngunit "Coco". Hindi sinabi ng aso na meow, ngunit kanino. At kapag nais mong tingnan ang pangalan ng aso sa paglaon, mahahanap mo na ito ay "Miscellaneous" at hindi "Coco". Ang lahat ng mga override na ito ay ipinakilala sa Bahagi 3.

Kaya paano ito gumagana? Kaya, iwaksi natin ang eval () (na sinasabi ng lahat na "masama") at isantabi na hindi ito isang pattern ng Observer. Kaya't ang paraan ng paggana nito ay may isang nakatagong walang laman na klase na tinatawag na Pluggable na hindi naglalaman ng mga pamamaraan at katangian na ginamit ng klase ng Aso. Kaya, sa nangyari ito, ang mga mahiwagang pamamaraan ay gagamitin para sa amin. Samakatuwid, sa mga bahagi 3 at 4, nag-uugnay kami sa isang bagay na nagmula sa Pluggable class, at hindi sa mismong klase ng Aso. Sa halip, hinayaan namin ang klase ng Plugin na "hawakan" ang bagay ng Aso para sa amin. (Kung ito ang ilang disenyo na hindi ko alam, mangyaring ipaalam sa akin.)

Ang pamamaraan ng hook at listener ay ang pinaka-karaniwang ginagamit, ngunit may iba pang mga bagay na maaari mong gawin. Nakasalalay sa laki ng iyong aplikasyon at kung sino ang nais makita ang code (ito ay magiging isang script ng FOSS, o anupaman sa bahay) ay lubos na makakaapekto sa kung paano mo nais na lutasin ang mga plugin.

Ang kdeloach ay may magandang halimbawa, ngunit ang pagpapatupad at hook function na ito ay medyo walang katiyakan. Hihiling ko sa iyo para sa karagdagang impormasyon tungkol sa likas na katangian ng php application para sa iyong email, at kung paano mo nakikita ang mga plugin.

1 sa kdeloach mula sa akin.

Narito ang diskarte na ginamit ko, sinusubukan nitong kopyahin mula sa mekanismo ng signal ng Qt / slot, isang uri ng pattern ng Observer. Ang mga bagay ay maaaring maglabas ng mga signal. Ang bawat signal ay may isang pagkakakilanlan sa system - binubuo ito ng id + ng object ng nagpadala Ang bawat signal ay maaaring nakagapos sa mga tatanggap, na kung saan ay isang "callable" lang, gumagamit ka ng klase ng bus upang magpadala ng mga signal sa sinumang interesado na tanggapin sila. may nangyayari, nagpapadala ka ng isang senyas. Nasa ibaba ang isang halimbawa at halimbawa ng pagpapatupad

mag log in (); ?>

Nahanap ko ang pinakamadaling paraan ay sundin ang payo ni Jeff at tingnan ang mayroon nang code. Subukang tingnan ang Wordpress, Drupal, Joomla at iba pang mga kilalang PHP-CMS upang makita kung ano ang hitsura at pakiramdam ng kanilang mga API. Sa ganitong paraan, maaari ka ring makakuha ng mga ideya na maaaring hindi mo naisip noon upang gawing mas makapal ang mga bagay.

Ang isang mas direktang sagot ay ang pagsusulat ng mga generic na file na isasama nila sa isang isama na file upang matiyak ang kakayahang magamit. Ito ay ikakategorya at HINDI ibibigay sa isang solong "hooks.php" MASSIVE file. Mag-ingat, sapagkat kung ano ang napupunta na ang mga file na isinasama nila sa paglaon ay mayroong higit at maraming mga dependency at pagpapaandar. Subukang limitahan ang pagtitiwala sa API. I.E mas kaunting mga file upang isama.

Mayroong maayos na proyekto na tinawag