{"id":229822,"date":"2022-11-11T10:43:00","date_gmt":"2022-11-11T07:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229822"},"modified":"2022-11-09T16:31:25","modified_gmt":"2022-11-09T13:31:25","slug":"saeveltaejae-wordpressille-osa-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/saeveltaejae-wordpressille-osa-1\/","title":{"rendered":"S\u00e4velt\u00e4j\u00e4 WordPressille, osa 1"},"content":{"rendered":"\n<p>Okei, kun olet k\u00e4ynyt l\u00e4pi kaikki erilaiset kirjastot, jotka voivat auttaa parantamaan ty\u00f6si koodin laatua, her\u00e4tt\u00e4\u00e4 silti kysymyksen:<\/p>\n<p>Miten saamme n\u00e4m\u00e4 projektit toimimaan koodipohjaamme vastaan?<\/p>\n<p>Lyhyesti sanottuna se vaatii <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e4velt\u00e4j\u00e4n<\/a>. Jos et ole koskaan k\u00e4ytt\u00e4nyt sit\u00e4, olen <a href=\"https:\/\/tommcfarlin.com\/setting-php-and-composer-in-mamp\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kirjoittanut siit\u00e4 lyhyesti<\/a> aiemmin, mutta aion tarjota perusasiat siit\u00e4, mit\u00e4 tarvitset, jotta voit aloittaa sen k\u00e4yt\u00f6n ja edell\u00e4 mainitut kirjastot ty\u00f6ss\u00e4si.<\/p>\n<p>Sek\u00e4 t\u00e4ss\u00e4 ett\u00e4 seuraavassa viestiss\u00e4 kerron, kuinka kaikki m\u00e4\u00e4ritet\u00e4\u00e4n paikallisesti alkeellisimmassa muodossa ja kuinka se sitten integroituu Gitiin, jotta voit alkaa k\u00e4ytt\u00e4\u00e4 sit\u00e4 jokap\u00e4iv\u00e4isess\u00e4 el\u00e4m\u00e4ss\u00e4si.<\/p>\n<h2>Composerin m\u00e4\u00e4ritt\u00e4minen WordPressille<\/h2>\n<p>Siell\u00e4 on paljon tietoa, joka voi (ja v\u00e4itt\u00e4isin, ett\u00e4 pit\u00e4isi menn\u00e4 Composer-tiedostoon). T\u00e4m\u00e4 sis\u00e4lt\u00e4\u00e4 asioita, kuten tekij\u00e4n tiedot, PSR, tiedot jne. Mutta se ei todellakaan kuulu t\u00e4m\u00e4n viestin soveltamisalaan. Sen sijaan haluan jakaa v\u00e4himm\u00e4isvaatimukset n\u00e4iden tietojen m\u00e4\u00e4ritt\u00e4misest\u00e4 ja m\u00e4\u00e4ritt\u00e4misest\u00e4.<\/p>\n<h3>Esimerkkihakemisto<\/h3>\n<p>Oletetaan, ett\u00e4 olet hetkeksi aloittamassa WordPressiin liittyv\u00e4\u00e4 laajennusta tai jotain, joka vaatii edellisess\u00e4 sarjassa k\u00e4siteltyj\u00e4 kirjastoja. Ja kun m\u00e4\u00e4rit\u00e4t hakemiston t\u00e4t\u00e4 varten, sinulla on hyvin v\u00e4h\u00e4n tiedostoja. Saattaa olla pari tyhj\u00e4\u00e4 PHP-tiedostoa, omaisuutta jne. Ehk\u00e4 se n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<p>Yll\u00e4 oleva esimerkki on tosin jo hieman edell\u00e4 siit\u00e4, milt\u00e4 ty\u00f6si saattaa n\u00e4ytt\u00e4\u00e4, koska:<\/p>\n<ul>\n<li>Siell\u00e4 on <code>composer.lock<\/code>\u00a0tiedosto, joka osoittaa, ett\u00e4 Composer on suoritettu,<\/li>\n<li>Siin\u00e4 on <code>vendor<\/code>\u00a0hakemisto, josta n\u00e4kyy, ett\u00e4 kirjastot on asennettu Composerin kautta,<\/li>\n<li>On <code>grumphp.yml<\/code>\u00a0tiedosto, joka m\u00e4\u00e4rittelee, kuinka GrumPHP:n pit\u00e4isi toimia (ja k\u00e4sittelen t\u00e4m\u00e4n my\u00f6hemmin) koodia haistaessa.<\/li>\n<\/ul>\n<p>Mutta yll\u00e4 olevan asian ydin on sama: sinulla on <code>composer.json<\/code>ja se m\u00e4\u00e4rittelee ja sis\u00e4lt\u00e4\u00e4 kaiken, mit\u00e4 tarvitsemme edellisen viestin perusteella. Joten miten asetamme sen?<\/p>\n<h3>S\u00e4velt\u00e4j\u00e4n asettaminen<\/h3>\n<p>Ensinn\u00e4kin sinulla on oltava idea siit\u00e4, miten aiot j\u00e4sent\u00e4\u00e4 laajennuksen. Minulla on esimerkiksi t\u00e4llainen laajennusasetus:<\/p>\n<ul>\n<li>Kaikki PHP-tiedostot sijaitsevat <code>src<\/code>\u00a0hakemistossa,<\/li>\n<li>Kaikki CSS, JavaScript, kuvat jne., tiedostot ovat <code>assets<\/code>\u00a0hakemistossa,<\/li>\n<li>Hakemisto <code>vendor<\/code>\u00a0on tarkoitettu Composerin kautta asennetuille asioille,<\/li>\n<li><code>views<\/code>\u00a0on se, mit\u00e4 k\u00e4ytet\u00e4\u00e4n projektin etup\u00e4\u00e4ss\u00e4.<\/li>\n<\/ul>\n<p>Esimerkiksi:<\/p>\n<\/p>\n<p>Toiseksi haluat luoda kyseiseen hakemistoon tiedoston nimelt\u00e4 <code>composer.json<\/code>. T\u00e4m\u00e4 voidaan tehd\u00e4 p\u00e4\u00e4tteen kautta antamalla <code>touch<\/code>\u00a0komennon tai voit luoda sen IDE:ss\u00e4si.<\/p>\n<p>T\u00e4rke\u00e4 asia ottaa pois t\u00e4st\u00e4 on, ett\u00e4 siell\u00e4 on <code>src<\/code>\u00a0hakemisto, koska se on hakemisto, joka sis\u00e4lt\u00e4\u00e4 PHP-tiedostomme ja se on hakemisto, jonka haluamme haistella.<\/p>\n<h3>Peruss\u00e4velt\u00e4j\u00e4tiedosto<\/h3>\n<p>T\u00e4ss\u00e4 on perustiedosto <code>composer.json<\/code>, jota voit k\u00e4ytt\u00e4\u00e4 projekteissasi edellisen sarjan ja alla <a href=\"https:\/\/gist.github.com\/tommcfarlin\/60ac0e1fba9fa152fc57622e3866d6dc\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jaetun<\/a> perusteella :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/demo-wordpress-plugin\",\n  \"description\": \"This file is used to show how to configure a WordPress plugin using Composer.\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Pressware\": \"src\/\"\n    }\n  },\n  \"require-dev\": {\n    \"phpro\/grumphp\": \"^0.11.6\",\n    \"phpmd\/phpmd\": \"^2.6\",\n    \"phpunit\/phpunit\": \"5.7.21\",\n    \"nikic\/php-parser\": \"^3.0\",\n    \"sebastian\/phpcpd\": \"^3.0\",\n    \"povils\/phpmnd\": \"^1.1\",\n    \"squizlabs\/php_codesniffer\": \"^3.0\",\n    \"jakub-onderka\/php-parallel-lint\": \"^0.9.2\",\n    \"sensiolabs\/security-checker\": \"^4.0\"\n  }\n}<\/code><\/pre>\n<p>Kun katsot yll\u00e4 olevaa tiedostoa, voit j\u00e4sent\u00e4\u00e4 sen seuraavasti:<\/p>\n<ol>\n<li>Rivit 2 ja 3 antavat hieman kuvausta laajennuksen sis\u00e4ll\u00f6st\u00e4. N\u00e4m\u00e4 ovat my\u00f6s muita t\u00e4m\u00e4n tiedoston alueita, jotka antavat lis\u00e4tietoja siit\u00e4, mit\u00e4 on teht\u00e4v\u00e4.<\/li>\n<li>Rivit 4-8 ovat t\u00e4rkeit\u00e4, koska ne selitt\u00e4v\u00e4t, ett\u00e4 k\u00e4yt\u00e4mme <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> :\u00e4\u00e4 automaattiseen lataukseen ja ett\u00e4 kaikki tiedostot kuuluvat yl\u00e4tason nimiavaruuteen <code>Pressware<\/code>ja ett\u00e4 PHP-tiedostot ovat <code>src<\/code>\u00a0hakemistossa.<\/li>\n<li>Rivit 9\u201318 kattavat kaikki edellisess\u00e4 sarjassa k\u00e4sitellyt tiedostot.<\/li>\n<\/ol>\n<p>Anna seuraavaksi seuraava komento terminaalissasi:<\/p>\n<p><code>$ composer install<\/code><\/p>\n<p>Ja se asentaa n\u00e4m\u00e4 paketit.<\/p>\n<h2>Ent\u00e4 sitoumukset?<\/h2>\n<p>Varmistaaksesi, ett\u00e4 nukkaat ja k\u00e4sittelet sitoumuksia oikein, on t\u00e4rke\u00e4\u00e4, ett\u00e4 m\u00e4\u00e4rit\u00e4t GrumPHP:n niin, ett\u00e4 se tarkkailee tiedostoja. Mutta katson sit\u00e4 seuraavassa postauksessa.<\/p>\n<p>Sill\u00e4 v\u00e4lin, ehk\u00e4 t\u00e4m\u00e4 on hyv\u00e4 tilaisuus asentaa demolaajennus ja harjoitella yll\u00e4 olevan koodin kanssa. Sen m\u00e4\u00e4ritt\u00e4minen oikein ensimm\u00e4isell\u00e4 kerralla voi olla vaikeaa. Onneksi monet tulostusvirheet ovat todella helppoja ymm\u00e4rt\u00e4\u00e4, joten niiden ratkaiseminen on suhteellisen helppoa.<\/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>T\u00e4m\u00e4 on ensimm\u00e4inen kaksiosaisessa sarjassa, jossa k\u00e4sitell\u00e4\u00e4n Composerin konfigurointia WordPress-kehityst\u00e4 varten, jotta voit kirjoittaa t\u00f6iss\u00e4si laadukkaampaa koodia).<\/p>\n","protected":false},"author":1,"featured_media":166003,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[750,1018,719],"tags":[1166],"class_list":["post-229822","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-hyodyllisia-sivustoja","category-kehittaejae","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229822","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=229822"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229822\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166003"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}