{"id":229725,"date":"2022-11-23T16:10:00","date_gmt":"2022-11-23T13:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229725"},"modified":"2022-11-09T16:06:47","modified_gmt":"2022-11-09T13:06:47","slug":"klasside-mallide-ja-osadega-toeoetamine-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/klasside-mallide-ja-osadega-toeoetamine-wordpressis\/","title":{"rendered":"Klasside, mallide ja osadega t\u00f6\u00f6tamine WordPressis"},"content":{"rendered":"\n<p>Kui ma seda postitust alustama istusin, plaanisin kirjutada midagi palju kaasahaaravamat, kui seda, mida ma jagan. Esialgu tahtsin l\u00e4bi k\u00e4ia \u00fche kahest asjast:<\/p>\n<ul>\n<li>Arenduskeskkonna seadistamise t\u00e4ielik juhend,<\/li>\n<li>Koodikvaliteedi t\u00f6\u00f6riistade integreerimine PhpStormi<\/li>\n<\/ul>\n<p>Esimene oleks keskendumine paljudele muudele asjadele, millest olen r\u00e4\u00e4kinud, siduda need k\u00f5ik kokku ja omada l\u00f5plikku viidet. Kuid see on midagi, mille kokkupanekuks tahan aega v\u00f5tta, et veenduda, et see on \u00f5igesti tehtud.<\/p>\n<p>Teine on minu arvates oluline, kuid olen m\u00f5ne oma t\u00f6\u00f6riistaga \u00fcleminekufaasis. Kuni see pole tehtud, ma pigem ei kirjuta sellest.<\/p>\n<p>Siiski on alati midagi katta, eks? Nii et t\u00e4na valisin midagi lihtsamat: klasside, mallide ja osade kasutamise jaotamine WordPressi pistikprogrammides lihtsa n\u00e4ite abil.<\/p>\n<h2>Klassid, mallid ja osad WordPressis<\/h2>\n<p>Selle konkreetse teema puhul v\u00f5ib kohe p\u00e4he tulla lihtne k\u00fcsimus: miks sellest r\u00e4\u00e4kida?<\/p>\n<p>Kuna on aasta 2018 ja me n\u00e4eme endiselt \u00fches failis PHP, CSS-i, m\u00e4rgistuse ja JavaScripti j\u00e4medat segu. See ei puuduta teisi tehnoloogiaid, mis seda vaikimisi teevad (nt React). Ma r\u00e4\u00e4gin konkreetselt WordPressi pistikprogrammidest ja hooldatava koodi kirjutamisest nii, et seda oleks [ilmselt] lihtne hooldada, kirjutada ja lugeda.<\/p>\n<h3>Praktiline n\u00e4ide<\/h3>\n<p>Oletame, et t\u00f6\u00f6tate alammen\u00fc\u00fc lehel millegi jaoks, mis kuvatakse kohandatud men\u00fc\u00fc all. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f72e1444fb01cff19de2c58f0aacab34#file-00-addmenupage-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Registreerite oma lehe<\/a> WordPressi API abil:<\/p>\n<pre><code>&lt;?php\n\npublic function addMenuPage()\n{\n    add_menu_page(\n      'Acme Menu',\n      'Acme Menu',\n      'manage_options',\n      'acme-custom-menu',\n      array($this, 'display'),\n      'dashicons-dashboard',\n      30\n    );\n\n    add_submenu_page(\n      'acme-custom-menu',\n      'Acme Menu',\n      'Acme Menu',\n      'Acme Menu',\n      'acme-custom-menu',\n      array($this, 'display')\n    );\n}\n<\/code><\/pre>\n<p>Kuid kui seadistate lehe kuvamiseks tagasihelistamise funktsiooni, <strong>ei<\/strong> kasuta te seda funktsiooni erinevate keelte segamiseks. Selle asemel kasutate seda <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f72e1444fb01cff19de2c58f0aacab34#file-01-display-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">faili kaasamiseks.<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\npublic function display()\n{\n    include_once $this-&gt;pluginPath. 'views\/acme-settings.php';\n}\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et \u00fclaltoodud failis viitan atribuudile <strong>$this-&gt;pluginPath<\/strong>. See on seatud klassi konstruktoris, et saaksin h\u00f5lpsasti juurde p\u00e4\u00e4seda pistikprogrammi juurtele.<\/p>\n<p>Igatahes, milline see fail v\u00e4lja n\u00e4eb?<\/p>\n<h3>Mall ja osaline<\/h3>\n<p>Sel juhul eeldan, et teie mall on see, mis annab kasutajale teavet ja taotleb nende sisestust. Osaline vastutab kasutajale edu-, vea- v\u00f5i hoiatusteate kuvamise eest.<\/p>\n<h4>Mall<\/h4>\n<p>Lihtsuse huvides hoian nii malli kui ka osa v\u00f5imalikult lahjana. Sel juhul oletame, et renderdame lehe, palume kasutajal v\u00e4\u00e4rtus salvestada ja kui v\u00e4\u00e4rtus \u00f5nnestub salvestada (ja on seega tabelis <strong>wp_options<\/strong> olemas ), kuvame \u00f5nnestumisteate.<\/p>\n<p>See t\u00e4hendab:<\/p>\n<ul>\n<li>mall kuvab lehe pealkirja, teabe, sisendi ja salvestamisnupu,<\/li>\n<li>osaline kuvab vajadusel eduteate.<\/li>\n<\/ul>\n<p>Vaadake <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f72e1444fb01cff19de2c58f0aacab34#file-02-acme-settings-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">alloleva malli koodi:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\/**\n * Renders the settings page for the plugin.\n *\/\n?&gt;\n&lt;div class=\"wrap\"&gt;\n    &lt;h1 class=\"wp-heading-inline\"&gt;&lt;?php echo get_admin_page_title(); ?&gt;&lt;\/h1&gt;\n    &lt;?php if ($this-&gt;showSuccessMessage()) { ?&gt;\n      &lt;?php include_once 'partials\/settings-saved.php'; ?&gt;\n    ?&gt;\n    &lt;div id=\"acme-settings-schedule\"&gt;\n        &lt;form id=\"acme-form\" method=\"post\" action=\"&lt;?php echo esc_html(admin_url('admin-post.php')); ?&gt;\"\"&gt;\n            &lt;!-- This is where your settings go. --&gt;\n            &lt;p&gt;\n                &lt;?php\n                submit_button(\n                    'Save',\n                    'primary',\n                    'acme-save-settings',\n                    false\n                );\n                wp_nonce_field(\n                    'acme-save',\n                    'acme-save-nonce'\n                );\n                ?&gt;\n            &lt;\/p&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et jah, sellel on sisend, salvestamisnupp ja mitte midagi, mis k\u00f5ik on teabe salvestamiseks olulised (kuid v\u00e4ljaspool selle postituse ulatust).<\/p>\n<p>Kuid pange t\u00e4hele ka seda, et sellel on abifunktsioon, mida kasutan edukalt salvestatud teabe olemasolu kontrollimiseks. See funktsioon asub samas klassis, mis vastutab malli renderdamise eest.<\/p>\n<h4>Osaline<\/h4>\n<p>See n\u00e4eb v\u00e4lja umbes <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f72e1444fb01cff19de2c58f0aacab34#file-03-showsuccessmessage-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\npublic function showSuccessMessage()\n{\n  return (false !== get_option('acme_custom_setting'));\n}\n<\/code><\/pre>\n<p>Ja saadud osa on <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f72e1444fb01cff19de2c58f0aacab34#file-04-settings-saved-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4ga lihtne:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\/**\n * Renders the success message if the option has been properly saved.\n *\/\n?&gt;\n\n&lt;div class=\"notice-success notice is-dismissible\"&gt;\n    &lt;p&gt;Your settings have been successfully saved.&lt;\/p&gt;\n    &lt;button type=\"button\" class=\"notice-dismiss\"&gt;\n        &lt;span class=\"screen-reader-text\"&gt;Dismiss this notice.&lt;\/span&gt;\n    &lt;\/button&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Muidugi v\u00f5ib teie funktsiooni rakendamine erineda. Eesm\u00e4rk ei ole niiv\u00f5rd n\u00e4idata, kuidas funktsiooni rakendada, vaid kuidas kasutada funktsiooni teabe kontrollimiseks osalise kuvamiseks.<\/p>\n<h2>Seal on rohkem (aga mitte siin)<\/h2>\n<p>V\u00f5ib-olla tuleks see panna artikli algusesse.<\/p>\n<p>Kui aus olla, siis ma arvan, et see on \u00fcks neist asjadest, mille puhul m\u00f5nel v\u00f5ib olla kasulikum seda algusest peale n\u00e4ha (aga siis puudub koodi kontekst) ja teiste jaoks on see l\u00f5pus kasulikum, sest nad n\u00e4evad, kuidas see k\u00f5ik sobib. koos.<\/p>\n<p>Sellest hoolimata loodan, et see annab l\u00f5puks selguse, kuidas see k\u00f5ik kokku sobib.<\/p>\n<p>Lisaks on kohtades palju ruumi asjade kohandamiseks, n\u00e4iteks:<\/p>\n<ul>\n<li>kontrollides, kas kasutajal on salvestamise luba,<\/li>\n<li>mitte-v\u00e4\u00e4rtuse kontrollimine,<\/li>\n<li>andmete desinfitseerimine ja kinnitamine,<\/li>\n<li>m\u00e4\u00e4rake kindlaks, mis on edu, hoiatused ja vead.<\/li>\n<\/ul>\n<p>Aga kui ma tahan k\u00f5ike eelnevat k\u00e4sitleda, siis vaatame erakordselt pikka postitust v\u00f5i pikka postituste seeriat. Ma ei ole selle vastu, kuid see on ka midagi, mida ma praegu ei tee, on praegu pingutust v\u00e4\u00e4rt.<\/p>\n<p>\u00c4rge kunagi k\u00f5helge tagasiside andmisest. Seniks aga loodan, et see k\u00f5ik annab teile aluse, millele j\u00e4rgmise projekti kallal t\u00f6\u00f6tades ehitada.<\/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>Selles postituses jagan lihtsa n\u00e4ite abil klasside, mallide ja osade kasutamise WordPressi pistikprogrammides.<\/p>\n","protected":false},"author":1,"featured_media":164763,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,842,802,863],"tags":[1165],"class_list":["post-229725","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-opetused","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229725","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=229725"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229725\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/164763"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}