{"id":231387,"date":"2022-12-19T10:58:00","date_gmt":"2022-12-19T07:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231387"},"modified":"2022-12-07T10:03:06","modified_gmt":"2022-12-07T07:03:06","slug":"wordpress-widgetit-refaktorointi-osa-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-refaktorointi-osa-9\/","title":{"rendered":"WordPress-widgetit: Refaktorointi, osa 9"},"content":{"rendered":"\n<p>Vaikka t\u00e4m\u00e4n refaktorointisarjan viimeinen postaus ei ollut uskomattoman pitk\u00e4, se oli mielest\u00e4ni hieman tiivis. Toisin sanoen se vaati melkoisen m\u00e4\u00e4r\u00e4n ty\u00f6t\u00e4 koodin saamiseen paikkaan, jossa voimme ty\u00f6skennell\u00e4 sen kanssa helpommin.<\/p>\n<p>Mutta siin\u00e4 se vain: kaiken tekem\u00e4mme ty\u00f6n pit\u00e4isi helpottaa kirjoitettavan muun koodin siirtymist\u00e4 eteenp\u00e4in.<\/p>\n<p>Ja varmistaaksemme, ett\u00e4 hy\u00f6dynn\u00e4mme t\u00e4h\u00e4n menness\u00e4 luomaamme ty\u00f6t\u00e4 ja perustaa, t\u00e4ydenn\u00e4mme sarjaa lyhyemmill\u00e4, keskittyneemmill\u00e4 artikkeleilla, joiden lukemiseen ja toteuttamiseen tulisi kulua v\u00e4hemm\u00e4n aikaa., ja ymm\u00e4rr\u00e4mme, mit\u00e4 teemme koodilla.<\/p>\n<h2>WordPress Widget Boilerplate: Refactoring osa 9<\/h2>\n<p>Muista viime postauksesta:<\/p>\n<blockquote>\n<p>Seuraavaksi jatkamme widgetin hallinnollisen alueen toiminnallisuuden rakentamista. T\u00e4m\u00e4n j\u00e4lkeen kiinnit\u00e4mme huomiomme widgetin julkiseen puoleen sek\u00e4 serialisointitoimintoihin.<\/p>\n<\/blockquote>\n<p>Ja t\u00e4m\u00e4 asettaa meid\u00e4t tarkalleen mihin olemme menossa t\u00e4ss\u00e4 postauksessa. Aiomme nimitt\u00e4in kirjoittaa hallinnollisen k\u00e4ytt\u00f6liittym\u00e4n, jonka avulla voimme:<\/p>\n<ul>\n<li>m\u00e4\u00e4rit\u00e4 widgetille otsikko,<\/li>\n<li>m\u00e4\u00e4ritt\u00e4\u00e4 widgetin tekstisis\u00e4lt\u00f6\u00e4,<\/li>\n<li>ja vaihda, haluammeko n\u00e4ytt\u00e4\u00e4 otsikon vai emme.<\/li>\n<\/ul>\n<p>Sen ei ole tarkoitus olla innovatiivinen eik\u00e4 se ole sellainen widget, jota kukaan muu saattaa haluta myyd\u00e4. Sen sijaan sen tarkoitus on n\u00e4ytt\u00e4\u00e4, kuinka voimme hy\u00f6dynt\u00e4\u00e4 sit\u00e4, mit\u00e4 meill\u00e4 on, luodaksemme jotain samanlaista kuin olemme jo n\u00e4hneet WordPressiss\u00e4 ja kuinka k\u00e4yt\u00e4mme vankkoja ohjelmointik\u00e4yt\u00e4nt\u00f6j\u00e4.<\/p>\n<h3>K\u00e4ytt\u00f6liittym\u00e4: Ensimm\u00e4inen passi<\/h3>\n<p>Edellisen ty\u00f6mme j\u00e4lkeen meill\u00e4 on widget, joka n\u00e4kyy WordPressin hallintoalueella ja sen voi jopa siirt\u00e4\u00e4 sivupalkkiin tai muulle widgetoidulle alueelle; se ei kuitenkaan tee mit\u00e4\u00e4n.<\/p>\n<p>Toistaiseksi menn\u00e4\u00e4n eteenp\u00e4in ja lis\u00e4t\u00e4\u00e4n k\u00e4ytt\u00f6liittym\u00e4\u00e4n kolme elementti\u00e4:<\/p>\n<ol>\n<li>lis\u00e4\u00e4 tekstisy\u00f6tt\u00f6 widgetin otsikoksi,<\/li>\n<li>sis\u00e4lt\u00e4\u00e4 tekstialueelementin, joka n\u00e4ytt\u00e4\u00e4, mik\u00e4 saattaa olla tekstikappale,<\/li>\n<li>ja lopuksi lis\u00e4\u00e4 valintaruutu vaihtaaksesi otsikkotietoja.<\/li>\n<\/ol>\n<p>T\u00e4t\u00e4 varten meid\u00e4n on muokattava <strong>Views<\/strong> &#8211; hakemistossa olevaa tiedostoa. Aiomme nimitt\u00e4in p\u00e4ivitt\u00e4\u00e4 <strong>Admin.php-<\/strong> tiedoston. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Aloitamme elementeist\u00e4<\/a> t\u00e4sm\u00e4lleen tarpeen mukaan ilman ylim\u00e4\u00e4r\u00e4isi\u00e4 merkint\u00f6j\u00e4.<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Se ei tee viel\u00e4 paljoa katsottavaa etup\u00e4\u00e4ss\u00e4, mutta se vie meid\u00e4t l\u00e4hemm\u00e4s haluamaamme paikkaa.<\/p>\n<h3>Luokka j\u00e4rjestelm\u00e4nvalvojille<\/h3>\n<p>Seuraavaksi haluamme varmistaa, ett\u00e4 pysymme johdonmukaisesti korkean tason yhteenkuuluvuuden yll\u00e4pit\u00e4misess\u00e4 luokkiemme kanssa. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 emme tarvitse yht\u00e4 luokkaa tekem\u00e4\u00e4n kaikkea hallintaan, n\u00e4ytt\u00e4miseen ja muihin WordPress API:n vaatimiin t\u00f6ihin.<\/p>\n<p>T\u00e4t\u00e4 varten luomme <strong>WordPress<\/strong> &#8211; hakemistoon ja nimiavaruuteen toisen luokan nimelt\u00e4 <strong>WidgetAdmin .<\/strong><\/p>\n<p>T\u00e4h\u00e4n tiedostoon sis\u00e4llyt\u00e4mme <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavan koodin<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of WordPress Widget Boilerplate\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\n\/**\n * Manages the administrative functionality of the widget.\n *\/\nclass WidgetAdmin extends Widget\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct($widgetSlug)\n    {\n        parent::__construct($widgetSlug);\n    }\n\n    \/**\n     * Displays the administrative view of the form and includes the options\n     * for the instance of the widget as arguments passed into the function.\n     *\n     * @param array $instance the options for the instance of this widget.\n     *\/\n    public function form($instance)\n    {\n        include plugin_dir_path(__FILE__).'Views\/Admin.php';\n    }\n}\n<\/code><\/pre>\n<p>Sitten alkuper\u00e4isess\u00e4 widgetin luomiskoodissa <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">muutamme t\u00e4m\u00e4n rivin<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new Widget('widget-name'));\n}<\/code><\/pre>\n<p>N\u00e4ytt\u00e4\u00e4ksesi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new WidgetAdmin('widget-name'));\n}<\/code><\/pre>\n<p>Muutaman seuraavan artikkelin aikana t\u00e4m\u00e4 kehittyy edelleen, mutta kuten n\u00e4et, varmistamme, ett\u00e4 meill\u00e4 on yksi perustoimintoluokka WordPressin kanssa keskustelua varten ja luokka erityisesti hallinnollisen lomakkeen render\u00f6inti\u00e4 varten.<\/p>\n<h3>K\u00e4ytt\u00f6liittym\u00e4: Toinen passi<\/h3>\n<p>Lopuksi siivotaan lomake niin, ett\u00e4 siin\u00e4 on hieman enemm\u00e4n kiinte\u00e4\u00e4 k\u00e4ytt\u00f6kokemusta, joka sulautuu hyvin WordPressin hallintoalueeseen kokonaisuudessaan.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ota seuraava koodi<\/a> :<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Ja p\u00e4ivit\u00e4 se niin, ett\u00e4 se n\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;div class=\"widget-content\"&gt;\n    &lt;p&gt;\n        &lt;input\n            type=\"text\"\n            name=\"widget-title\"\n            value=\"\"\n            placeholder=\"Widget Title\"\n            class=\"widefat\"\n        \/&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;textarea\n            name=\"widget-content\"\n            placeholder=\"Widget Content\"\n            style=\"width:100%;\"&gt;&lt;\/textarea&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;input\n            type=\"checkbox\"\n            value=\"1\"\n            name=\"widget-title-enabled\"\n            class=\"checkbox\"\n        \/&gt;\n        &lt;label for=\"widget-title-enabled\"&gt;Display Title?&lt;\/label&gt;\n    &lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- .widget-content --&gt;<\/code><\/pre>\n<p>Olettaen, ett\u00e4 kaikki meni hyvin, sinun pit\u00e4isi nyt n\u00e4hd\u00e4 jotain, joka n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.png\" alt=\"WordPress-widgetit: Refaktorointi, osa 9\" ><\/a><\/p>\n<p>Ja siihen aiomme lopettaa t\u00e4m\u00e4n viestin hallinnolliset ominaisuudet. Muista, ett\u00e4 voit seurata kaikkea t\u00e4t\u00e4 my\u00f6s GitHubin kehityshaarassa.<\/p>\n<h2>Desinfiointi ja sarjoittaminen<\/h2>\n<p>Seuraavassa viestiss\u00e4 tarkastelemme, mit\u00e4 tarvitaan widgetimme sis\u00e4ll\u00f6n puhdistamiseen ja sarjoittamiseen (tai puhdistamiseen ja tallentamiseen).<\/p>\n<p>Varmistamme my\u00f6s, ett\u00e4 n\u00e4yt\u00e4mme tiedot hallintoalueella, kun tiedot on tallennettu ja haettu.<\/p>\n<p>Lopuksi, perinn\u00f6llisyys ja luokan yhteenkuuluvuus kehittyv\u00e4t edelleen, mutta keskity toistaiseksi t\u00e4h\u00e4n viestiin, ja jatkamme sitten seuraavassa artikkelissa.<\/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>Haluamme varmistaa, ett\u00e4 pysymme johdonmukaisesti korkean tason koheesion yll\u00e4pit\u00e4misess\u00e4 WordPress-widgetien hallinnasta alkaen.<\/p>\n","protected":false},"author":1,"featured_media":234899,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,803],"tags":[1166],"class_list":["post-231387","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231387","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=231387"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231387\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}