Alikategoria-parannukset: monivalinta, Muut-kategoria, emoji pois administa

- api.php: lisätään 'Muut'-alikategoria Resepteihin, Neulomiseen ja Vinkkeihin
- api.php: getOrInitCategories() lisää puuttuvat alikategoriat automaattisesti
- admin.html: poistetaan emoji-kenttä (emoji tulee kategoriasta automaattisesti)
- admin.html: alikategoriat checkboxeina → voi valita useamman samanaikaisesti
- script.js: subcategory tallennetaan aina taulukkona
- script.js: filterPosts tukee pilkulla eroteltuja alikategorioita (postSubs.includes)
- script.js: renderCards kirjoittaa subcategory-arrayn pilkulla eroteltuna data-attribuuttiin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 08:30:10 +02:00
parent 993a137508
commit 22a03c10a0
3 changed files with 64 additions and 25 deletions

22
api.php
View File

@@ -60,15 +60,19 @@ function defaultCategories(): array {
['id' => 'kasvis', 'fi' => 'Kasvis'],
['id' => 'vegaaniset', 'fi' => 'Vegaaniset'],
['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' => 'tips', 'fi' => 'Vinkit', 'en' => 'Tips', 'emoji' => '💡',
'subcategories' => []],
'subcategories' => [
['id' => 'muut', 'fi' => 'Muut'],
]],
];
}
@@ -316,15 +320,25 @@ function getOrInitCategories(): array {
return $cats;
}
$cats = readData('categories.json', []);
// Merge in subcategories if existing file doesn't have them yet
// Merge in subcategories (and new ones) from defaults if missing
$defaults = defaultCategories();
$defaultMap = [];
foreach ($defaults as $d) { $defaultMap[$d['id']] = $d; }
$changed = false;
foreach ($cats as &$cat) {
if (!isset($cat['subcategories']) && isset($defaultMap[$cat['id']]['subcategories'])) {
$cat['subcategories'] = $defaultMap[$cat['id']]['subcategories'];
$defSubs = $defaultMap[$cat['id']]['subcategories'] ?? [];
if (!isset($cat['subcategories'])) {
$cat['subcategories'] = $defSubs;
$changed = true;
} else {
// Add any new subcategory ids from defaults that don't exist yet
$existingIds = array_column($cat['subcategories'], 'id');
foreach ($defSubs as $ds) {
if (!in_array($ds['id'], $existingIds)) {
$cat['subcategories'][] = $ds;
$changed = true;
}
}
}
}
unset($cat);