,点右上角「**克隆/下载**」→「**下载 ZIP**」,得到 `LcLinks-master.zip`。
2. **解压**:解压后得到一个名为 `LcLinks-master` 的文件夹。
3. **改名(关键步骤,别跳过)**:把文件夹 `LcLinks-master` 重命名为 **`LcLinks`**。
> Typecho 是按 `usr/plugins/` 下的**目录名**识别插件的,目录名必须与插件名一致。忘记改名或改错,后台插件列表里就看不到本插件。
4. **上传**:将整个 `LcLinks` 文件夹上传到站点的 `usr/plugins/` 目录下(FTP、宝塔面板、服务器文件管理器均可),最终结构应为:
```
usr/plugins/LcLinks/
├── Plugin.php ← 插件入口文件,必须有
├── Action.php
├── admin/ ← 后台面板
├── assets/ ← 前台样式与图标
└── README.md
```
> 路径自检:浏览器访问 `https://你的域名/usr/plugins/LcLinks/Plugin.php`,能看到 PHP 源码(或提示文本)即路径正确。
5. **启用**:登录 Typecho 后台 → **控制台 → 插件**,找到 **LcLinks 友情链接**,点「启用」。
6. **完成**:后台左侧菜单出现「**友链**」,进入即可添加友链。
### 方式二:Git 克隆(适合有 git 环境的服务器)
```bash
cd /path/to/typecho/usr/plugins
git clone https://gitee.com/lczld/LcLinks.git
```
克隆下来的目录名就是 `LcLinks`,**无需改名**;不想要 `.git` 目录可自行删除,不影响插件运行。其余步骤同方式一第 5 步。
### 常见问题
- **插件列表里找不到 LcLinks** → 九成是目录名没改(方式一第 3 步),确认是 `usr/plugins/LcLinks/` 而不是 `usr/plugins/LcLinks-master/`。
- **启用报错 / 提示无法使用** → 本插件适配 **Typecho 1.3.0(命名空间版)**,不支持 1.1/1.2 旧版;PHP 需 7.2+。详见文末「适配说明」。
> 兼容 PHP 7.2+ 与 Typecho v1.3.0(数据库支持 MySQL / MariaDB,使用 utf8mb4 + InnoDB)。
---
## 三、使用说明
### 1. 添加友情链接
进入「友链 → 友链管理 → + 添加新链接」:
- **名称 / 链接**:必填。
- **描述**:可选。
- **邮箱**:用于解析头像;数字 QQ 邮箱解析 QQ 头像,其他解析 Gravatar。
- **头像**:留空即按邮箱自动解析;也可手动填写图片地址。
- **上传头像**(v1.1.7 新增):选择本地图片直接上传,支持 JPG / PNG / GIF / WebP / ICO,不超过 1MB;**优先级高于**手动填写与邮箱解析。上传的文件存放在 `usr/uploads/lclinks/`(插件目录外,在线更新不会丢)。
- **RSS 地址**(v1.1.7 新增):该站的订阅地址,可留空;配 `{rss}` 模板占位符使用。
- **RSS 状态**(v1.1.7 新增):启用 / 禁用;禁用后前台不输出该地址。
- **分类**:选择一个已有分类,或在「或在此填写新分类名称」处直接输入,保存时自动创建。
- **状态**:启用(前台显示)/ 禁用(前台隐藏)。
- **自定义字段**:点击「+ 添加自定义字段」,填写「字段名 / 字段值」,用于个性扩展。
### 2. 管理友情链接
- **编辑 / 删除**:在列表中点击对应操作(删除会弹窗确认)。
- **启用 / 禁用**:一键切换前台是否显示。
- **检测失效友链**:点「检测失效友链」按钮,插件会逐个探测友链可达性(每条上限 4 秒),把无法访问的标记为「离线」;原本离线的若恢复可访问,会自动还原为「启用」。友链较多时检测会耗时,请耐心等待。
- **离线(失效)友链**:状态为「离线」时,后台状态列显示「离线」,前台仍展示但会**变灰并标注「离线」**,方便保留记录又不误导访客。也可在编辑页手动把状态设为「离线」。
- **拖拽排序**:拖动每行左侧 `⠿` 手柄调整顺序,松手后自动保存。
- **分类管理**:切换到「分类管理」选项卡,可新建、编辑、删除分类(删除分类后,该分类下友链自动归为「未分类」)。
### 3. 输出友情链接
#### 方式 A:函数方式(主题模板)
在主题模板文件(如 `friends.php`、侧边栏 `sidebar.php`、页脚等)需要显示友链的位置加入:
```php
// 默认 mixed 模式,输出全部友链
// 文字友链
// 图片友链
// 仅输出分类 ID=2 的友链
{name}'); ?> // 临时自定义模板
```
> `links()` 直接输出(echo);需要拿到 HTML 字符串再加工时,用 `Plugin::output()`。
类静态调用等价写法:
```php
```
> 插件通过 `index.php` 的 `begin` 钩子做早期引导,主题模板在任意位置调用 `links()` 都不会出现「函数未定义」。
#### 方式 B:HTML 标签 / 短代码方式(文章或独立页面内容)
在编辑器中直接写入:
```
[links] // 默认模式,全部友链
[links mode="image"] // 图片模式
[links cid="2"] // 指定分类
[links mode="text" cid="1"] // 文字模式 + 指定分类
```
> **v1.0.4 起**:属性**顺序任意**、**单引号 / 无引号**都能识别,
> `[links cid="2" mode="text"]`、`` [links cid='2'] ``、`[links cid=2]` 写法均有效。
> 另支持 `tpl="..."` 指定单条模板,例如 `[links cid="2" tpl="{name}"]`。
---
## 四、输出模板与占位符
插件配置面板可分别编辑 `文字 / 图片 / 图文混合` 三套模板,支持以下占位符:
| 占位符 | 含义 |
| --- | --- |
| `{name}` | 网站名称 |
| `{url}` | 网站链接 |
| `{description}` | 描述 |
| `{email}` | 邮箱 |
| `{avatar}` | 头像地址 |
| `{avatar_onerror}` | 头像加载失败兜底属性(QQ 回退有号链接 / 其余隐藏) |
| `{offline}` | 该友链为「离线」时输出「离线」徽标,正常时为空白(v1.0.1 新增) |
| `{rss}` | 该站的 RSS 订阅地址;未填写或 RSS 状态为「禁用」时输出空串(v1.1.7 新增) |
| `{field:键名}` | 自定义字段值 |
默认图文混合模板示例:
```html
{name}
{description}
```
---
## 五、失效友链检测与代理设置
插件「友链 → 检测失效友链」会主动探测**每个未停用友链**的可达性,并重新核实其状态:能打开的自动恢复(取消离线标记),打不开的标记离线。后台会列出每条被标记离线的友链及**可读的离线原因**(超时 / DNS 失败 / 端口拒 / SSL 失败 / HTTP 5xx 等),并统计总数、新标记数、恢复数、仍离线数。刚离线的、几天前离线的、很久以前离线的,一律按当下真实情况重新判定。
若服务器装了代理软件(如本地正向 / 透明代理)或主机预设了 `http_proxy` / `https_proxy` 环境变量,探测会**默认被继承而改走代理**,而这类代理往往没配好,可能把明明能打开的站点整批误判成离线(典型表现:能打开也被标离线,且反复检测依旧离线)。
为此插件设置中新增「**检测失效友链时的网络代理**」:
- `不使用代理(推荐)`:忽略系统代理,直连目标站点(默认)。
- `使用服务器系统代理`:仅当服务器**必须**走代理(如本地正向 / 透明代理)才能访问互联网时再选。
> 一般用户保持默认「不使用代理」即可,不要因为看到「离线」就去改这项——先确认目标站在你的服务器上是否真的能直接打开。
---
## 六、卸载设置
插件配置中的「卸载设置」可选择:
- **禁用时保留数据表**(默认,推荐):重新启用即可恢复数据。
- **禁用时删除数据表**:禁用将清空全部友链与分类数据,且不可恢复。
> 说明:删除时只会清理本插件自己的 `lclinks` / `lclinks_category` 表,不会碰任何其他数据表。
---
## 七、目录结构
```
LcLinks/
├── Plugin.php # 主文件:建表、钩子、输出、头像解析、配置
├── Action.php # AJAX:拖拽排序保存、邮箱头像解析
├── admin/
│ ├── manage.php # 后台管理面板(列表/增删改/分类/自定义字段)
│ └── assets/
│ ├── admin.css # 后台样式
│ └── admin.js # 拖拽排序、自定义字段增删、头像预览
├── assets/
│ └── front.css # 前台默认样式(可被主题覆盖)
└── README.md
```
---
## 八、Typecho 1.3.0 适配说明
本插件按 **Typecho release v1.3.0(命名空间版)** 的 API 编写,与 1.1 / 1.2 旧版 API **不通用**。若在 1.3.0 上「启用了插件却无法使用」,通常是旧版写法导致。关键差异:
| 项目 | 旧版(1.1/1.2) | 本插件(1.3.0) |
| --- | --- | --- |
| 命名空间 | 全局 `LcLinks_Plugin` | `namespace TypechoPlugin\LcLinks;` |
| 插件接口 | `Typecho_Plugin_Interface` | `\Typecho\Plugin\PluginInterface` |
| 配置方法 | `config(Typecho_Widget_Helper_Form $form)` | `config(\Typecho\Widget\Helper\Form $form): void` |
| 后台菜单 | `Helper::addPanel(1, ...)`(索引 1 无效) | `Helper::addMenu('友链')` 取有效索引后再挂面板 |
| AJAX 动作 | 普通 Widget | `Action extends \Widget\Base implements \Widget\ActionInterface` |
| 响应对象 | `Helper::response()` | `new \Typecho\Widget\Response(Request::getInstance(), Response::getInstance())` |
| 前台样式注入 | `return ''`(返回值被丢弃) | 在 `Widget\Archive::header` 钩子中直接 `echo` |
| 主题函数 | `LcLinks()` | `\TypechoPlugin\LcLinks\links()` |
其他注意点:
- `admin/manage.php` 需自行 `include 'header.php'` / `'menu.php'` / `'copyright.php'` 等后台框架文件。
- `admin/extending.php` 只做 `require_once`,面板文件路径要用 `dirname(__DIR__)` 定位插件根目录。
- 短代码输出会被 Typecho 的 `autoP` 包进 ``,插件已做拆包处理,输出为合法 HTML。
---
© 就是老陈 · https://www.lcbk.cn/