Files
FamilyBook/templates/days/_settings_menu.php
T

52 lines
2.9 KiB
PHP
Raw Normal View History

<?php
/**
* 纪念日模块的「设置」下拉(v24 用户 2026-10-03 第 9 条;🔴 v62 改成菜单)。
*
* v24 原话:「在新建纪念日和右侧,也增加设置按钮,可以设置纪念日的分类。」
* —— 当时做成了"下拉里直接铺一张分类增删表单"。
*
* 🔴 v62(用户 2026-10-18 第 2 条):「设置按钮,点击后弹菜单,**第一个菜单是分类设置**,
* 进去之后可以设置分类,每一类纪念日都有不同的图标……」
* ⇒ 与日程/观影/任务三个模块**统一手感**(☰ → 一串列表 → 点进独立页):
* 下拉里**不放表单**,只放一条条目的链接;分类的增删改与图标选择都在
* `days/settings` 那一页上(见 templates/days/settings.php)。
*
* 为什么必须这么改(与日程那条同一个理由,别丢):分类是**家庭级**的,
* 一个家能有十几二十个分类,每个分类还要选图标 —— 全铺在下拉里,
* 下拉会被撑到屏幕外,而"设置"按钮点开本来就该是"一个目录"。
*
* 用法(require 前 set 好):
* $setCurrent 当前页 key('kinds')用来高亮;'' 也行(从别处挂过来时没有当前项)
*/
$setCurrent = (string)($setCurrent ?? '');
$setOn = static function (string $key) use ($setCurrent): string {
return $setCurrent === $key ? ' class="on"' : '';
};
$setIcon = static function (string $name): string {
$paths = [
// 分类:三个小方块("一格一类")
'kinds' => '<rect x="2" y="2.2" width="5" height="5" rx="1.2"/>'
. '<rect x="9" y="2.2" width="5" height="5" rx="1.2"/>'
. '<rect x="2" y="9" width="5" height="5" rx="1.2"/>'
. '<rect x="9" y="9" width="5" height="5" rx="1.2"/>',
];
$d = $paths[$name] ?? '';
if ($d === '') {
return '';
}
return '<svg class="mi" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"'
. ' fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"'
. ' stroke-linejoin="round">' . $d . '</svg>';
};
?>
<details class="movie-set menu ann-set">
<summary class="btn btn-icon" title="纪念日设置" aria-label="纪念日设置"><svg viewBox="0 0 16 16" width="18" height="18" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M2.5 4.5h11M2.5 8h11M2.5 11.5h11"/></svg></summary>
<div class="menu-list ann-set-list">
<?php /* 第一项(也是目前唯一一项):分类设置 —— 名称 + 图标 + 删除 + 排序 */ ?>
<a href="<?= e(url('days/settings')) ?>"<?= $setOn('kinds') ?>><?= $setIcon('kinds') ?><span>分类设置</span></a>
</div>
</details>
<?php
// ⚠️ 只 unset **本片段自己定义**的变量,绝不碰宿主的 $setCurrent / $kinds / $canWrite。
unset($setCurrent, $setOn, $setIcon);