Laoli Wallpaper v1.2

把壁纸站做成一门干净的手艺

多维检索 · 缩略图自动生成 · 每日壁纸接口 · 收藏夹 · 排行榜 · 批量采集

从大型导航站里剥离出来的独立壁纸程序:前端模板与后台模板分离、后台可热切换与预览,用户中心与壁纸功能深度结合,后端重写为控制器 / 模型 / 数据层,根目录只剩一个入口文件。

24模板文件
13后台模块
10用户中心页
7.6万+演示壁纸
功能模板机制自带模板用户中心后台技术栈安装问答

FEATURES

一个壁纸站该有的,这里都有

不是把老站代码剪一刀留下的残骸,而是按壁纸业务重新设计的完整闭环。

库

壁纸库与检索

分类、标签、横竖屏、设备、分辨率、主色、关键词多维筛选;最新 / 热门 / 下载 / 收藏 / 评分 / 随机六种排序,全部走同一套查询构造器。?sort=hot&device=phone&orientation=2

图

图片自动加工

入库时探测宽高、体积、横竖屏;GD 可用则按比例生成缩略图,不可用直接复用原图,不报错不白屏。列表页占位底色取图片平均主色。Image::makeThumb($url, 640)

日

每日壁纸与接口

按日期稳定挑选一张,同一模板每天固定、隔天自动更换。开放 JSON 接口给 App、小程序或自己的桌面脚本调用。GET /api/daily

藏

收藏与收藏夹

登录用户可收藏、取消收藏,并自建多个收藏夹分组存放;列表页一次性批量判定收藏状态,不会为每张图发一条查询。Favorite::mapFor($uid, $ids)

迹

足迹与下载记录

浏览历史自动记录、可一键清空;下载行为计数并留档,用户中心能看到「我下过什么」,后台能看到「什么最好下」。

投

用户投稿

后台开关控制是否开放会员上传。会员上传的图片自动压缩缩略图、自动识别元数据,归属到「我的上传」,管理员可审可删。

榜

排行榜

浏览榜、下载榜、收藏榜三张榜单,前 50 名直接给模板渲染,不做重复计算。

采

批量采集入库

后台粘贴一行一条 标题|图片地址|分类|标签 即可批量导入;可选把远程图抓到本地,分类不存在时自动创建。已加内网地址拦截。

安

安全基线

全站 PDO 参数绑定、表单 CSRF 校验、输出统一转义、密码 bcrypt 存储、后台操作留痕,图片地址只允许 http/https 与站内路径。

THEME ENGINE

多套模板,公用一套函数

模板是纯 HTML 结构 + 少量输出语句,每个模板一个独立文件夹,互相不打架。

数

数据只有一套

取数全部在 app/Model/ 里完成,模板只是把变量排成不同样子。

契

字段只有一份契约

列表卡片统一用 cards($items) 输出,换模板不用重写 views、thumb 这些字段。

落

缺页面不白屏

当前模板找不到 detail.php 时自动回落到基底模板的同名文件。

切

切换是热切换

改一个配置项立即生效,还能分别指定电脑端与手机端模板。

览

预览不覆盖

管理员用 ?tpl=xxx 临时试看,会话级生效,不动线上设置。

稳

后台切不没

后台模板固定在 templates/_admin/,无论前台怎么换皮都不会把自己切没。

templates/
templates/
├─ tpl-orange/          # 暖阳橙(基底,28 个文件:19 张页面 + 5 个片段 + 资源与元信息)
│  ├─ theme.json  layout.php
│  ├─ home.php  list.php  detail.php  page.php  ranking.php  404.php
│  ├─ auth-login.php  auth-register.php
│  ├─ user-home.php  user-favorites.php  user-points.php …(用户中心 10 页)
│  ├─ partial/  card.php  wall-grid.php  mini-row.php  pager.php  usermenu.php
│  └─ assets/   style.css  app.js  preview.png
└─ _admin/              # 后台外壳,固定,不随前台切换

