Restructure categories: merge knitting→käsityöt, kasvit→puutarha, remove matkustus & tips categories
- All 9 neulominen posts moved from 'knitting' to 'kasityot' with subcategory ['neulominen'] - crochet_basket moved to 'kasityot' with subcategory ['virkkaus'] - 3 kasvit posts moved to 'puutarha' with matching subcategories - 3 matkustus posts (travel_lapland, travel_tallinn, travel_saaristo) removed - 5 tips posts moved to 'hyvinvointi' (mieli/arki) or 'puutarha' (tip_balcony_garden) - Added POST_CATEGORY_MAP constant for automatic live-server migration - getOrInitPosts() now auto-migrates old category references and drops matkustus posts - Updated code section comments to reflect new structure Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
121
api.php
121
api.php
@@ -53,6 +53,16 @@ function isAdmin(): bool {
|
||||
}
|
||||
|
||||
// ─── Oletusdata ────────────────────────────────────────────────
|
||||
// Kategoriat jotka on poistettu — poistetaan automaattisesti live-serveriltä
|
||||
const REMOVED_CATEGORIES = ['knitting', 'kasvit', 'matkustus', 'tips'];
|
||||
// Vanhojen postausten kategoria-migraatiot (null = poista postaus)
|
||||
const POST_CATEGORY_MAP = [
|
||||
'knitting' => 'kasityot',
|
||||
'kasvit' => 'puutarha',
|
||||
'tips' => 'hyvinvointi',
|
||||
'matkustus' => null,
|
||||
];
|
||||
|
||||
function defaultCategories(): array {
|
||||
return [
|
||||
['id' => 'recipes', 'fi' => 'Reseptit', 'en' => 'Recipes', 'emoji' => '🍳',
|
||||
@@ -62,25 +72,20 @@ function defaultCategories(): array {
|
||||
['id' => 'jalkiruuat', 'fi' => 'Jälkiruuat'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'knitting', 'fi' => 'Neulominen', 'en' => 'Knitting', 'emoji' => '🧶',
|
||||
'subcategories' => [
|
||||
['id' => 'aloittelijoille', 'fi' => 'Aloittelijoille'],
|
||||
['id' => 'vaatteet', 'fi' => 'Vaatteet'],
|
||||
['id' => 'kodin_tekstiilit', 'fi' => 'Kodin tekstiilit'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'kasityot', 'fi' => 'Käsityöt', 'en' => 'Crafts', 'emoji' => '✂️',
|
||||
'subcategories' => [
|
||||
['id' => 'neulominen', 'fi' => 'Neulominen'],
|
||||
['id' => 'virkkaus', 'fi' => 'Virkkaus'],
|
||||
['id' => 'ommelu', 'fi' => 'Ommelu'],
|
||||
['id' => 'askartelu', 'fi' => 'Askartelu'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'puutarha', 'fi' => 'Puutarha', 'en' => 'Gardening', 'emoji' => '🌱',
|
||||
['id' => 'puutarha', 'fi' => 'Puutarha & Kasvit', 'en' => 'Garden & Plants', 'emoji' => '🌱',
|
||||
'subcategories' => [
|
||||
['id' => 'huonekasvit', 'fi' => 'Huonekasvit'],
|
||||
['id' => 'parvekeviljeily', 'fi' => 'Parvekeviljeily'],
|
||||
['id' => 'vihannekset', 'fi' => 'Vihannekset'],
|
||||
['id' => 'kukat', 'fi' => 'Kukat'],
|
||||
['id' => 'parvekeviljeily', 'fi' => 'Parvekeviljeily'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'sisustus', 'fi' => 'Sisustus', 'en' => 'Interior', 'emoji' => '🏠',
|
||||
@@ -101,6 +106,7 @@ function defaultCategories(): array {
|
||||
['id' => 'liikunta', 'fi' => 'Liikunta'],
|
||||
['id' => 'uni', 'fi' => 'Uni'],
|
||||
['id' => 'mieli', 'fi' => 'Mieli'],
|
||||
['id' => 'arki', 'fi' => 'Arki'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'lemmikit', 'fi' => 'Lemmikit', 'en' => 'Pets', 'emoji' => '🐾',
|
||||
@@ -109,22 +115,6 @@ function defaultCategories(): array {
|
||||
['id' => 'kissat', 'fi' => 'Kissat'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'kasvit', 'fi' => 'Kasvit', 'en' => 'Plants', 'emoji' => '🪴',
|
||||
'subcategories' => [
|
||||
['id' => 'huonekasvit', 'fi' => 'Huonekasvit'],
|
||||
['id' => 'puutarhakasvit', 'fi' => 'Puutarhakasvit'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'matkustus', 'fi' => 'Matkustus', 'en' => 'Travel', 'emoji' => '✈️',
|
||||
'subcategories' => [
|
||||
['id' => 'suomi', 'fi' => 'Suomi'],
|
||||
['id' => 'eurooppa', 'fi' => 'Eurooppa'],
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
['id' => 'tips', 'fi' => 'Vinkit', 'en' => 'Tips', 'emoji' => '💡',
|
||||
'subcategories' => [
|
||||
['id' => 'muut', 'fi' => 'Muut'],
|
||||
]],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -267,89 +257,89 @@ function defaultPosts(): array {
|
||||
'ingredients' => ['600 g naudanlihaa (esim. lapa), kuutioina','400 g sianlihaa (esim. niska), kuutioina','2 sipulia, lohkottuna','2 porkkanaa, siivuina','2 laakerinlehteä','10 maustepippuria','Suolaa','Vettä tai lihalientä'],
|
||||
'steps' => ['Kuumenna uuni 175°C.','Laita lihat, sipulit ja porkkanat uunipastaan tai pataan.','Lisää laakerinlehdet ja maustepippurit.','Kaada vettä tai lientä juuri lihan verran.','Mausta suolalla.','Peitä kannella tai foliolla.','Hauduta uunissa 3–4 tuntia kunnes liha on ylikypsää ja irtoaa.','Tarjoile perunoiden ja puolukkahillon kera.'],
|
||||
],
|
||||
// ── NEULOMINEN ───────────────────────────────────────────
|
||||
// ── KÄSITYÖT - Neulominen ────────────────────────────────
|
||||
[
|
||||
'id' => 'knitting_scarf', 'emoji' => '🧶', 'title' => 'Helppo huivi aloittelijalle',
|
||||
'category' => 'knitting', 'subcategory' => 'aloittelijoille', 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'desc' => 'Neulo kaunis huivi muutamassa tunnissa — täydellinen ensimmäinen projekti!',
|
||||
'body' => '<p><strong>Tarvitset:</strong></p><ul><li>Paksu lanka (noin 200 g)</li><li>Pyöröneulat nro 6–8</li></ul><p><strong>Ohje:</strong> Luo 20 silmukkaa. Neulo suoraan (edestakaisin oikein silmukoin) kunnes huivi on noin 150 cm pitkä. Päättele silmukat ja viimeistele päät. Valmis! 🎉</p><p>Vinkki: Paksuilla langoilla ja suurilla neuloilla saat huivista nopeasti valmiin, vaikka olisit aloittelija.</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_mittens', 'emoji' => '🧤', 'title' => 'Peukalolapaset aloittelijalle',
|
||||
'category' => 'knitting', 'subcategory' => 'vaatteet', 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'desc' => 'Yksinkertaiset lapaset jotka valmistuvat viikonloppuna — lämpimät ja persoonalliset.',
|
||||
'body' => '<p><strong>Tarvitset:</strong></p><ul><li>Villalankaa nro 4–5 (noin 100 g per lapanen)</li><li>Neulat nro 4</li><li>Pistomerkki</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 36 silmukkaa pyöröneulalle ja neulo 2×2-joustinta 8 cm.</li><li>Vaihda sileään neuleeseen ja lisää peukaloreikää varten 8 silmukkaa.</li><li>Neulo suora 15 cm peukaloreikään saakka.</li><li>Sulje yläpää vähentämällä 8 silmukkaa joka toisella kerroksella.</li><li>Neulo peukalo erillisistä silmukoista.</li></ol><p>Vinkki: Käytä värillistä lankaa tekemään kirjoneuleraita, niin lapasista tulee yksilölliset! 🎨</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_hat', 'emoji' => '🎩', 'title' => 'Yksinkertainen pipo',
|
||||
'category' => 'knitting', 'subcategory' => 'vaatteet', 'author' => 'Sinikka', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'desc' => 'Pipo syntyy parissa illassa — kiva lahja tai itselle talven varalle.',
|
||||
'body' => '<p>Pipo on helppo ja nopea projekti, täydellinen aloittelijalle!</p><p><strong>Tarvitset:</strong></p><ul><li>Villalankaa, paksuus nro 4–5</li><li>Pyöröneulat 40 cm, nro 4</li></ul><p><strong>Ohje (koko S/M):</strong></p><ol><li>Luo 88 silmukkaa ja liitä rengasneuleeksi.</li><li>Neulo 2×2-joustinta 8 cm.</li><li>Vaihda sileään neuleeseen ja neulo 18 cm.</li><li>Pienennä: * 8 oikein, 2 yhteen * — toista koko kerrokselle.</li><li>Neulo 1 kerros suoraan. Toista pienennykset kunnes jäljellä on 9 silmukkaa.</li><li>Vedä lanka silmukoiden lävitse ja kiristä napakasti.</li></ol>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_socks', 'emoji' => '🧦', 'title' => 'Ensimmäiset villasukat',
|
||||
'category' => 'knitting', 'subcategory' => 'vaatteet', 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'desc' => 'Sukat ovat hauskempia neuloa kuin luulet — ja miten hyvältä ne tuntuivatkaan jalassa!',
|
||||
'body' => '<p>Villasukat ovat yksi neulomisen perinteisimmistä ja palkitsevimmista projekteista.</p><p><strong>Tarvikeet:</strong></p><ul><li>Sukkawool-lankaa (noin 100 g per pari)</li><li>5 sukkaneulaa, nro 2,5</li></ul><p><strong>Rakenne:</strong></p><ol><li><strong>Varsi:</strong> Luo 60 silmukkaa 5 neulalle. Neulo 2×2-joustinta 15–20 cm.</li><li><strong>Kantapää:</strong> Neulo 30 silmukkaa edestakainen 30 kerrosta, tee kantapäämuoto lyhentämällä.</li><li><strong>Jalka:</strong> Nosta silmukat, neulo tasaisesti 18–20 cm tai kenkänumeron mukaan.</li><li><strong>Varvas:</strong> Pienennä symmetrisesti kunnes 16 silmukkaa jäljellä. Sulje Kitchener-ompeleella.</li></ol><p>Ensimmäinen sukka näyttää hassulta — älä luovuta! Toinen onnistuu jo paremmin. 😄</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_basics', 'emoji' => '📚', 'title' => 'Neulomisen perusteet — näin aloitat',
|
||||
'category' => 'knitting', 'subcategory' => 'aloittelijoille', 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'desc' => 'Oletko aina haaveillut neulomisesta mutta et tiedä mistä aloittaa? Tässä kaikki mitä tarvitset tietää.',
|
||||
'body' => '<p>Neulominen on rentouttava harrastus, jonka voi aloittaa hyvin pienellä välineistöllä.</p><h3>Perusvälineet</h3><ul><li><strong>Neulat:</strong> Aloita paksuilla neuloilla (nro 6–8) — ne ovat helpompia käsitellä.</li><li><strong>Lanka:</strong> Paksu akryyliä tai villalankaa on aloittelijalle paras.</li><li><strong>Sakset ja lanka-neula</strong></li></ul><h3>Perustekniikat</h3><ol><li><strong>Silmukoiden luominen:</strong> Tee lenkkejä peukalonympäri tai käytä puikolle-tekniikkaa.</li><li><strong>Oikea silmukka:</strong> Pistä neula silmukan läpi takaa eteen, kierrä lanka ja vedä läpi.</li><li><strong>Nurja silmukka:</strong> Pistä neula silmukan läpi edestä taakse, kierrä lanka ja vedä läpi.</li></ol><p>Harjoittele ensin pienellä neliöllä ennen kuin alat varsinaiseen projektiin. Pian kädet muistavat liikkeet itsestään! 🧶</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_baby_hat', 'emoji' => '👶', 'title' => 'Vauvan neulottu pipo',
|
||||
'category' => 'knitting', 'author' => 'Sinikka', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'desc' => 'Söpö ja pehmeä pipo vauvalle — syntyy muutamassa tunnissa ja on heti käyttövalmis.',
|
||||
'body' => '<p>Vauvan pipo on ihanteellinen lahjaprojekti — pieni, nopea ja aina tarpeellinen. Sopii noin 0–6 kk ikäiselle.</p><p><strong>Tarvikeet:</strong></p><ul><li>Pehmeää merino- tai bambuvillalankaa (lankavahvuus 2–3)</li><li>Pyöröneulat 40 cm, nro 3–3,5</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 72 silmukkaa ja liitä rengasneuleeksi.</li><li>Neulo 2×2-joustinta 3 cm.</li><li>Vaihda sileään neuleeseen, neulo 8 cm.</li><li>Pienennä: * 4 oikein, 2 yhteen * — toista. Neulo 1 kerros suoraan.</li><li>Jatka pienentämistä kunnes jäljellä on 12 silmukkaa. Vedä lanka läpi.</li></ol><p>💡 Valitse aina pehmeä, ihoa ärsyttämätön lanka vauvoille!</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_dishcloth', 'emoji' => '🫧', 'title' => 'Neulottu tiskiliina',
|
||||
'category' => 'knitting', 'subcategory' => 'kodin_tekstiilit', 'author' => 'Tiina K.', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Tiina K.', 'type' => 'post',
|
||||
'desc' => 'Ekologinen vaihtoehto kertakäyttöisille tiskisienille. Valmistuu tunnissa ja kestää vuosia.',
|
||||
'body' => '<p>Neulottu tiskiliina on täydellinen ensiprojekti — yksinkertainen, nopea ja hyödyllinen!</p><p><strong>Tarvikeet:</strong></p><ul><li>Puuvillalankakerä (noin 50 g)</li><li>Neulat nro 3,5–4</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 30 silmukkaa.</li><li>Neulo helmineuletta: * 1 oikein, 1 nurjin * — toista joka kerros.</li><li>Jatka kunnes tiskiliina on neliön muotoinen (noin 20×20 cm).</li><li>Päättele silmukat löysästi.</li></ol><p>Helmineule tarkoittaa, että molemmat puolet ovat samannäköisiä. Tee useampia eri väreissä! 🎨</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'knitting_cowl', 'emoji' => '🌀', 'title' => 'Kauluri talveen',
|
||||
'category' => 'knitting', 'author' => 'Sinikka', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'desc' => 'Muhkea kauluri pitää lämpimänä ja on käytännöllisempi kuin huivi — ei liiku paikaltaan!',
|
||||
'body' => '<p>Kauluri pysyy paikallaan eikä tipu, toisin kuin huivi. Tämä kauluri on nopea neuloa.</p><p><strong>Tarvikeet:</strong></p><ul><li>Paksua villalankaa, lankavahvuus 5–6, noin 150 g</li><li>Pyöröneulat 60 cm, nro 6</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 80 silmukkaa pyöröneulalle. Liitä rengasneuleeksi.</li><li>Merkitse kierroksen alku pistomerkillä.</li><li>Neulo 2×2-joustinta koko kierros.</li><li>Jatka kunnes kauluri on 30 cm pitkä.</li><li>Päättele joustinpäättelyllä (löysästi!).</li></ol><p>Joustinpäättely antaa kauniin ja joustavan reunuksen. ✨</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'crochet_basket', 'emoji' => '🧺', 'title' => 'Virkkaa kori langantähteistä',
|
||||
'category' => 'knitting', 'subcategory' => 'kodin_tekstiilit', 'author' => 'Tiina K.', 'type' => 'post',
|
||||
'category' => 'kasityot', 'subcategory' => ['virkkaus'], 'author' => 'Tiina K.', 'type' => 'post',
|
||||
'desc' => 'Käytä lankatähteet hyödyksi! Kori syntyy muutamassa tunnissa ja sopii kaikkeen säilyttämiseen.',
|
||||
'body' => '<p>Tässä pääset eroon lankatähteistä luovasti. Yhdistä eri värejä raidalliseen koriin!</p><p><strong>Tarvikeet:</strong></p><ul><li>Paksu puuvilla- tai jutelajanka, eri värejä (yhteensä noin 200 g)</li><li>Virkkuukoukku nro 5–6</li></ul><p><strong>Ohje:</strong></p><ol><li><strong>Pohja:</strong> Luo taikusilmukka. Virkkaa 12 pistettä ensimmäiseen kierrokseen. Lisää joka toisella kierroksella 6 pistettä. Jatka 5 kierrosta kunnes halkaisija on noin 15 cm.</li><li><strong>Reunat:</strong> Virkkaa vain jokaisen pisteen takimmaisen silmukan lävitse (pystyy korin reunan). Virkkaa suoraan ylöspäin 10–15 cm.</li><li><strong>Viimeistely:</strong> Päätä piste tiukasti ja piilota langat.</li></ol><p>💡 Paksuilla langoilla kori kasvaa nopeasti. Kokeile tehdä eri kokoisia koreja sarjana!</p>',
|
||||
],
|
||||
// ── VINKIT ───────────────────────────────────────────────
|
||||
// ── HYVINVOINTI - vinkkejä ────────────────────────────────
|
||||
[
|
||||
'id' => 'tip_morning', 'emoji' => '💡', 'title' => 'Rauhallinen aamurutiini',
|
||||
'category' => 'tips', 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'category' => 'hyvinvointi', 'subcategory' => ['mieli'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'desc' => 'Pienet muutokset aamurutiiniin tekevät koko päivästä paremman.',
|
||||
'body' => '<p>Kokeile näitä vinkkejä parempaan aamuun:</p><ul><li>🌅 Herää 15 minuuttia aiemmin kuin tarvitset</li><li>💧 Juo lasi vettä ennen kahvia</li><li>📵 Älä katso puhelinta heti herätessä</li><li>🚶 Pieni lenkki tai venyttely ennen päivää</li></ul><p>Pienet muutokset, iso vaikutus!</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'tip_digital_detox', 'emoji' => '📵', 'title' => 'Digipaasto — kokeile viikon ajan',
|
||||
'category' => 'tips', 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'category' => 'hyvinvointi', 'subcategory' => ['mieli'], 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'desc' => 'Vähennä ruutuaikaa ja huomaa miten elämä muuttuu. Ei tarvitse lopettaa kokonaan!',
|
||||
'body' => '<p>Kokeilin viime kuussa viikon digipaastoa ja muutos oli hämmästyttävä. Tässä omat vinkkini:</p><h3>Käytännön vinkit</h3><ul><li>📱 <strong>Puhelin makuuhuoneen ulkopuolelle yöllä</strong> — heräät virkeämpänä</li><li>⏰ <strong>Ruutuaikaikkunat</strong> — esim. sähköposti vain klo 9 ja 15</li><li>🚫 <strong>Poista some-sovellukset puhelimesta</strong> ja käytä selainta tietokoneella</li><li>📚 <strong>Korvaa selaaminen kirjalla</strong> — 20 min ennen nukkumista</li></ul><p>Nukuin paremmin jo ensimmäisestä yöstä alkaen. Ja parasta: tajusin, miten paljon aikaa minulla oikeasti on!</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'tip_budgeting', 'emoji' => '💰', 'title' => 'Säästövinkit arkeen',
|
||||
'category' => 'tips', 'author' => 'Sinikka', 'type' => 'post',
|
||||
'category' => 'hyvinvointi', 'subcategory' => ['arki'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'desc' => 'Pienet muutokset arjessa voivat säästää satoja euroja vuodessa — ilman että elämänlaatu kärsii.',
|
||||
'body' => '<p>Olen oppinut säästämään arjessa ilman tinkimistä mieluisista asioista. Tässä parhaat vinkkini:</p><h3>Ruokaostokset</h3><ul><li>Tee kauppalista ennen kauppaan menoa ja pidä siitä kiinni</li><li>Käytä tarjoukset hyödyksi — pakasta erikoistarjouksessa ostettu liha</li><li>Kasvata omia yrttejä ikkunalaudalla</li><li>Kokkaa isompia eriä ja pakasta loput</li></ul><h3>Energia</h3><ul><li>LED-polttimot kaikkialle</li><li>Pyykinpesukone yöllä (halvempi sähkö)</li><li>Laske vesilämmitin 60°C → 55°C</li></ul><p>Ja muista: paras kauppa on se johon et mene lainkaan! 😄</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'tip_balcony_garden', 'emoji' => '🌱', 'title' => 'Kasvimaa parvekkeella',
|
||||
'category' => 'tips', 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'category' => 'puutarha', 'subcategory' => ['parvekeviljeily'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'desc' => 'Oma tomaatti tai yrtit parvekkeen laatikoista — helpompaa kuin luulet!',
|
||||
'body' => '<p>Parvekeviljelyä voi harrastaa vaikka asuisi kerrostalossa. Tässä helppo aloitus:</p><h3>Mitä viljellä parvekkeella</h3><ul><li>🌿 <strong>Yrtit:</strong> basilika, persilja, ruohosipuli — helppoja ja käytännöllisiä</li><li>🍅 <strong>Tomaatit:</strong> parveketomaatit (pieni lajike) tuottavat hyvin pienessäkin ruukussa</li><li>🌶️ <strong>Paprikat:</strong> kasvavat hyvin ruukussa lämpimällä paikalla</li><li>🥬 <strong>Salaatit:</strong> kasvavat nopeasti ja voit korjata lehti kerrallaan</li></ul><h3>Tärkeimmät vinkit</h3><ul><li>Valitse tarpeeksi iso ruukku — liian pieni kuivuu nopeasti</li><li>Kastele säännöllisesti, kesällä ehkä päivittäin</li><li>Lannoita kerran viikossa nestemäisellä lannoitteella</li><li>Sijoita aurinkoisen paikan suojaan tuulelta</li></ul><p>Oman sadon maku on aivan eri kuin kaupan — kannattaa ehdottomasti kokeilla! 🌞</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'tip_eco_cleaning', 'emoji' => '♻️', 'title' => 'Ekologinen siivous',
|
||||
'category' => 'tips', 'author' => 'Sinikka', 'type' => 'post',
|
||||
'category' => 'hyvinvointi', 'subcategory' => ['arki'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'desc' => 'Puhdista koti turvallisilla aineilla — parempi sinulle, parempi ympäristölle ja halvempaa!',
|
||||
'body' => '<p>Tehokkain siivousaine löytyy usein kaapistasi: etikka, ruokasooda ja sitruuna tekevät ihmeitä.</p><h3>Perusreseptit</h3><ul><li>🧹 <strong>Yleispuhdistusaine:</strong> 1 osa etikkaa + 1 osa vettä + muutama tippa astianpesuainetta. Toimii lähes kaikkialla.</li><li>🪥 <strong>Hankausaine:</strong> Ruokasooda + muutama tippa nestesaippuaa. Ihanteellinen altaisiin ja uuniin.</li><li>🍋 <strong>Kalkkitahrat:</strong> Sitruunanpuolisko suoraan hanaan tai pinnoille. Anna vaikuttaa 10 min ja huuhtele.</li></ul><h3>Mitä kannattaa vältellä</h3><p>Klooripohjaiset aineet ovat tehokkaita mutta raskaita ympäristölle ja hengitysteille. Useimmissa kotitöissä pärjät ilman niitä. Säilytä ne vain tosi tarpeelliseen.</p>',
|
||||
],
|
||||
@@ -473,44 +463,25 @@ function defaultPosts(): array {
|
||||
'desc' => 'Kylmä talvi tuo omat haasteensa lemmikkien hoidossa — nämä vinkit auttavat.',
|
||||
'body' => '<p>Suomen talvi on rankka sekä meille että lemmikeillämme. Tässä mitä olen oppinut:</p><h3>Koiran talvihoito</h3><ul><li>🧥 Lyhytkarvaiset rodut tarvitsevat takin — ne eivät ole turhia hempeilyjä</li><li>🐾 Tarkista tassuista suolan aiheuttamat haavat lenkiltä palatessa</li><li>🛁 Pese tassu suolosta lenkiltä tultuasi, tai käytä tassusuojaa</li><li>⏱️ Lyhennä lenkki pakkasen kiristyessä alle -20°C</li></ul><h3>Kissan talvi</h3><ul><li>🔥 Varmista ettei kissa nuku liian lähellä lämpöpatteria — kuivattaa ihoa</li><li>💧 Lisää vesipisteitä — talvi-ilma on kuivaa</li></ul><p>Lemmikki ei valita — sinun tehtäväsi on huomata! ❄️</p>',
|
||||
],
|
||||
// ── KASVIT ───────────────────────────────────────────────
|
||||
// ── PUUTARHA - Huonekasvit ───────────────────────────────
|
||||
[
|
||||
'id' => 'plant_beginners', 'emoji' => '🪴', 'title' => 'Helpoimmat huonekasvit — ei voi tappaa',
|
||||
'category' => 'kasvit', 'subcategory' => ['huonekasvit'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'category' => 'puutarha', 'subcategory' => ['huonekasvit'], 'author' => 'Sinikka', 'type' => 'post',
|
||||
'desc' => 'Jos olet tappanu jokaisen kasvin jonka olet ostanut, nämä lajikkeet ovat sinulle.',
|
||||
'body' => '<p>Kaikki voivat kasvattaa huonekasveja! Avain on valita oikea kasvi oikeaan paikkaan.</p><h3>Top 4 helpointa</h3><ul><li>🌵 <strong>Aloe vera</strong> — kastele kerran kahdessa viikossa, rakastaa aurinkoa. Täysin anteeksiantava!</li><li>💚 <strong>Pothos (viinikasvi)</strong> — viihtyy varjossakin, juontuu vedessä, kasvaa milloin tahansa</li><li>🪨 <strong>Mehikasvit</strong> — kastele kerran kuussa, älä enempää. Ikkunalauta riittää.</li><li>🌱 <strong>Sansevieria (anoppien kieli)</strong> — kestää kuivuutta, varjoa, lähes kaiken</li></ul><h3>Yleisin virhe</h3><p>Liikakastelu tappaa enemmän kasveja kuin kuivuus. Epäillessäsi — älä kastele. Enemmän on harvoin parempi. 💧</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'plant_monstera', 'emoji' => '🌿', 'title' => 'Monstera — kuningattaren hoito-opas',
|
||||
'category' => 'kasvit', 'subcategory' => ['huonekasvit'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'category' => 'puutarha', 'subcategory' => ['huonekasvit'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'desc' => 'Monstera deliciosa on tämän hetken suosituin huonekasvi — ja hyvästä syystä. Tässä kaikki mitä sen hoidosta pitää tietää.',
|
||||
'body' => '<p>Monstera on upea kasvi johon rakastuin heti. Tässä mitä olen oppinut sen hoidosta:</p><h3>Valo</h3><p>Epäsuora kirkas valo on paras. Suora aurinko polttaa lehdet. Sopii hyvin ikkunan viereen etelä- tai länsiseinustalle.</p><h3>Kastelu</h3><p>Kastele kun ylimmäinen 5 cm multaa on kuivaa. Talvella harvemmin kuin kesällä. Käytä huoneenlämpöistä vettä.</p><h3>Lannoitus</h3><p>Kasvukaudella (maalis–elokuu) kerran kuussa nesteylannoitteella. Talvella ei tarvita.</p><h3>Tukikeppi</h3><p>Monstera haluaa kiivetä. Sammalpatsas (moss pole) pitää kasvun pystysuorana ja lehdet kasvavat isommiksi!</p><p>Palkitsevin kasvi jonka minulla on. 🌿</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'plant_seeds', 'emoji' => '🌱', 'title' => 'Kasvien kasvatus siemenistä — kevätprojekti',
|
||||
'category' => 'kasvit', 'subcategory' => ['puutarhakasvit'], 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'category' => 'puutarha', 'subcategory' => ['vihannekset'], 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'desc' => 'Oman kasvin kasvattaminen siemenestä on tyydyttävintä mitä puutarhassa voi tehdä.',
|
||||
'body' => '<p>Kun ensimmäinen oma taimi nousee mullasta, tuntuu kuin olisi luonut jotain ihmeellistä.</p><h3>Milloin aloittaa?</h3><p>Helmikuu–maaliskuu on hyvä aika aloittaa sisäkylvöt. Taimet siirretään ulos toukokuussa hallojen jälkeen.</p><h3>Mitä tarvitaan?</h3><ul><li>🌱 Kylvömultaa — tavallinen multaa on liian raskas</li><li>☀️ Valoa — ikkunalauta tai kasvivalo</li><li>💧 Tasainen kosteus — älä päästä kylvöalustaa kuivumaan</li><li>🌡️ Lämpöä — 20–22°C on ihanteellinen itämislämpötila</li></ul><h3>Helpot aloittelijakasvit siemenestä</h3><ul><li>🌻 Auringonkukka — nopea, iso ja näyttävä</li><li>🌿 Basilika — hyödyllinen ja nopea</li><li>🥬 Salaatti — kerätään jo 4–6 viikossa</li></ul><p>Aloita pienestä, nauti prosessista! 🌱</p>',
|
||||
],
|
||||
// ── MATKUSTUS ────────────────────────────────────────────
|
||||
[
|
||||
'id' => 'travel_lapland', 'emoji' => '🏔️', 'title' => 'Lappi talvella — ensikertalaiselle',
|
||||
'category' => 'matkustus', 'subcategory' => ['suomi'], 'author' => 'Tiina K.', 'type' => 'post',
|
||||
'desc' => 'Lapin talvimatka on elämys — mutta se kannattaa suunnitella etukäteen. Tässä vinkit ensimmäiselle kerralle.',
|
||||
'body' => '<p>Kävin Lapissa talvella ensimmäistä kertaa viime vuonna. Ei jäänyt viimeiseksi! Tässä mitä opin:</p><h3>Milloin mennä?</h3><p><strong>Joulukuu–tammikuu:</strong> Kaamos, revontulet, luminen maisema. Kylmintä.<br><strong>Helmikuu–maaliskuu:</strong> Aurinkoisempaa, revontulien sesonki, hieman lämpimämpää. Suosikkini!</p><h3>Mitä tehdä?</h3><ul><li>🌌 <strong>Revontulet</strong> — varaa selkeä yö ja mene pois kaupunkivaloista</li><li>🎿 <strong>Murtomaahiihto</strong> — latuverkostot ovat erinomaisia</li><li>🐕 <strong>Huskyajelu</strong> — kallis mutta elämys</li><li>🛷 <strong>Poroajelu</strong> — rauhallisempi vaihtoehto</li></ul><h3>Vaatetus</h3><p>Kerrosvaatetus on avain. Villakerros, fleece, tuulensuoja ja toppatakki päälle. Kunnolliset talvikengät — älä aliarvio! 🧥</p>',
|
||||
],
|
||||
[
|
||||
'id' => 'travel_tallinn', 'emoji' => '🏛️', 'title' => 'Tallinna viikonlopuksi — parhaat vinkit',
|
||||
'category' => 'matkustus', 'subcategory' => ['eurooppa'], 'author' => 'Maija-Liisa', 'type' => 'post',
|
||||
'desc' => 'Tallinna on ihanteellinen lähimatka — laivalla sinne, historiallinen vanha kaupunki, hyvä ruoka.',
|
||||
'body' => '<p>Tallinna on suomalaisten klassinen kohde syystä. Tässä omat suosikkini:</p><h3>Vanha kaupunki</h3><p>Raatihuoneentori on must — mutta mene sinne aamulla ennen turistiruuhkaa. Illalla torilla on paljon baareja, päivällä enemmän tilaa ihailla arkkitehtuuria.</p><h3>Syöminen</h3><ul><li>🥣 <strong>Leib Restaurant</strong> — paikallista fermentoitua ruokaa, täytyy varata pöytä</li><li>🍺 <strong>Põhjala Tap Room</strong> — virolainen panimoravintola, hyvät craft-oluet</li><li>🥐 <strong>Kohvik Von Krahli Aed</strong> — hyvä brunssi</li></ul><h3>Käytännön vinkit</h3><ul><li>💶 Käteinen kannattaa — monessa paikassa ei oteta korttia</li><li>🚶 Vanha kaupunki on pieni — kaikki kannattaa kävellä</li><li>🛒 Kauppahalli (Balti Jaam Market) — paikallinen tunnelma</li></ul>',
|
||||
],
|
||||
[
|
||||
'id' => 'travel_saaristo', 'emoji' => '⛵', 'title' => 'Saaristo-Suomi kesällä — veneellä tai laivalla',
|
||||
'category' => 'matkustus', 'subcategory' => ['suomi'], 'author' => 'Riitta H.', 'type' => 'post',
|
||||
'desc' => 'Suomen saaristo on yksi maailman kauneimmista — ja helposti saavutettavissa myös ilman venettä.',
|
||||
'body' => '<p>Saaristo kesällä on suomalaisen maiseman parhaimmistoa. Tässä miten pääset nauttimaan siitä:</p><h3>Ilman venettä</h3><ul><li>⛴️ <strong>Yhteysalukset</strong> — Saaristomeren alueella kulkee säännöllisiä linjoja</li><li>🏨 <strong>Saaristohotellit</strong> — mukava tapa yöpyä saarella ilman omaa venettä</li><li>🚲 <strong>Pyöräveneellä</strong> — joillain saarilla voi vuokrata pyörän ja lautan yhdistelmän</li></ul><h3>Veneen kanssa</h3><p>Jos sinulla on vene tai pääset tutun kyydissä, avautuvat saariston parhaat paikat. Pienet luodot, uimarannat joihin ei muuten pääse, hiljaiset lahdet — se on Suomea parhaimmillaan.</p><p>Saaristo odottaa! ⛵</p>',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -520,7 +491,21 @@ function getOrInitPosts(): array {
|
||||
writeData('posts.json', $posts);
|
||||
return $posts;
|
||||
}
|
||||
return readData('posts.json', []);
|
||||
$posts = readData('posts.json', []);
|
||||
$changed = false;
|
||||
$result = [];
|
||||
foreach ($posts as $post) {
|
||||
$cat = $post['category'] ?? '';
|
||||
if (array_key_exists($cat, POST_CATEGORY_MAP)) {
|
||||
$newCat = POST_CATEGORY_MAP[$cat];
|
||||
if ($newCat === null) { $changed = true; continue; } // poista postaus
|
||||
$post['category'] = $newCat;
|
||||
$changed = true;
|
||||
}
|
||||
$result[] = $post;
|
||||
}
|
||||
if ($changed) writeData('posts.json', $result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
function getOrInitCategories(): array {
|
||||
@@ -552,7 +537,11 @@ function getOrInitCategories(): array {
|
||||
}
|
||||
}
|
||||
unset($cat);
|
||||
// Also append brand-new default categories that don't exist in file yet
|
||||
// Remove deprecated/merged categories
|
||||
$before = count($cats);
|
||||
$cats = array_values(array_filter($cats, fn($c) => !in_array($c['id'], REMOVED_CATEGORIES)));
|
||||
if (count($cats) !== $before) $changed = true;
|
||||
// Append brand-new default categories that don't exist in file yet
|
||||
$existingCatIds = array_column($cats, 'id');
|
||||
foreach ($defaults as $def) {
|
||||
if (!in_array($def['id'], $existingCatIds)) {
|
||||
|
||||
Reference in New Issue
Block a user