{"id":228541,"date":"2022-10-22T09:34:00","date_gmt":"2022-10-22T06:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228541"},"modified":"2022-11-09T02:55:15","modified_gmt":"2022-11-08T23:55:15","slug":"peatage-plugina-kaeivitamine-ilma-soltuvuseta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/peatage-plugina-kaeivitamine-ilma-soltuvuseta\/","title":{"rendered":"Peatage plugina k\u00e4ivitamine ilma s\u00f5ltuvuseta"},"content":{"rendered":"\n<p>Kui l\u00e4henete paljudele WordPressi pistikprogrammide arendamisele objektorienteeritud vaatenurgast, j\u00f5uate l\u00f5puks punkti, kus te ei suhtle eriti WordPressi tuuma endaga.<\/p>\n<p>Ja minu meelest on see hea. See on arhitektuuri tunnuseks, et struktureerite oma koodi \u00f5igesti. See on:<\/p>\n<ol>\n<li>Teil on WordPress p\u00f5hitasemel,<\/li>\n<li>Teil on hulk klasse, mis asuvad vahetult WordPressi kohal ja vastutavad teabe saatmise eest pistikprogrammide vahel WordPressi ja WordPressist,<\/li>\n<li>Ja teil on \u00fclej\u00e4\u00e4nud kood, mis sisaldab \u00fclej\u00e4\u00e4nud funktsioone.<\/li>\n<\/ol>\n<p>Kuidas seda rakendatakse, v\u00f5ib see erineda, kuid \u00fcldine viis, kuidas ma seda kujutan, on sama, kuidas ma kaldun m\u00f5tlema standardsele <a href=\"https:\/\/en.wikipedia.org\/wiki\/Multitier_architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">N-tasandi<\/a> rakendusele, kus teil on andmekiht, rakenduse kiht ja esiosa.<\/p>\n<p>V\u00e4lja arvatud seekord, on teil WordPress, WordPressi ja \u00fclej\u00e4\u00e4nud koodiga suhtlemise kiht ning teate, \u00fclej\u00e4\u00e4nud kood.<\/p>\n<p>Kuidas pistikprogrammi saab korraldada.<\/p>\n<p>Mis juhtub siis, kui soovite peatada pistikprogrammi t\u00e4itmise, kui see peab suhtlema kolmanda osapoole s\u00f5ltuvusega ja peaks k\u00e4ivitama ainult siis, kui see s\u00f5ltuvus on olemas?<\/p>\n<h2>Peatage pistikprogrammi k\u00e4ivitamine<\/h2>\n<p>PHP ja WordPressi olemuse t\u00f5ttu saab seda teha m\u00f5nel viisil. Kood, mida ma jagan, ei kirjuta ette, kuidas seda teha.<\/p>\n<p>Selle asemel on see viis seda teha (mis on v\u00e4lja t\u00f5mmatud millestki, mis on arendamisel). Lisaks n\u00e4itan, kuidas see suhtleb ka m\u00f5ne muu pistikprogrammi komponendiga.<\/p>\n<h3>1 Konstruktor<\/h3>\n<p>Kui loete piisavalt artikleid WordPressi ja objektorienteeritud programmeerimise kohta, avastate t\u00f5en\u00e4oliselt, et konksude m\u00e4\u00e4ratlemiseks ei tohiks konstruktoreid kasutada. Ja n\u00f5ustun.<\/p>\n<p>See loob tarbetu sidumise ja muudab testimise raskemaks. Mis on siis konstruktori eesm\u00e4rk WordPressi-p\u00f5hises koodis?<\/p>\n<p>Kasutan seda samadel p\u00f5hjustel, mida v\u00f5iksite oodata mis tahes muus keeles: klassi atribuutide l\u00e4htestamiseks. Allolevas koodis n\u00e4ete kolme asja.<\/p>\n<ol>\n<li>Initsialiseerin kinnisvara,<\/li>\n<li>Kontrollin, kas on olemas s\u00f5ltuvus kolmandast osapoolest,<\/li>\n<li>Kui ei, siis lisan veateate,<\/li>\n<li>Uuendan vara.<\/li>\n<\/ol>\n<p>Muidugi, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/448d580a82b5ac615be127a0786cd3c5?ts=2#file-00-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">see on paljus\u00f5naline<\/a>, kuid see ei kasuta v\u00e4\u00e4rtuste l\u00e4htestamiseks nutikat koodi.<\/p>\n<pre><code>&lt;?php\n\npublic function __construct( $container) {\n\n    $this-&gt;can_run = true;\n\n    \/\/ If the dependency isn't installed, then add a message and flag execution to stop.\n    $this-&gt;messenger = $container-&gt;get( 'settings-messenger');\n    if (! class_exists( 'Acme_Dependency')) {\n\n        $this-&gt;messenger-&gt;add_error_message( 'The dependency is not installed.' );\n        $this-&gt;can_run = false;\n    }\n}\n<\/code><\/pre>\n<p>(Mida vanemaks ma olen saanud, seda rohkem on mulle meeldinud konkreetne kood, kuna see muudab selle lugemise, k\u00e4ttev\u00f5tmise ja kiirema liikumise lihtsamaks kui alternatiiv.)<\/p>\n<h3>2 Initsialiseerimismeetod<\/h3>\n<p>Kuna me ei kasuta WordPressi konksudega t\u00f6\u00f6tamiseks konstruktorit, peaks see funktsioon eksisteerima m\u00f5ne muu meetodi kontekstis.<\/p>\n<p>See annab meile spetsiaalse koha seda t\u00fc\u00fcpi funktsioonide paigutamiseks, \u00fclej\u00e4\u00e4nud klassist lahti\u00fchendamiseks ja WordPressiga suhtlemiseks ainult siis, kui meetod on selges\u00f5naliselt v\u00e4lja kutsutud.<\/p>\n<p>Kuid pidage meeles, et kogu selle m\u00f5te, mida ma k\u00e4sitlen, on seotud pistikprogrammi t\u00e4itmise peatamisega \u2013 mitte sellega, kuhu konksud paigutada.<\/p>\n<p>Oletame, et kolmanda osapoole s\u00f5ltuvust pole olemas, mis siis saab? Tuletame meelde, et konstruktoris m\u00e4\u00e4rati atribuut, mis v\u00f5imaldab meil otsustada, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/448d580a82b5ac615be127a0786cd3c5?ts=2#file-01-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kas peaksime<\/a> konksude seadistamisega edasi liikuma v\u00f5i mitte:<\/p>\n<pre><code>&lt;?php\n\npublic function init() {\n\n    if (! $this-&gt;can_run) {\n        return;\n    }\n\n    add_action( 'admin_notices', array( $this, 'admin_notices') );\n}\n<\/code><\/pre>\n<p>Ja kui see on paigas, siis \u00fclej\u00e4\u00e4nud koodi ei k\u00e4ivitata.<\/p>\n<h2>Palju s\u00f5nu, v\u00e4he koodi<\/h2>\n<p>See k\u00f5lab nii v\u00e4ga v\u00e4ikese koodi kohta palju selgitusi.<\/p>\n<p>Kuid osa sellest on ka p\u00fc\u00fcdes edasi anda WordPressi-p\u00f5hise projekti osade eraldamise olulisust \u00fclej\u00e4\u00e4nud tuumast, et osad saaksid omavahel suhelda, ilma et oleks vaja kogu aeg tuumaga r\u00e4\u00e4kida.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mis juhtub, kui soovite peatada pistikprogrammi t\u00e4itmise, kui see peab t\u00f6\u00f6tama kolmanda osapoole s\u00f5ltuvusega, ja peaksite seda tegema ainult siis, kui see on olemas?<\/p>\n","protected":false},"author":1,"featured_media":221144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,916,802,863],"tags":[1165],"class_list":["post-228541","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-muud","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228541"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228541\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/221144"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}