# 新模板:新建 templates/tpl-mine/,放 theme.json + layout.php + 首页/列表/详情,
# 其余页面自动回落基底模板,后台「模板切换」扫描目录就能看到这张卡片。
只需要做三张页面:首页、列表、详情这三张最有辨识度的页面,其余先沿用基底模板。成品模板包在 模板商店 里按卡片陈列,下载解开丢进 templates/ 就能切;后台删掉的模板也能从同一处重新下回来。没有现成的就把配色方向发给作者谈定制。

MEMBER

用户中心不是挂在角落的附属页

壁纸的每一个动作都会落进用户中心,反过来用户中心也直接连着壁纸。

览

总览页

聚合收藏、足迹、上传、口味标签与未读消息,一次进后台看全。

藏

收藏夹分组

收藏按收藏夹分组,可新建、改名、删除、移动;默认收藏夹不可删。

迹

浏览足迹

自动记录去重,每人上限 500 条,支持一键清空。

下

下载记录

区分游客与会员,会员可以在「下载记录」里找回之前下过的图。

设

账号设置

改昵称、简介、邮箱、头像(本地上传或外链),以及改密码。

一

三处状态实时一致

详情页的收藏按钮、列表页的红心状态、个人中心三者同步。

客

游客也能用

游客可浏览与下载;收藏、足迹、投稿需登录,未登录点收藏会被带回原页面再登录。

知

消息中心

全站公告或指定用户通知,用户中心消息中心即时可见。

ADMIN

后台十个模块,每个都够用

不做「什么都能配」的空壳,每个模块都给到能干活。

数据与内容壁纸本体的管理
  • 数据概览壁纸总量、上架 / 下架、浏览与下载总数、今日新增、近 14 天趋势、分类分布、Top 榜单
  • 壁纸管理搜索筛选分页列表、批量删除、单条上下架 / 热门 / 推荐开关,表单带图片上传与缩略图生成
  • 分类管理名称、别名 slug、排序、封面、简介、显示开关;删除分类后壁纸转为未分类,不丢数据
  • 标签管理从壁纸标签字段聚合出标签云与词频,一键同步到标签表
外观与用户换皮与会员
  • 模板切换读取模板目录列出全部主题、封面、说明、页面清单;可切全站、仅电脑端、仅手机端,可设基底模板,带前台预览入口
  • 用户管理会员检索、封禁 / 解封、重置密码、删除账号并清理其收藏与通知
  • 公告通知发全站公告或指定用户,用户中心消息中心即时可见
系统与工具设置与运维
  • 系统设置站名、副标题、作者、联系 QQ、备案号、页脚说明、SEO 关键词与描述、注册开关、投稿开关、每页数量、缩略图宽度
  • 采集与工具批量文本导入、远程图抓取入库、重建缩略图、补齐图片元数据、重算收藏与分类统计
  • 操作日志记录登录、增删改、模板切换、采集与统计重算,含操作人与 IP,可按天清理

TECH

技术栈:够用就好,不堆依赖

