一、 前后台功能
二、 技术栈与代码解析
1、 灵活的数据库驱动设计
public function query($sql, $params = []) {
if ($this->type === 'pdo') {
$stmt = $this->connection->prepare($sql);
$stmt->execute($params);
return $stmt;
} else {
// MySQLi 需要手动构建 bind_param 的参数引用
$stmt = $this->connection->prepare($sql);
if ($stmt && !empty($params)) {
$types = '';
$bindParams = [];
foreach ($params as $key => $value) {
if (is_int($value)) $types .= 'i';
elseif (is_float($value)) $types .= 'd';
else $types .= 's';
$bindParams[] = &$params[$key];
}
array_unshift($bindParams, $types);
call_user_func_array([$stmt, 'bind_param'], $bindParams);
// ...
}
}
}2. 可配置的"Diy榜单"缓存系统
function DiyString($blockName) {
global $db;
$block = $db->fetch($db->query("SELECT * FROM diy_blocks WHERE name = ?", [$blockName]));
if (!$block) return [];
// 核心:判断缓存是否有效
if ($block['updated_at'] && (time() - strtotime($block['updated_at']) < $block['cache_time'])) {
return json_decode($block['data'], true) ?: [];
}
// 缓存失效,执行复杂查询生成数据
$data = generateBlockData($block);
$json = json_encode($data);
// 更新数据和时间戳
$db->query("UPDATE diy_blocks SET data = ?, updated_at = NOW() WHERE id = ?", [$json, $block['id']]);
return $data;
}3. 路由系统
4. 函数式的前端模板
5、安全性
function h($str) {
if ($str === null) return '';
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
function input($key, $default = '', $method = 'REQUEST', $htmlspecialchars = true) {
$data = null;
switch (strtoupper($method)) {
case 'GET': $data = $_GET; break;
case 'POST': $data = $_POST; break;
case 'COOKIE': $data = $_COOKIE; break;
default: $data = $_REQUEST; break;
}
$value = isset($data[$key]) ? $data[$key] : $default;
if (is_array($value)) {
foreach ($value as $k => $v) {
$value[$k] = input_filter_value($v, $htmlspecialchars);
}
return $value;
}
return input_filter_value($value, $htmlspecialchars);
}
function input_filter_value($value, $htmlspecialchars) {
if ($htmlspecialchars && is_string($value)) {
$value = trim($value);
$value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
} elseif (is_string($value)) {
$value = trim($value);
}
return $value;
}
function safe_nl2br($str) {
$str = preg_replace('/\n+/', "\n", $str);
$str = h($str);
return nl2br($str);
}三、 系统要求与安装
EnovelCms从开始编写代码到打demo打磨,我不断学习和精进,经历过无数次测试修改、修改测试......它肯定是不完美的,但它是一个基础的、可用的、可以立刻落地的项目,而且后续会持续升级维护。







