40) { $err = '分组名称过长(最多 40 字)'; } else { // 重名检查(排除自身) $dup = $db->prepare('SELECT COUNT(*) FROM ' . tn('product_groups') . ' WHERE name = ? AND id <> ?'); $dup->execute([$name, $id]); if ((int) $dup->fetchColumn() > 0) { $err = '已存在同名分组,请换一个名称'; } } if ($err === '') { if ($id > 0) { $db->prepare('UPDATE ' . tn('product_groups') . ' SET name=?, icon=?, sort_order=? WHERE id=?') ->execute([$name, $icon, $sort, $id]); $msg = '分组已更新'; } else { $db->prepare('INSERT INTO ' . tn('product_groups') . ' (name, icon, sort_order, created_at) VALUES (?,?,?,NOW())') ->execute([$name, $icon, $sort]); $msg = '分组已添加'; } } } // ---------- 删除 ---------- if (isset($_POST['delete'])) { verifyCsrf(); $id = (int) $_POST['delete']; $row = $db->prepare('SELECT name FROM ' . tn('product_groups') . ' WHERE id = ?'); $row->execute([$id]); $g = $row->fetch(); if ($g) { // 将该分组下的商品归为「其他」,避免孤儿数据 $db->prepare('UPDATE ' . tn('products') . ' SET category = ? WHERE category = ?') ->execute(['其他', $g['name']]); $db->prepare('DELETE FROM ' . tn('product_groups') . ' WHERE id = ?')->execute([$id]); $msg = '分组「' . $g['name'] . '」已删除,相关商品已归为「其他」'; } } // ---------- 编辑回填 ---------- $edit = null; if (isset($_GET['edit'])) { $stmt = $db->prepare('SELECT * FROM ' . tn('product_groups') . ' WHERE id = ?'); $stmt->execute([(int) $_GET['edit']]); $edit = $stmt->fetch(); } $showForm = ($edit !== null) || (isset($_GET['act']) && $_GET['act'] === 'add'); // ---------- 列表(含商品计数) ---------- $list = $db->query( 'SELECT g.*, (SELECT COUNT(*) FROM ' . tn('products') . ' p WHERE p.category = g.name) AS cnt FROM ' . tn('product_groups') . ' g ORDER BY g.sort_order ASC, g.id ASC' )->fetchAll(); adminHeader('商品分组', 'groups'); ?>

商品分组

分组用于首页分类筛选与商品归类。删除分组会将其下商品自动归为「其他」,不会丢失商品数据。

取消

分组列表(共 个)

新增分组

还没有分组,点上方「新增分组」添加吧。

ID图标名称排序商品数操作