项目说明
运行环境PHP 7.4+(不使用 PHP 8 独有语法)· MySQL 5.6+(全 InnoDB,utf8mb4)· 扩展 PDO + pdo_mysql,GD 可选
依赖无 Composer、无框架、无前端构建
代码结构app/Core 数据库、路由、模板、鉴权、设置 · app/Model 壁纸、分类、收藏、用户、统计 · app/Controllers Front / Admin 分离 · app/Support 全局函数、图片、UI 组件
数据层单文件 PDO 双驱动,MySQL / SQLite 自动切换;SQL 内 {{tbl_xxx}} 自动替换表前缀;重复命名占位符自动展开(5.6 原生预处理友好);随机排序、LIKE 转义按驱动分别处理
目录设计站点根目录只指向 public/,业务代码在 app/ Web 不可直接访问;storage/ 放会话、日志、编译缓存;上传与缩略图落 public/uploads/
URL/c/nature 分类 · /w/123 详情 · /tag/极简 标签 · /ranking 榜单 · /user/* 用户中心 · /admin/* 后台 · /tpl/主题/文件 模板静态资源安全输出
可扩展点模型静态方法即公共函数库,模板直接调用;片段 part('card') 支持主题内覆盖;设置项存表后台改了立即生效;每日接口可直接被第三方复用
演示数据laoli_wallpapers.sql 76,402 张壁纸 + laoli_categories.sql 分类表,导入即成站

INSTALL

部署,三步而已

全程不改任何文件。没 SSH 权限也能装。

  1. 1

    整目录上传,配伪静态

    把整个程序目录传到服务器,网站根目录就指向它(改不了目录的虚拟主机也一样能跑)。根目录按服务器各放了一份伪静态文件,只用其中一个:.htaccess(Apache)、nginx.htaccess(Nginx / 宝塔,include 在 server{ } 层级,phpStudy 用户要把那行 include 从 location / 里移到外面)、web.config(IIS)。

  2. 2

    打开站点,一键装

    没装过时,用浏览器打开域名首页就是这个安装器(/install 也能进):填数据库账号密码、站点名、管理员密码,点一下就完成。环境自检先跑,库不存在会自动建,建表、写初始设置、创建管理员、生成默认分类、15 张演示壁纸一次做完。

  3. 3

    进后台,挑一套模板

    打开 /admin/login 登录,第一件事是改密码,然后进「模板切换」看主题列表(前台模板全部在 templates/ 目录里扫描,可按电脑端 / 手机端分别指定,还能设基底模板与前台预览)。装完顺手把根目录的 install/ 删掉更稳妥。

命令行安装(可选)
php install/cli.php
php install/cli.php --demo --admin-user=laoli --admin-pass=改成强密码
php install/cli.php --bizhi=laoli_wallpapers.sql   # 只重建壁纸表
Nginx 补一道口子
# 面板生成的 PHP 段是正则 location,优先级高于 location /,
# 只粘伪静态的话 /config/config.php 这类文件仍会被解析执行。
location ~ \.php(.*)$ {
    if ($request_filename !~* /public/index\.php$) { return 404; }
    fastcgi_pass 127.0.0.1:9001;
    # 其余原样保留
}
想做演示站:根目录给了 laoli_categories.sql(分类表)和 laoli_wallpapers.sql(76,402 张壁纸),在 phpMyAdmin 里直接导入就行,文件自带删表重建和分类计数;要安装器代劳就在向导里勾「顺带导入根目录的数据表文件」,默认不勾。
写权限:chmod -R 775 storage public/uploads config。Windows / phpStudy 不用管这一步。数据库配置落在 config/db.local.php,升级程序不会覆盖它。

FAQ

常见问题

换模板会不会丢数据或改坏内容?
不会。模板只负责渲染,数据都在数据库与 app/Model/ 里。切换模板改的是一条设置记录,随时可切回;后台界面独立在 templates/_admin/,不随前台模板变化。
新模板少写几个页面会白屏吗?
不会。找不到页面文件时自动回落到「基底模板」的同名文件。你只需要做首页、列表、详情这三张最有辨识度的页面,其余先沿用基底。
必须 MySQL 5.6 吗?更高版本可以吗?
可以。脚本刻意避开 5.7 / 8.0 才有的语法(例如 InnoDB FULLTEXT、默认函数表达式),所以 5.6 能跑,5.7、8.0 同样能跑。索引长度也按 5.6 的 767 字节限制设计。
没有 GD 扩展能用吗?
能。缩略图生成会静默跳过并复用原图,主色提取返回空由模板用默认占位色。图片宽高、体积等元数据仍可从本地文件读取。
想本地先看效果,不想装 MySQL?
配置里把 db.driver 改成 sqlite(或设环境变量 VB_DB_DRIVER=sqlite),跑一次安装脚本即可零依赖预览,SQL 层已做双驱动适配。
图片能存本地吗?会不会占满磁盘?
支持本地上传与远程抓取入库两种模式,按 uploads/年月/ 归档,缩略图单独放 uploads/thumb/。批量采集时是否把远程图抓到本地由你在后台决定。
能不能直接改造现有模板?
建议复制一份现成模板目录改名字再动。模板清单是运行时扫描 templates/ 得到的,新增目录即刻出现在后台,不需要清缓存或改代码。
7.6 万张演示数据要不要导?
看用途。做演示站就导,导入后首页立刻有内容;正式站建议不勾,用后台「采集与工具」批量导入你自己的图,或者一张张传。

准备好给你的壁纸站换一张脸了吗?

读完模板开发文档,你就能自己写一套主题:一个文件夹、一份 theme.json、几页 HTML。