php实现分类功能实现
PHP 实现分类功能
数据库设计
创建分类表 categories,包含基本字段:
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
parent_id INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE CASCADE
);
parent_id 用于实现多级分类,指向父分类的 ID。
添加分类
通过表单提交分类数据并插入数据库:
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'];
$parent_id = $_POST['parent_id'] ?? null;
$stmt = $pdo->prepare("INSERT INTO categories (name, parent_id) VALUES (?, ?)");
$stmt->execute([$name, $parent_id]);
}
显示分类树
递归查询并显示多级分类:
function displayCategories($parent_id = null, $level = 0) {
global $pdo;
$stmt = $pdo->prepare("SELECT * FROM categories WHERE parent_id " . ($parent_id ? "= ?" : "IS NULL"));
$stmt->execute($parent_id ? [$parent_id] : []);
while ($category = $stmt->fetch()) {
echo str_repeat(" ", $level * 4) . $category['name'] . "<br>";
displayCategories($category['id'], $level + 1);
}
}
分类下拉菜单
生成用于表单选择的分类下拉菜单:
function generateCategoryOptions($parent_id = null, $level = 0) {
global $pdo;
$stmt = $pdo->prepare("SELECT * FROM categories WHERE parent_id " . ($parent_id ? "= ?" : "IS NULL"));
$stmt->execute($parent_id ? [$parent_id] : []);
while ($category = $stmt->fetch()) {
echo '<option value="' . $category['id'] . '">' . str_repeat(" ", $level * 4) . $category['name'] . '</option>';
generateCategoryOptions($category['id'], $level + 1);
}
}
分类关联
将内容与分类关联:
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
category_id INT,
FOREIGN KEY (category_id) REFERENCES categories(id)
);
查询分类内容
获取特定分类下的内容:
$category_id = $_GET['category_id'] ?? null;
$stmt = $pdo->prepare("SELECT * FROM articles WHERE category_id = ?");
$stmt->execute([$category_id]);
$articles = $stmt->fetchAll();
分类面包屑导航
显示当前分类的路径:
function getBreadcrumbs($category_id) {
global $pdo;
$breadcrumbs = [];
while ($category_id) {
$stmt = $pdo->prepare("SELECT * FROM categories WHERE id = ?");
$stmt->execute([$category_id]);
$category = $stmt->fetch();
$breadcrumbs[] = $category;
$category_id = $category['parent_id'];
}
return array_reverse($breadcrumbs);
}






