NewHome/api/nav.php

47 lines
1.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* api/nav.php —— 导航数据 JSON 接口
* 用法api/nav.php?cat=popular | red | blue
* 返回:[{ "title": "...", "items": [{"label":"...","url":"...","note":"..."}] }]
*/
require_once dirname(__DIR__) . '/includes/db.php';
header('Content-Type: application/json; charset=utf-8');
$cat = (string)($_GET['cat'] ?? '');
if (!in_array($cat, ['popular', 'red', 'blue'], true)) {
http_response_code(400);
echo json_encode(['error' => 'cat 参数须为 popular/red/blue'], JSON_UNESCAPED_UNICODE);
exit;
}
$pdo = db();
$st = $pdo->prepare('SELECT * FROM categories WHERE key = ? LIMIT 1');
$st->execute([$cat]);
$catRow = $st->fetch();
if (!$catRow) {
http_response_code(404);
echo json_encode(['error' => '分类不存在'], JSON_UNESCAPED_UNICODE);
exit;
}
$out = [];
$st = $pdo->prepare('SELECT * FROM nav_blocks WHERE cat_id = ? ORDER BY sort ASC, id ASC');
$st->execute([(int)$catRow['id']]);
$blocks = $st->fetchAll();
$itemSt = $pdo->prepare('SELECT * FROM nav_items WHERE block_id = ? ORDER BY sort ASC, id ASC LIMIT 15');
foreach ($blocks as $b) {
$itemSt->execute([(int)$b['id']]);
$items = [];
foreach ($itemSt->fetchAll() as $it) {
$items[] = [
'label' => (string)$it['label'],
'url' => (string)$it['url'],
'note' => (string)$it['note'],
];
}
$out[] = ['title' => (string)$b['title'], 'items' => $items];
}
echo json_encode($out, JSON_UNESCAPED_UNICODE);