{"id":230319,"date":"2022-11-23T13:23:00","date_gmt":"2022-11-23T10:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230319"},"modified":"2022-11-09T21:07:26","modified_gmt":"2022-11-09T18:07:26","slug":"malli-ja-ehdollinen-logiikka-oop-lla-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/malli-ja-ehdollinen-logiikka-oop-lla-wordpressissae\/","title":{"rendered":"Malli ja ehdollinen logiikka OOP:lla WordPressiss\u00e4"},"content":{"rendered":"\n<p>Mallisto on yleistym\u00e4ss\u00e4 WordPressiss\u00e4, ja se on mielest\u00e4ni hyv\u00e4 asia.<\/p>\n<p>Mutta se ei tarkoita, etteik\u00f6 olisi hallinnoimiamme projekteja, joissa k\u00e4ytet\u00e4\u00e4n perinteisemp\u00e4\u00e4 mallien tai osioiden n\u00e4ytt\u00e4mist\u00e4. Lis\u00e4ksi se ei my\u00f6sk\u00e4\u00e4n tarkoita, ett\u00e4 olemme vapautettuja yll\u00e4pit\u00e4m\u00e4st\u00e4 koodipohjaa, joka k\u00e4ytt\u00e4\u00e4 koodia, joka ei k\u00e4yt\u00e4 mallimoottoria.<\/p>\n<p>Vaikka mallintaminen on mielest\u00e4ni hyv\u00e4 asia, en usko, ett\u00e4 se on aina tarpeen. Se on kuitenkin sis\u00e4lt\u00f6\u00e4 toiseen postaukseen.<\/p>\n<p>Sen sijaan haluan k\u00e4yd\u00e4 l\u00e4pi prosessin, jossa k\u00e4ytet\u00e4\u00e4n ehdollista logiikkaa sen m\u00e4\u00e4ritt\u00e4miseksi, n\u00e4ytet\u00e4\u00e4nk\u00f6 mallissa osittainen vai ei, ja tehd\u00e4 se olioohjelmoinnin avulla.<\/p>\n<h2>Malli ja ehdollinen logiikka OOP:lla<\/h2>\n<p>T\u00e4t\u00e4 varten oletetaan seuraavaa:<\/p>\n<ol>\n<li>Meill\u00e4 on yksi laajennus, joka on riippuvainen toisesta ominaisuudesta.<\/li>\n<li>Toinen laajennus on valinnainen.<\/li>\n<li>Jos sit\u00e4 ei ole, n\u00e4yt\u00e4mme ilmoituksen. Jos se on olemassa, n\u00e4yt\u00e4mme osittaisen.<\/li>\n<\/ol>\n<p>Tarpeeksi suoraan eteenp\u00e4in, eik\u00f6?<\/p>\n<p>Ainoa huomioitava asia on, ett\u00e4 kaikki t\u00e4m\u00e4 logiikka s\u00e4ilytet\u00e4\u00e4n ensisijaisessa laajennuksessa (eli siin\u00e4, joka tarkistaa toisen laajennuksen olemassaolon).<\/p>\n<h3>1 Mallin ehdollinen logiikka<\/h3>\n<p>Ensimm\u00e4inen asia, joka on teht\u00e4v\u00e4, on toiminto, joka tarkistaa toissijaisen laajennuksen olemassaolon. Syy t\u00e4h\u00e4n on, koska malli n\u00e4ytt\u00e4\u00e4 jotain <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-00-template-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4:<\/a><\/strong><\/p>\n<pre><code>&lt;div class=\"wrap\"&gt;\n    &lt;!-- Snipping out irrelevant code in this file --&gt;\n    &lt;form id=\"yhd-upload-new-item-settings\"&gt;\n        &lt;?php if (!$this-&gt;hasSecondaryPlugin()) { ?&gt;\n            &lt;?php include_once 'partials\/error-inactive-plugin.php'; ?&gt;\n        &lt;?php } else { ?&gt;\n            &lt;h2&gt;Secondary Plugin Settings&lt;\/h2&gt;\n            &lt;p class=\"description\"&gt;The Secondary Plugin is installed and active.&lt;\/p&gt;\n            &lt;form method=\"post\" action=\"&lt;?php echo esc_html(admin_url('admin-post.php')); ?&gt;\"&gt;\n                &lt;label for=\"acme-secondary-plugin\"&gt;\n                    &lt;input type=\"checkbox\" name=\"acme-secondary-plugin\" value=\"true\"\/&gt;\n                    Would you like to automatically use the secondary plugin?\n                &lt;\/label&gt;\n                &lt;!-- Snipping out irrelevant code in this file --&gt;\n            &lt;\/form&gt;\n        &lt;?php } ?&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Ja sitten osa voi n\u00e4ytt\u00e4\u00e4 suunnilleen <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-01-error-inactive-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a><\/strong> (se riippuu toteutuksestasi):<\/p>\n<pre><code>&lt;?php\n\/**\n * This is the partial displayed when the Secondary Plugin is not active.\n *\/\n?&gt;\n&lt;div id=\"inactive-importer-message\" class=\"error notice is-dismissible\"&gt;\n    &lt;p&gt;[The message you want to display here.]&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;&lt;!-- #inactive-importer-message --&gt;<\/code><\/pre>\n<p>Koska mallit sis\u00e4ltyv\u00e4t WordPressiin, funktio el\u00e4\u00e4 luokassa ja luokka tarkistaa laajennuksen olemassaolon.<\/p>\n<p>Jos k\u00e4yt\u00e4t mit\u00e4 tahansa koodin haistajaa, se todenn\u00e4k\u00f6isesti laukaisee varoituksen, ett\u00e4 menetelm\u00e4\u00e4 ei k\u00e4ytet\u00e4, mutta menetelm\u00e4\u00e4 k\u00e4ytet\u00e4\u00e4n, sit\u00e4 k\u00e4ytet\u00e4\u00e4n vain mallitiedostossa. Huomautus luokassa. Kaiken kaikkiaan jotkut haistajistamme eiv\u00e4t ole niin \u00e4lykk\u00e4it\u00e4. Viel\u00e4.<\/p>\n<h3>2 Pluginin palvelinpuolen koodi<\/h3>\n<p>Kun sinulla on yleinen k\u00e4sitys siit\u00e4, miten se tulee toimimaan, on aika kirjoittaa koodi luokassasi.<\/p>\n<p>Muista, ett\u00e4 t\u00e4m\u00e4 on yksinkertainen toiminto: Sen tarvitsee vain tarkistaa laajennuksen olemassaolo. Voit tehd\u00e4 t\u00e4m\u00e4n useilla tavoilla, mutta yleisin saattaa olla <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/is_plugin_active\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">is_active_plugin<\/a><\/strong> API-funktion k\u00e4ytt\u00f6.<\/p>\n<p>Huomaa, ett\u00e4 kun k\u00e4yt\u00e4t t\u00e4t\u00e4 toimintoa, se perustuu ajatukseen, ett\u00e4 tied\u00e4t k\u00e4ytt\u00e4m\u00e4si laajennuksen nimen. Jos ei, on muita tapoja, mutta se ei kuulu t\u00e4m\u00e4n viestin piiriin.<\/p>\n<p>Joka tapauksessa, joten koska logiikka on ehdollinen, sen on palautettava looginen arvo, ja juuri sen yll\u00e4 oleva API-toiminto tekee. Joten palvelinpuolen toiminto voi n\u00e4ytt\u00e4\u00e4 suunnilleen <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-02-hassecondaryplugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Determines if the Secondary Importer is is activated.\n *\n * @return bool True if the the pklugin is active; false, otherwise.\n *\/\nprivate function hasSecondaryPlugin()\n{\n    return in_array(\n        'secondary-plugin\/secondary-plugin.php',\n        get_option('active_plugins')\n    );\n}\n<\/code><\/pre>\n<p>Ja koska mallikoodi kutsuu t\u00e4t\u00e4 funktiota (jonka n\u00e4et yll\u00e4), se m\u00e4\u00e4ritt\u00e4\u00e4, onko sen n\u00e4ytett\u00e4v\u00e4 osittainen vai ei.<\/p>\n<h2>Tarpeeksi helppoa<\/h2>\n<p>Joillekin t\u00e4m\u00e4 on todella yksinkertaista tavaraa; toisille se on t\u00e4ysin erilainen l\u00e4hestymistapa, koska se k\u00e4sittelee huolenaiheiden suurempaa eriytt\u00e4mist\u00e4.<\/p>\n<p>Ja kun jatkan ty\u00f6skentely\u00e4 <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">OOP Fundamentalsin<\/a><\/strong> l\u00e4pi sivuston j\u00e4senten kanssa, mielest\u00e4ni on t\u00e4rke\u00e4\u00e4 jakaa my\u00f6s joitain parempia k\u00e4yt\u00e4nt\u00f6j\u00e4 niiden kanssa, jotka eiv\u00e4t ehk\u00e4 ole j\u00e4seni\u00e4, mutta haluavat kirjoittaa j\u00e4rjestelm\u00e4llisemp\u00e4\u00e4 koodia.<\/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>K\u00e4yt\u00e4 olio-ohjelmointia ja ehdollista logiikkaa erottaaksesi huolenaiheet osioiden, mallien ja palvelinpuolen koodin v\u00e4lill\u00e4.<\/p>\n","protected":false},"author":1,"featured_media":164710,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,843,864],"tags":[1166],"class_list":["post-230319","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230319"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230319\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/164710"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}