NewHome/article/data.php
2026-09-06 15:20:48 +08:00

71 lines
2.4 KiB
PHP
Raw 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
/**
* article/data.php —— 文章库 JSON 数据接口
* data.php?mode=list 文章元数据列表(按分区分组,含分区名)
* data.php?mode=content&id=N 单篇文章完整数据(含 markdown 正文)
* 说明仅返回前台可见enabled=1文章隐文不对外。
*/
require_once dirname(__DIR__) . '/includes/db.php';
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');
$pdo = db();
function json_out(array $data): void
{
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
exit;
}
$mode = (string)($_GET['mode'] ?? 'list');
if ($mode === 'content') {
$id = (int)($_GET['id'] ?? 0);
if ($id <= 0) {
json_out(['ok' => false, 'msg' => '缺少文章 id']);
}
$st = $pdo->prepare('SELECT id, part, title, summary, markdown, pinned, created_at, updated_at
FROM articles WHERE id = ? AND enabled = 1 LIMIT 1');
$st->execute([$id]);
$row = $st->fetch();
if (!$row) {
json_out(['ok' => false, 'msg' => '文章不存在或已隐藏']);
}
json_out(['ok' => true, 'article' => $row]);
}
// ---- 默认list 分组元数据(分区顺序取各分区首篇 id 序;分区内置顶 → sort → id ----
$rows = $pdo->query('SELECT id, part, title, summary, pinned, sort, created_at, updated_at
FROM articles WHERE enabled = 1 ORDER BY id ASC')->fetchAll();
$parts = [];
if ($rows) {
$partOrder = [];
$byPart = [];
foreach ($rows as $r) {
$part = trim((string)$r['part']);
if ($part === '') {
$part = '未分类';
}
if (!isset($byPart[$part])) {
$byPart[$part] = [];
$partOrder[] = $part;
}
$byPart[$part][] = $r;
}
foreach ($partOrder as $part) {
$items = $byPart[$part];
usort($items, static function (array $a, array $b): int {
if ((int)$a['pinned'] !== (int)$b['pinned']) {
return (int)$b['pinned'] - (int)$a['pinned'];
}
if ((int)$a['sort'] !== (int)$b['sort']) {
return (int)$a['sort'] <=> (int)$b['sort'];
}
return (int)$a['id'] <=> (int)$b['id'];
});
$parts[] = ['part' => $part, 'articles' => $items];
}
}
json_out(['ok' => true, 'parts' => $parts]);