{"id":228907,"date":"2022-11-02T11:13:00","date_gmt":"2022-11-02T08:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228907"},"modified":"2022-11-09T04:45:24","modified_gmt":"2022-11-09T01:45:24","slug":"ueksikud-wordpressis-uuesti-laebi-vaadatud-aeg-ja-koht","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/ueksikud-wordpressis-uuesti-laebi-vaadatud-aeg-ja-koht\/","title":{"rendered":"\u00dcksikud WordPressis, uuesti l\u00e4bi vaadatud (aeg ja koht?)"},"content":{"rendered":"\n<p>Enne kui alustan postitust, mis r\u00e4\u00e4gib \u00fcksiktoonide kasutamisest WordPressis (v\u00f5i \u00f5igemini <a href=\"https:\/\/tommcfarlin.com\/singleton-pattern-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Singleton Pattern<\/a> ), tahan kindlasti lugeda l\u00e4bi j\u00e4rgmised kaks artiklit:<\/p>\n<ul>\n<li><a href=\"http:\/\/wpkrauts.com\/2013\/cloning-in-php-or-why-your-singleton-might-kill-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Kloonimine PHP-s v\u00f5i miks teie \u00fcksikmees v\u00f5ib WordPressi tappa<\/a>, autor <a href=\"https:\/\/twitter.com\/toscho\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Thomas Scholz<\/a><\/li>\n<li><a href=\"https:\/\/carlalexander.ca\/singletons-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Singletonid ja nende kasutamine WordPressis<\/a> Carl <a href=\"https:\/\/twitter.com\/twigpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Alexander<\/a><\/li>\n<\/ul>\n<p>M\u00f5lemad artiklid pakuvad selle mustri ja selle kasutamise ohtude kohta tohutult v\u00e4\u00e4rtuslikku vaatenurka meie WordPressis t\u00f6\u00f6tades. aga kas see t\u00e4hendab, et peaksime neid t\u00e4ielikult v\u00e4ltima?<\/p>\n<p>Ma ei usu.<\/p>\n<p>Samas m\u00f5istan ka, et artiklites ei ole \u00f6eldud, et neid tuleks t\u00e4ielikult v\u00e4ltida. Nad annavad selgeid p\u00f5hjendusi nende kasutamiseks ja nende kasutamise ohtudest, kui otsustate seda teha.<\/p>\n<p>Ja kuigi ma olen neid kindlasti varem kasutanud, olen \u00fcldiselt l\u00f5petanud. Siiski leidsin hiljuti \u00fche projekti kasutusjuhtumi, mille puhul ma arvan, et see on vastuv\u00f5etav.<\/p>\n<h2>Kas kasutate endiselt WordPressis Singletone?<\/h2>\n<p>Et anda p\u00f5hjust, miks ma seda konkreetset mustrit \u00fcldse kaalun, arvan, et k\u00f5igepealt tasub m\u00f5ista kasutusjuhtu. Lihtsamalt \u00f6eldes:<\/p>\n<ul>\n<li>Seal on haldusleht, mis v\u00f5imaldab kasutajal valida, kuidas ta soovib saidi esik\u00fcljel kuup\u00e4evi kuvada.<\/li>\n<li>Kui kasutaja suvandi salvestab, kirjutab ta WordPressi tabelisse kuup\u00e4eva <a href=\"https:\/\/php.net\/manual\/en\/function.date.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP-p\u00f5hise vormingu.<\/a><\/li>\n<li>Kuup\u00e4eva renderdamisel hangitakse v\u00e4\u00e4rtus andmebaasist ja rakendatakse renderdatavale kuup\u00e4evale.<\/li>\n<\/ul>\n<p>Ja neile, kes on uudishimulikud, on ainult k\u00e4put\u00e4is \u2013 n\u00e4iteks neli v\u00f5i viis \u2013 viisi, kuidas me lubame kasutajal kuup\u00e4eva kuvada.<\/p>\n<p>Kuna see konkreetne projekt v\u00f5imaldab kasutajatel importida andmete CSV-sid (mis sisaldavad kuup\u00e4evi) ja v\u00f5imaldab neil CSV-dest andmeid renderdada, ehkki erinevas vormingus, tasub m\u00e4rkida, et taustal toimub \u00fcsna palju kuup\u00e4eva vormindamist.<\/p>\n<p>Loomulikult tekib k\u00fcsimus:<\/p>\n<p>Miks mitte lihtsalt vormindada kuup\u00e4ev, mil kasutaja oma CSV-faili impordib?<\/p>\n<p>Ja seda seet\u00f5ttu, et kasutaja v\u00f5ib p\u00e4rast CSV-faili importimist muuta kuup\u00e4eva renderdamise viisi.<\/p>\n<p>Sellega seoses on pistikprogrammis see t\u00e4iesti teine \u200b\u200bmehhanism, mis vastutab kasutaja sisendi andmebaasi valideerimise, puhastamise ja kirjutamise eest.<\/p>\n<p>Kui aga tuleb aeg hankida v\u00e4\u00e4rtusi andmebaasist, eriti kui tegemist on v\u00e4\u00e4rtuste lugemisega andmebaasi tabelist ja tehes seda mitmes punktis kogu rakenduses, siis kas poleks m\u00f5ttekas omada \u00fchte punkti mille v\u00e4\u00e4rtuse saab tuletada?<\/p>\n<p>K\u00f5rgetasemeline \u00fclevaade selle toimimisest.<\/p>\n<p>V\u00f5i poleks m\u00f5ttekas muuta rakenduses \u00fchte kohta, mis v\u00f5ib h\u00f5lpsasti kogu \u00fclej\u00e4\u00e4nud rakenduse kaskaadida, selle asemel et otsida k\u00f5iki v\u00f5imalikke kohti:<\/p>\n<ol>\n<li>valiku lugemine,<\/li>\n<li>veendudes, et see on seadistatud,<\/li>\n<li>vaikev\u00e4\u00e4rtuse m\u00e4\u00e4ramine, kui see pole m\u00e4\u00e4ratud,<\/li>\n<li>ja v\u00e4\u00e4rtuse tagastamine?<\/li>\n<\/ol>\n<p>Ja see on koht, kus ma n\u00e4en, et WordPressis hakkab m\u00e4ngu tulema \u00fcksikute s\u00f5nade \u00f5ige kasutamine: viis andmete lugemiseks rakenduse mitmes punktis. Sellel on siiski m\u00f5ned tagaj\u00e4rjed:<\/p>\n<ul>\n<li>klassi ei pea instantseerima rohkem kui \u00fcks kord (ma m\u00f5tlen, et see on kogu \u00fcksikisiku idee),<\/li>\n<li>see ei tegele muutuvate andmetega,<\/li>\n<li>see ei kirjuta teavet ega manipuleeri teabega.<\/li>\n<\/ul>\n<p>Teisis\u00f5nu vastutab ta ainuisikuliselt teabe hankimise ja tagastamise eest. See on k\u00f5ik. Mitte midagi muud.<\/p>\n<h3>Rakenduse n\u00e4ide<\/h3>\n<p>Kuidas see siis v\u00e4lja n\u00e4ha v\u00f5ib? Siin on vestluse jaoks <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e27db4b35ff6ed7fba3b506dccb8ad2d#file-00-date-formatter-singleton-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ligikaudne teostus<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Date_Formatter {\n\n    private static $instance;\n\n    private function __construct() {\n    }\n\n    private static function get_instance() {\n\n        if (null === self::$instance) {\n            self::$instance = new self;\n        }\n\n        return self::$instance;\n    }\n\n    public static function get() {\n\n        self::get_instance();\n\n        $default_format = 'm\/d\/Y';\n        $format = get_option( 'yhd_directory_importer', false );\n        if (false === $format) {\n            return $default_format;\n        }\n\n        $format = $format['date'];\n        $format = (isset( $format) &amp;&amp; isset( $format['format']) )? $format['format']: $default_format;\n\n        return $format;\n    }\n}\n<\/code><\/pre>\n<p>Nagu n\u00e4ete, t\u00e4idab see k\u00f5ik \u00fclaltoodud punktid. See t\u00e4hendab, et see loeb andmeid, m\u00e4\u00e4rab vaikev\u00e4\u00e4rtuse ja tagastab selle.<\/p>\n<p>See klass ei tee muud, kui loeb ja tagastab v\u00e4ga spetsiifilise andmekogumi.<\/p>\n<h3>Hoiatus vahem\u00e4llu salvestamise kohta<\/h3>\n<p>Ilmselgelt, kuna see klass loeb andmeid andmebaasist, saab selle vahem\u00e4llu salvestada \u2013 ja v\u00f5ib-olla peaks see olema. Selle postituse m\u00f5te ei ole aga sattuda m\u00f6\u00f6duvatesse s\u00fcndmustesse, aegumistesse ja k\u00f5igi nende n\u00fcansside l\u00e4bi t\u00f6\u00f6tamisse.<\/p>\n<p>Selle asemel on vaja hinnata, kas see on WordPressis \u00fcksiku elemendi juurutamiseks sobiv kasutusjuht v\u00f5i mitte.<\/p>\n<h2>Oota, see ei pea nii olema!<\/h2>\n<p>Ma tean, ma tean. <a href=\"https:\/\/www.youtube.com\/watch?v=yeEp7BA2mLg\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ps\u00fchh<\/a>! Usun, et see on \u00f5ige terminoloogia, kuid j\u00e4tkem see professionaalseks.<\/p>\n<p>Kuni selle hetkeni r\u00e4\u00e4kis kogu postitus sellest, miks v\u00f5iksite uurida \u00fcksiktoonide kasutamist WordPressis, et saaksite h\u00f5lpsasti teavet hankida, kasutades j\u00e4rjekindlalt objektorienteeritud p\u00f5him\u00f5tteid.<\/p>\n<p>Kuid ma siiski ei arva, et siinkohal oleks vaja WordPressis \u00fcksikut kasutada. V\u00e4hemalt arvan, et staatiline funktsioon sobib h\u00e4sti. Ja ainus p\u00f5hjus, miks ma arvan, et see on okei, on see, et klassi eksemplari loomine iga kord, kui vajate juurdep\u00e4\u00e4su funktsioonile, mis hangib andmeid, mis klassi sees ei muutu, on liigne.<\/p>\n<p>Kuidas see siis <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e27db4b35ff6ed7fba3b506dccb8ad2d#file-00-date-formatter-refactored-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4lja n\u00e4eb<\/a>? <\/p>\n<pre><code>&lt;?php\n\nclass Date_Formatter {\n\n    public static function get() {\n\n        $default_format = 'm\/d\/Y';\n\n        $format = get_option( 'yhd_directory_importer', false );\n        if (false === $format) {\n            return $default_format;\n        }\n\n        $format = $format['date'];\n        $format = (isset( $format) &amp;&amp; isset( $format['format']) )? $format['format']: $default_format;\n\n        return $format;\n    }\n}\n<\/code><\/pre>\n<p>Ja see on minu arvates parem lahendus kui suvalise kujundusmustri rakendamine, kui seda pole \u00fcldse vaja.<\/p>\n<p>Kuid ma olen valmis veenduma vastupidises.<\/p>\n<h2>Kogenumate arendajate m\u00f5tted?<\/h2>\n<p>Olen kuulnud kaass\u00f5bralt ja eakaaslaselt, et lihtsalt nimeruumi funktsiooni kasutamine v\u00f5ib isegi olla \u00f5ige tee. On selge, et selle probleemi lahendamiseks on erinevaid viise.<\/p>\n<p>Sellega seoses on mul huvi kuulda teistelt, kuidas saaksite seda veelgi enam \u00fcmber kujundada. Ma ei muretse nii palju\u00a0 funktsiooni <strong>hankimise<\/strong> p\u00e4rast, kuna see on peamiselt demo jaoks kokku pandud.<\/p>\n<p>Selle asemel huvitab mind viise, kuidas sellega toime tulla v\u00e4ljaspool siin esitatut. V\u00f5i \u00f5igemini lihtsalt teie ettekujutus sellest, mida n\u00e4ete.<\/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>V\u00f5ib-olla soovite andmete h\u00f5lpsaks lugemiseks rakendada WordPressis \u00fcksiktoone. See ei pea siiski nii olema.a<\/p>\n","protected":false},"author":1,"featured_media":221011,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,863],"tags":[1165],"class_list":["post-228907","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228907","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=228907"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228907\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/221011"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}