{"id":230574,"date":"2022-12-13T13:37:00","date_gmt":"2022-12-13T10:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230574"},"modified":"2022-12-13T13:37:40","modified_gmt":"2022-12-13T10:37:40","slug":"wordpressi-vidinad-objektorienteeritud-laehenemisviis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-objektorienteeritud-laehenemisviis\/","title":{"rendered":"WordPressi vidinad: objektorienteeritud l\u00e4henemisviis"},"content":{"rendered":"\n<p>Aastaid tagasi l\u00f5in <strong><a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Widget Boilerplate&#8217;i<\/a><\/strong>, mille eesm\u00e4rk on olla j\u00e4rgmine:<\/p>\n<blockquote>\n<p>Korrastatud, hooldatav platvorm vidinate loomiseks, kasutades WordPressi parimaid tavasid.<\/p>\n<\/blockquote>\n<p><strong><a href=\"https:\/\/developer.wordpress.org\/themes\/functionality\/widgets\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Sellest ajast peale pole vidinate API<\/a><\/strong> -ga seoses palju muutunud (mida me selles postituses hiljem vaatleme), kuid muutunud on see, mida pean &quot;parimateks tavadeks&quot;. Lisaks on minu arvates see API kindel m\u00e4\u00e4r Sissejuhatava objektorienteeritud programmeerimise n\u00e4ide WordPressis on k\u00f5rge.<\/p>\n<p>Asi pole selles, et see kasutab palju objektorienteeritud p\u00f5him\u00f5tteid, mitte sellep\u00e4rast, et see kasutab kaasaegseid standardeid (v\u00e4hemalt t\u00e4nap\u00e4evase PHP osas), vaid sellep\u00e4rast, et see kasutab m\u00f5nda asja, mis aitavad meil m\u00f5nda neist \u00e4ra tunda, n\u00e4iteks signaalid objektorienteeritud programmeerimise kohta WordPressis.<\/p>\n<p>Ja seda ei tohiks alahinnata: kui otsite WordPressis objektorienteeritud programmeerimise n\u00e4iteid, otsige API-sid, mis seda kasutavad.<\/p>\n<p>Lisaks, kui otsite viise, kuidas hinnata oma koodijupi (r\u00e4\u00e4kimata koodibaasist) taset klasside ja m\u00f5nede OOP-i t\u00e4iustatud funktsioonide kasutamiseks, siis miks mitte kasutada m\u00f5nda koodi lakmuspaber, et n\u00e4ha, kuidas sul l\u00e4heb?<\/p>\n<\/p>\n<p>Ja vidinate API teeb just seda.<\/p>\n<h2>WordPressi vidinad: sissejuhatus<\/h2>\n<p>Nii et v\u00e4iksemas seerias kui mu viimane, p\u00fc\u00fcan vaadata vidinate API-t ja teha m\u00f5ned asjad:<\/p>\n<ol>\n<li>n\u00e4idata teile vidina p\u00f5hilist luustikku ja seda, miks see on objektorienteeritud,<\/li>\n<li>arutlege, mida peaksite m\u00e4rkama ja miks,<\/li>\n<li>v\u00e4rskendage esmalt Widget Boilerplate&#8217;i otse sellel saidil ja seej\u00e4rel l\u00fckake see GitHubisse,<\/li>\n<li>looge vidin, kasutades API-d ja katlaplaati meie t\u00f6\u00f6 aluseks.<\/li>\n<\/ol>\n<p>Ja selles postituses alustame \u00fclaltoodud esimese punktiga.<\/p>\n<h3>Aga esmalt\u2026<\/h3>\n<p>Enne selle postituse juurde asumist soovitan lugeda j\u00e4rgmisi postitusi:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/oop-kaks-esimest-sammast\/\" title=\"Objektorienteeritud programmeerimise kaks sammast: 1. osa 2-st\">Objektorienteeritud programmeerimise kaks sammast: 1. osa 2-st<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/oop-kaks-teist-sammast\/\" title=\"Objektorienteeritud programmeerimise kaks sammast: 2. osa 2-st\">Objektorienteeritud programmeerimise kaks sammast: 2. osa 2-st<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/abstraktsed-klassid-1-osa-abstraktne-kaeitumine\/\" title=\"Abstraktsed klassid, 1. osa \u2013 Abstraktne k\u00e4itumine\">Abstraktsed klassid, 1. osa \u2013 Abstraktne k\u00e4itumine<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/abstraktsed-klassid-2-osa-abstraktsed-klassid-ja-liidesed\/\" title=\"Abstraktsed klassid, 2. osa \u2013 Abstraktsed klassid ja liidesed\">Abstraktsed klassid, 2. osa \u2013 Abstraktsed klassid ja liidesed<\/a><\/strong><\/li>\n<\/ol>\n<p>Kui see on tehtud (v\u00f5i kui tunnete, et olete teemadest juba aru saanud), oleme valmis alustama.<\/p>\n<p>[piira makstud=&quot;true&quot;]<\/p>\n<h2>Vidinate API p\u00f5hit\u00f5ed<\/h2>\n<p>Kui loete vidinate k\u00e4siraamatu lehte, n\u00e4ete palju sisu. See on hea asi, kuid see ei ole alati parim samm, kui proovite sisu destilleerida sellisele vaatajaskonnale nagu ise, kui otsite praktilisi objektorienteeritud n\u00f5uandeid.<\/p>\n<p>Seega valin ma API dokumentatsioonist v\u00e4lja asjakohased osad ja rakendan selle siis meie pakutavale koodile.<\/p>\n<h3>Mis on vidin?<\/h3>\n<p>Ma arvan, et enamik meist, kes t\u00f6\u00f6tavad WordPressiga, teavad, mis on vidin, kuid oluline on see termin m\u00e4\u00e4ratleda, et me k\u00f5ik t\u00f6\u00f6taksime sama idee alusel. <strong><a href=\"https:\/\/developer.wordpress.org\/themes\/functionality\/widgets\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">K\u00e4siraamatus on kirjas:<\/a><\/strong><\/p>\n<blockquote>\n<p>Vidin on PHP-objekt, mis v\u00e4ljastab HTML-i. Sama t\u00fc\u00fcpi vidinat saab samal lehel mitu korda kasutada (nt tekstividin). Vidinad suudavad salvestada andmeid andmebaasi (valikute tabelisse).<\/p>\n<\/blockquote>\n<p>Kui see on paigas, vaatame kohandatud vidina koodi, v\u00e4hemalt osa sellest, ja vaatame, mida saame selle objektorienteeritud olemuse osas v\u00e4lja tuua.<\/p>\n<h3>Vidinaklass<\/h3>\n<p>Enne koodi vaatamist teame, et teatud tasemel objektorienteeritud programmeerimine toimub lihtsalt seet\u00f5ttu, et dokumentatsioon k\u00e4sib meil teha kolme asja:<\/p>\n<ol>\n<li>Looge oma vidina klass, laiendades standardset <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_widget\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Widget<\/a> klassi ja m\u00f5ningaid selle funktsioone.<\/li>\n<li>Registreerige oma vidin, et see oleks <strong>vidinate<\/strong> ekraanil saadaval.<\/li>\n<li>Veenduge, et teie teemal oleks v\u00e4hemalt \u00fcks <strong><a href=\"https:\/\/make.wordpress.org\/docs\/theme-developer-handbook\/theme-functionality\/sidebars\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vidinaala<\/a><\/strong>, kuhu vidinaid lisada.<\/li>\n<\/ol>\n<p>Selles postituses keskendun ma esimesele punktile (kuigi l\u00f5puks j\u00f5uame selleni, kuidas me oma vidinaid teemasse tutvustame enne sarja l\u00f5ppu).<\/p>\n<p>Paigutagem <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ea73655b0a022d65317529930cbb0cad#file-00-widget-base-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kood v\u00e4lja nii,<\/a><\/strong> nagu see on dokumentatsioonis, ja r\u00e4\u00e4gime sellest, mida saame sellest \u00f5ppida:<\/p>\n<pre><code>&lt;?php\nclass AcmeWidget extends WP_Widget \n{ \n    public function __construct() \n    {\n    }\n\n    public function widget($args, $instance) \n    {\n    }\n\n    public function form($instance)\n    {\n    }\n\n    public function update($newInstance, $oldInstance)\n    {\n    }\n}<\/code><\/pre>\n<p>Esiteks m\u00e4rkame, et kuigi me m\u00e4\u00e4ratlesime klassi (millele saame anda nime, mida iganes tahame), peab see laiendama <strong>WP_Widget<\/strong>. See t\u00e4hendab, et WordPressi tuumas on klass <strong>WP_Widget<\/strong>. <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/class-wp-widget.php\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Sellel lehel<\/a><\/strong> saate vaadata l\u00e4htekoodi h\u00e4sti organiseeritud jaotust .<\/p>\n<p>Teiseks n\u00e4itab m\u00e4rks\u00f5na <strong>laiendus<\/strong>, et kasutame <strong><a href=\"https:\/\/php.net\/manual\/en\/language.oop5.inheritance.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP-i p\u00e4rimist<\/a><\/strong>, mis on objektorienteeritud programmeerimise p\u00f5hisammas.<\/p>\n<p>Kolmandaks peame rakendama nelja funktsiooni, millest kaks n\u00f5uavad argumente. Funktsioonid, mida peame rakendama, on j\u00e4rgmised:<\/p>\n<ul>\n<li><strong>__construct()<\/strong>, mis on p\u00f5hiklassi konstruktor. Siin peame veenduma, et kutsutakse v\u00e4lja emaklassi konstruktor, kui see on olemas, ja seej\u00e4rel initsialiseerime k\u00f5ik atribuudid, mida me oma vidina jaoks vajalikuks peame. Vaatame seda hiljem sarjas.<\/li>\n<li><strong>widget()<\/strong> vastutab selle vidina sisu v\u00e4ljastamise eest, mille kasutaja haldusala liidest kasutades pakub. See aktsepteerib kahte parameetrit \u2013 <strong>$args<\/strong> ja <strong>$instance.<\/strong> Parameeter <strong>$args<\/strong> on lehel lehel renderdatav teave ja <strong>$instance<\/strong> on viide vidina eksemplarile (kuna lehel saab renderdada mitu vidinat).<\/li>\n<li><strong>form()<\/strong> kuvab haldusliidese, millega kasutaja suhtleb, et juhtida saidi esiotsa v\u00e4ljundit. See n\u00f5uab ka argumenti <strong>$instance<\/strong>, et pakutav teave oleks tegeliku vidina kohta, millega kasutaja t\u00f6\u00f6tab (v\u00f5rreldes k\u00f5igi vidina eksemplaridega).<\/li>\n<li><strong>update()<\/strong> kasutatakse v\u00e4\u00e4rtuste salvestamiseks vidina praegusesse eksemplari. See aktsepteerib kahte argumenti. Esimene on vidina uus eksemplar koos kasutaja antud v\u00e4rskendusv\u00e4\u00e4rtustega (m\u00f5elge aktiivse tekstividina v\u00e4\u00e4rtuse v\u00e4rskendamisele) ja teine \u200b\u200bargument on vidina vana eksemplari v\u00f5i v\u00f5ib-olla eelmise eksemplari v\u00f5i v\u00f5ib-olla &quot; eksemplar, millel olid eelmised v\u00e4\u00e4rtused.<\/li>\n<\/ul>\n<p>Need neli funktsiooni on vaja rakendada osana vidina API-st, osana funktsioonide p\u00e4rimisest laiendatud liidesest ja luua vidina p\u00f5hifunktsioonid.<\/p>\n<p>See ei t\u00e4henda, et rohkem ei saaks lisada, kuid hea objektorienteeritud viisil oleks t\u00f5en\u00e4oliselt k\u00f5ige parem see k\u00e4itumine teistesse klassidesse viia. Kuid me vaatame seda hiljem sarjas, kui loome oma vidina.<\/p>\n<h3>Mis on peamised pakkumised?<\/h3>\n<p>Veendumaks, et saan aru, mida sellest postitusest aru saab, on see j\u00e4rgmine:<\/p>\n<ul>\n<li>Vidinate API on objektorienteeritud. See pole mitte ainult objektorienteeritud, kuna see kasutab klassi (kuigi see on kindlasti hea l\u00e4htepunkt), vaid ka seet\u00f5ttu, et see p\u00e4rib funktsionaalsuse, mis on ehitatud juba olemasolevasse baasklassi.<\/li>\n<li>Kui p\u00e4rime k\u00e4itumise p\u00f5hiklassilt v\u00f5i \u00fclemklassilt, saame tasuta eelarendatud funktsioonid. See on objektorienteeritud programmeerimise puhul t\u00f5esti suurep\u00e4rane asi, sest see v\u00f5imaldab meil keskenduda konkreetselt programmeerimisloogikale, mida soovime rakendada.<\/li>\n<\/ul>\n<p>Kujutage hetkeks ette, et soovite arendada vidinat, kuid iga kord, kui seda teete, peate kirjutama k\u00f5ik funktsioonid konksudesse WordPressi, et kasutada k\u00f5iki samu korduvaid katlaplaadi funktsioone.<\/p>\n<p>Siin tulevad m\u00e4ngu p\u00e4rimine ja objektorienteeritud programmeerimine. Korduv kood lahutatakse baasklassiks, nii et see kirjutatakse ainult \u00fcks kord ja seej\u00e4rel j\u00e4etakse kood, millele tahame keskenduda, meie enda teha.<\/p>\n<p>K\u00f5ik \u00fclaltoodud on see, mida tuleks m\u00f5ista, kui lugeda seda algset p\u00e4\u00e4su WordPressi p\u00f5hilise objektorienteeritud API l\u00e4htekoodist.<\/p>\n<h2>Mis j\u00e4rgmiseks?<\/h2>\n<p>Selle seeria j\u00e4rgmises postituses vaatleme vidinate API objektorienteeritud olemust ja seda, milliseid asju peaksite koodi lugedes kohe tuvastama.<\/p>\n<p>Selle p\u00f5hjuseks on asjaolu, et teatud objektorienteeritud p\u00f5him\u00f5tteid on praktikas oluline \u00e4ra tunda ja see on hea viis hinnata, kas saate seda teha v\u00f5i mitte. Kui olete, siis suurep\u00e4rane! Siis aitab see j\u00e4tkuvalt seda lihast arendada. Kui ei, siis \u00e4rge muretsege \u2013 see aitab teil ikkagi seda lihast arendada.<\/p>\n<p>Ja see teenib teid h\u00e4sti, kui me j\u00e4tkame praktiliste vahenditega \u00fcha enam objektorienteeritud WordPressi arendamist.<\/p>\n<p>Vajalik teooria on l\u00e4bi k\u00e4idud. Nii et alustame selle tegelikku rakendamist.<\/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>WordPressi vidinate API aitab pakkuda kindlat lakmustesti ja n\u00e4idet selle kohta, kuidas WordPressis objektorienteeritud programmeerimist alustada.<\/p>\n","protected":false},"author":1,"featured_media":236133,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,802,863],"tags":[1165],"class_list":["post-230574","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230574","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=230574"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230574\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/236133"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}