一时兴起的买的网址，不用来做网站就浪费了
为什么选择Cloudreve？打造属于你的私有云盘体验
引言：你是否需要一个真正可控的云存储？ 在数字化时代，数据存储和共享已成为我们日常生活和工作的重要组成部分。然而，公有云服务（如百度网盘、Dropbox等）往往伴随着隐私担忧、限速问题或高昂的会员费用。如果你正在寻找一种既能完全掌控数据、又具备强大功能的解决方案，那么 Cloudreve 或许正是你需要的。 什么是Cloudreve？ Cloudreve 是一款基于 Go 与 React 开发的开源自建网盘系统，支持快速搭建个人或团队的私有云存储服务。 它不仅功能丰富，还具备高度的可定制性，让你可以轻松管理文件、分享内容，并且完全掌控自己的数据。 核心特性一览： 多存储后端支持 Cloudreve 的强大之处在于其灵活的多存储策略，您可以将文件同时挂载到多个不同的存储平台。以下是其支持的部分存储后端： 存储类型 说明 备注 本地磁盘 服务器本地存储 默认支持，无需额外配置 阿里云 OSS 阿里云对象存储服务 需要 Access Key 腾讯云 COS 腾讯云对象存储服务 需要 Secret ID/Key AWS S3 亚马逊云对象存储服务 支持标准 S3 API OneDrive 微软云存储服务 支持国际版/世纪互联 金山云 KS3 金山云对象存储服务 兼容 S3 API 华为云 OBS 华为云对象存储服务 兼容 S3 API 七牛云 Kodo 七牛云对象存储服务 需要配置 Access Key 强大的文件管理 提供直观的 Web 界面，支持拖拽上传、文件夹管理、文件预览（图片、视频、文本等），在线解压缩。 灵活的分享机制 可以生成公开或密码保护的分享链接，设置有效期和下载次数限制，确保文件分享既便捷又安全。 用户与权限管理 无论是个人使用还是团队协作，Cloudreve 都支持多用户系统，并可针对不同用户或用户组设置存储空间、速度限制等。 在线预览与编辑 支持常见格式的文件的在线预览（如 Office 文档、PDF、视频等），甚至可以集成 OnlyOffice 实现在线编辑。 跨平台兼容 无论是 Windows、macOS 还是 Linux，只需简单的部署步骤，你就可以在任何环境中运行 Cloudreve。 谁适合使用 Cloudreve？ 个人用户：希望搭建私有云盘，替代公有网盘，保护隐私并摆脱限速困扰。 开发者和技术爱好者：享受自建服务的乐趣，同时拥有完全的控制权。 小型团队或企业：需要内部文件共享和协作平台，且希望数据自主管理。 教育或非营利组织：寻求低成本、高效率的文件存储与分享方案。 如何开始使用？ 部署 Cloudreve 非常简单！你可以通过 Docker 快速安装，也可以直接下载二进制文件运行。官方提供了详细的文档，即使是新手也能轻松上手。 下载最新版本：访问 Cloudreve GitHub 发布页 获取最新版本。 配置存储策略：根据需求选择本地存储或云端存储。 启动服务：运行程序，通过浏览器访问管理界面。 开始使用：上传文件、创建分享、管理用户——一切尽在掌握！ 部署提醒：家用带宽的局限性 在将 Cloudreve 部署于家庭网络环境时，一个无法回避的问题是家用宽带网络的固有局限性。这主要体现为以下几个方面： 局限性 具体表现 对 Cloudreve 使用的影响 不对称带宽 上传速率远低于下载速率。例如，一条 1000M 下载的宽带，上传速率可能仅为 30-100M（约 3-12 MB/s 的实际传输速度）。 这是最核心的瓶颈。 它严重限制了您从外部网络（如公司、外出时）上传文件到家中云盘的速度，以及与他人分享大文件的体验。 无公网 IP 运营商通常不会给家庭宽带分配公网 IPv4 地址，您的网络位于运营商的大内网中。 从外部网络无法直接通过域名或 IP 访问到您家里的 Cloudreve 服务，必须依赖内网穿透等第三方工具，增加了复杂性和不稳定性。 动态公网 IP 即使幸运地申请到了公网 IP，它通常也是动态的，每隔一段时间可能会变化。 需要配置 DDNS（动态域名解析） 服务，才能确保您的域名始终指向变化后的正确家庭 IP 地址。 端口封锁 运营商通常封锁了家庭宽带的 80、443、8080 等常用网络端口。 您无法使用标准的 HTTP/HTTPS 端口提供服务，访问 Cloudreve 时必须在域名或 IP 后加上非常用端口号（如 https://yourdomain.com:5212），不够美观且可能被浏览器提醒不安全。 网络稳定性 家庭网络环境相对数据中心不够稳定，可能遇到路由器性能瓶颈、偶发断线等问题。 可能导致服务间歇性中断，影响您和分享对象的使用体验。 应对策略与解决方案 虽然存在这些局限，但并非无解，您可以考虑以下方案来优化体验： 申请公网 IP：致电您的网络运营商，尝试申请公网 IP 地址，告知理由：需要安装网络摄像头监控家里（目前成功难度较大，但值得一试）。 使用内网穿透工具：这是最普适的解决方案。使用如 frp、Ngrok、ZeroTier 或国内服务商（如花生壳）提供的穿透服务，将您家庭内网的服务映射到公网。 搭配对象存储：充分利用 Cloudreve 的混合存储特性。将频繁访问、需要高速分发的文件存储策略设置为阿里云 OSS、腾讯云 COS 等第三方对象存储。这样，外部用户下载时直接走对象存储的高速链路，完美绕过您家宽的上传带宽瓶颈。家庭 NAS 则用于存储私有、冷数据。 仅作内网使用：如果主要需求是在家庭内部的手机、电脑、电视间共享文件，那么局域网内的传输速度将非常快，完全不受上述限制影响。（硬件上线就是速度上线） 结论： Cloudreve 在家庭环境中的部署非常适合作为家庭媒体中心和个人数据的私有化备份解决方案。但如果期望实现与百度网盘、Dropbox 等商用服务媲美的公网高速访问和分享体验，则需要正视家用带宽的上限，并合理利用内网穿透或云端存储等组合方案来扬长避短。 结语 Cloudreve 不仅是一款功能强大的自建网盘工具，更是一个赋予用户数据自主权的优秀解决方案。无论是出于隐私保护、性能需求还是纯粹的技术探索，Cloudreve 都值得你尝试。 如果你厌倦了公有云盘的各种限制，不妨动手搭建一个属于自己的 Cloudreve 云盘，体验完全掌控数据的自由与便捷！ 相关链接： Cloudreve 官方文档 GitHub 项目地址 希望这篇推荐能帮助你更好地了解 Cloudreve！如果你有任何问题或使用心得，欢迎在评论区交流讨论~
项目名称： Docusaurus Theme for Typecho 项目目标： 旨在将Typecho博客系统的界面现代化，解决原版主题设计过时的问题。本主题在设计上尽量保持了与原版主题结构的相似性，便于用户理解和迁移。 已知问题与BUG列表 本主题目前已知存在以下问题： 二、全平台通用问题 3. 短文章布局异常：当文章内容过短时，文章底部的评论区及评论发布框的定位会出现错乱。 4. 头像服务依赖：主题默认的头像（Gravatar）服务在国内网络环境下可能无法正常访问（您在本博客看不到头像，是因为我已在后台禁用了此功能）。 5. 缺少默认Logo：主题未提供默认的站点Logo图片，需要用户自行配置。 6. 暗色模式闪烁：启用暗色模式后，在刷新页面时会出现短暂的主题闪烁。 7. 其他未知问题：可能还存在其他未被发现的问题，欢迎在使用中反馈。 您可以在本博客中实际浏览，以更直观地了解上述问题。 主题下载 如果您在了解以上问题后仍希望尝试，可以通过以下链接下载主题文件： docusaurus-theme-v6.4.zip
在安全启动的情况下启用开源内核英伟达显卡驱动
前提条件： 主板启用了安全启动且显卡内核驱动未签名 Linux系统（Debian13） 熟练命令行操作 一颗健康且正常的大脑与一双手和一对眼 步骤1：安装所需工具 Bash | 复制 sudo apt update sudo apt install mokutil openssl zstd 步骤2：创建签名密钥 Bash | 复制 # 创建目录存放密钥 sudo mkdir -p /var/lib/shim-signed/mok/ cd /var/lib/shim-signed/mok/ # 创建密钥对 sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=NVIDIA Driver Signing Key/" # 设置权限 sudo chmod 600 MOK.priv MOK.der 步骤3：注册密钥到 MOK Bash | 复制 sudo mokutil --import MOK.der 这会提示设置一个密码（请记住，重启时需要） 步骤4：在启动时注册密钥 重启后会出现蓝色界面（MOK Management） 选择 "Enroll MOK" → "Continue" → "Yes" 输入之前设置的密码 选择 "Reboot" 步骤5：为 NVIDIA 模块签名 重启后，找到模块位置 | 复制 modinfo nvidia | grep filename #通常位置：/lib/modules/$(uname -r)/updates/dkms/nvidia.ko 情况一 模块后戳为.ko | 复制 #为模块签名 sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_modeset) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_drm) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_uvm) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia-peermem) 情况二 模块后戳为.ko.zst Bash | 复制 # 创建临时目录 sudo mkdir -p /tmp/nvidia-modules cd /tmp/nvidia-modules # 解压所有 NVIDIA 模块 sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst -o nvidia.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-modeset.ko.zst -o nvidia-modeset.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-drm.ko.zst -o nvidia-drm.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-uvm.ko.zst -o nvidia-uvm.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-peermem.ko.zst -o nvidia-peermem.ko # 为解压后的模块签名 sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia.ko sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-modeset.ko sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-drm.ko sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-uvm.ko sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-peermem.ko # 重新压缩签名后的模块 sudo zstd -f nvidia.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst sudo zstd -f nvidia-modeset.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-modeset.ko.zst sudo zstd -f nvidia-drm.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-drm.ko.zst sudo zstd -f nvidia-uvm.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-uvm.ko.zst sudo zstd -f nvidia-peermem.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-peermem.ko.zst # 清理临时文件 sudo rm -rf /tmp/nvidia-modules 步骤6：重启系统 Bash | 复制 sudo reboot 步骤7：验证 Bash | 复制 # 重启后检查 sudo modprobe nvidia nvidia-smi lsmod | grep nvidia dkms有默认的密钥，你可以直接注册而不用搞上面那些东西
本教程将详细指导您如何通过OpenWrt路由器实现所需功能：允许特定设备完全绕过IPv6防火墙限制， 以及将该设备特定端口的入站流量重定向到内网服务器。本教程源自个人进行本服务器网络架构搭建的过程。 应用场景 假设您家中有一个设备（如一台NAS或家庭服务器），您希望： 该设备能无限制地接受IPv6互联网的访问（入站），且不影响IPv6防火墙对其他IPv6设备的保护。 公网用户可以通过IPv6访问该设备上托管的服务 我们将使用OpenWrt强大的防火墙和DHCP功能来实现这一精细化的控制。 第一步：核心思路与准备工作 核心思路：为特定设备分配一个固定的IPv6地址后缀，然后基于此后缀来配置防火墙规则。 这种方法精准、灵活，不依赖于物理网络拓扑变化。 在开始前，请准备好： 一个已安装OpenWrt的路由器。 目标设备的MAC地址（例如：FF:FF:F7:F5:F7:9F）。 要重定向到的内部服务器的IPv4或IPv6地址（例如：192.168.1.200或240e:007:3ccc:996:ffff:ffff:ffff:hffc）。 以上内容都可以从OpenWrt Web界面查看 第二步：为设备分配固定的IPv6后缀 首先，我们需要确保目标设备每次都能获取到一个固定的、易于标识的IPv6地址后缀（如::200）。 登录OpenWrt LUCI管理界面。 进入“网络” -> “DHCP/DNS”。 切换到“静态地址分配”。 点击“添加”按钮新建一条静态租约，并按如下信息填写： MAC地址：填写您目标设备的MAC地址（如FF:FF:F7:F5:F7:9F）。 IPv4地址：设置为固定地址（例如192.168.1.200）。 IPv6后缀：绑定好目标设备的DUID 以上内容可以在状态>概览点击设为静态进行部分设置 点击“保存并应用”。 重启目标设备的网络连接，使其重新获取IP地址。之后，请在设备上使用ipconfig（Windows）或ip addr show（Linux）命令确认其获取到的IPv6地址后缀如::200或::ffff:ffff:ffff:hffc。 第三步：配置防火墙，放行该设备的所有IPv6流量 接下来，我们创建一条防火墙规则，允许拥有该固定后缀的设备的所有IPv6流量通过。 进入“网络” -> “防火墙” -> “通信规则”标签页。 点击“添加”新规则，并进行如下配置： 名称：DMZv6（可自定义） 协议：any（允许所有协议） 源区域：wan 目标区域：lan 源地址：::200/::ffff:ffff:ffff:ffff或::ffff:ffff:ffff:hffc/::ffff:ffff:ffff:ffff 这是最关键的一步。此掩码确保了无论公网IPv6前缀如何变化，规则都只匹配我们设定的固定后缀::200。 操作：接受 点击“保存并应用”。 至此，该设备已能无限制地访问IPv6互联网。您可以在设备上访问 test-ipv6.com 来验证连接是否成功。 最后的重要提示： 安全警告：此操作使设备和服务暴露于公网，请确保设备和服务器的系统安全、SSH密码安全。 动态DNS（DDNS）：由于运营商会动态分配IPv6前缀，您必须配置IPv6 DDNS服务（如使用OpenWrt的ddns-scripts或服务器安装ddns-go），将一个固定域名（如example.com）解析到您变化中的IPv6地址，以便进行外网访问。 测试：您可以从外部网络（如手机移动数据）使用telnet example.com 22命令测试端口是否通畅。 通过以上三个步骤，您就成功地实现了OpenWrt下基于IPv6的精细化管理。
本文档汇集了 Typecho 主题和插件开发中所有可用的 PHP 模板 API 及函数。 目录 Widget\Archive - 主题核心 API Widget\Base\Contents - 内容 API Widget\Base\Comments - 评论 API Widget\Options - 系统配置 API Utils\Helper - 辅助工具 API Hook 系统完整列表 Widget\Archive - 主题核心 API Widget\Archive 是主题开发中最核心的 API，提供了内容循环、分页、页面判断等功能。 循环控制 have() - 检查是否有内容 Php | 复制 while ($this->have()) { // 循环内容 } 返回值: bool - 是否有更多内容 next() - 移动到下一项 Php | 复制 while ($this->have()) { $this->next(); // 处理当前项 } 内容输出 title(\(length = 0, \)trim = '...') - 输出标题 Php | 复制 $this->title(); // 完整标题 $this->title(50, '...'); // 截取标题 参数: $length - 截取长度，0 表示不截取 $trim - 截取后缀 content($more = null) - 输出内容 Php | 复制 $this->content(); // 完整内容 $this->content('阅读全文'); // 带 more 标签截取 参数: $more - more 标签的链接文字 excerpt(\(length = 100, \)trim = '...') - 输出摘要 Php | 复制 $this->excerpt(); // 默认 100 字 $this->excerpt(200, '——'); // 自定义截取 date($format = null) - 输出日期 Php | 复制 $this->date(); // 使用后台设置格式 $this->date('Y-m-d H:i:s'); // 自定义格式 分类与标签 category(\(split = ',', \)link = true, $default = null) - 输出分类 Php | 复制 $this->category(); // 逗号分隔，带链接 $this->category(' / ', false); // 斜线分隔，无链接 $this->category(',', true, '未分类'); // 带默认值 tags(\(split = ',', \)link = true, $default = null) - 输出标签 Php | 复制 $this->tags(); // 逗号分隔，带链接 $this->tags(' ', false); // 空格分隔，纯文本 directory(\(split = '/', \)link = true, $default = null) - 输出多级分类 Php | 复制 $this->directory(' > '); // 输出完整分类路径 作者信息 author($item = 'screenName') - 输出作者信息 Php | 复制 $this->author(); // 昵称 $this->author('url'); // 作者主页 $this->author('mail'); // 作者邮箱 可用字段: screenName, url, mail, uid 评论相关 commentsNum(...$args) - 输出评论数 Php | 复制 $this->commentsNum(); // 直接输出数字 $this->commentsNum('%d 评论'); // 带单位 $this->commentsNum('暂无评论', '1 条评论', '%d 条评论'); // 复数处理 comments() - 获取评论归档对象 Php | 复制 \(comments = \)this->comments(); while ($comments->have()) { $comments->next(); // 处理评论 } 返回值: \Widget\Comments\Archive pings() - 获取引用归档对象 Php | 复制 \(pings = \)this->pings(); 返回值: \Widget\Comments\Ping 分页导航 pageNav(\(prev = '«', \)next = '»', \(splitPage = 3, \)splitWord = '...', $template = '') - 完整分页 Php | 复制 $this->pageNav('« 上一页', '下一页 »', 3, '...'); pageLink(\(word = '« Previous Entries', \)page = 'prev') - 简单分页 Php | 复制 $this->pageLink('« 上一页', 'prev'); // 上一页 $this->pageLink('下一页 »', 'next'); // 下一页 相关内容 theNext(\(format = '%s', \)default = null, $custom = []) - 下一篇 Php | 复制 $this->theNext('下一篇: %s', '没有下一篇了'); thePrev(\(format = '%s', \)default = null, $custom = []) - 上一篇 Php | 复制 $this->thePrev('上一篇: %s', '没有上一篇了'); related(\(limit = 5, \)type = null) - 相关文章 Php | 复制 // 获取相关文章 \(related = \)this->related(5); // 默认按标签 \(related = \)this->related(5, 'author'); // 按作者 while ($related->have()) { $related->next(); // 处理相关文章 } 页面判断 is(\(archiveType, \)archiveSlug = null) - 判断页面类型 Php | 复制 $this->is('index'); // 首页 $this->is('single'); // 单篇文章/页面 $this->is('post'); // 文章 $this->is('page'); // 独立页面 $this->is('category'); // 分类页 $this->is('category', 'default'); // 指定分类 $this->is('tag'); // 标签页 $this->is('search'); // 搜索页 $this->is('archive'); // 归档页 $this->is('author'); // 作者页 $this->is('feed'); // 订阅输出 模板操作 need($fileName) - 加载模板文件 Php | 复制 $this->need('header.php'); // 加载头部 $this->need('sidebar.php'); // 加载侧边栏 $this->need('footer.php'); // 加载底部 header($rule = null) - 输出头部元数据 Php | 复制 $this->header(); // 输出默认头部 $this->header('keywords=&description='); // 自定义输出项 footer() - 输出页脚 Php | 复制 $this->footer(); // 输出页脚（支持插件扩展） 归档信息 archiveTitle(\(defines = null, \)before = ' » ', $end = '') - 输出归档标题 Php | 复制 $this->archiveTitle(); // 默认格式 $this->archiveTitle([ 'category' => '分类 %s 下的文章', 'search' => '搜索: %s', 'tag' => '标签: %s', 'author' => '作者: %s' ], ' - '); keywords(\(split = ',', \)default = '') - 输出关键词 Php | 复制 $this->keywords(); // 逗号分隔 $this->keywords(' ', '默认关键词'); // 自定义分隔符 remember(\(cookieName, \)return = false) - 输出 Cookie 记忆值 Php | 复制 $this->remember('author'); // 记忆的作者名 $this->remember('mail'); // 记忆的邮箱 $this->remember('url'); // 记忆的网址 附件 attachments(\(limit = 0, \)offset = 0) - 获取附件 Php | 复制 \(attachments = \)this->attachments(); while ($attachments->have()) { $attachments->next(); echo $attachments->url; } 属性列表 归档信息: $this->archiveTitle - 归档标题 $this->archiveSlug - 归档缩略名 $this->archiveType - 归档类型 $this->archiveUrl - 归档 URL $this->archiveDescription - 归档描述 $this->archiveKeywords - 归档关键词 Feed 地址: $this->archiveFeedUrl - RSS 2.0 $this->archiveFeedRssUrl - RSS 1.0 $this->archiveFeedAtomUrl - Atom 1.0 分页信息: $this->currentPage - 当前页码 $this->total - 总记录数 $this->getTotalPage() - 总页数 主题路径: $this->themeDir - 主题目录 $this->themeFile - 当前模板文件 Widget\Base\Contents - 内容 API 文章/页面内容的详细属性和方法。 基础属性 Php | 复制 $this->cid; // 内容 ID $this->title; // 标题 $this->slug; // 缩略名 $this->created; // 创建时间戳 $this->modified; // 修改时间戳 $this->text; // 原始内容 $this->order; // 排序 $this->authorId; // 作者 ID $this->template; // 自定义模板 $this->type; // 类型（post/page/attachment） $this->status; // 状态 $this->password; // 密码保护 $this->commentsNum; // 评论数 $this->allowComment; // 允许评论 $this->allowPing; // 允许引用 $this->allowFeed; // 允许 Feed $this->parent; // 父级 ID 动态属性 Php | 复制 $this->permalink; // 永久链接 $this->url; // URL（同 permalink） $this->path; // 路径 $this->feedUrl; // RSS 2.0 $this->feedRssUrl; // RSS 1.0 $this->feedAtomUrl; // Atom 1.0 $this->theId; // 锚点 ID（type-cid） $this->respondId; // 回复框 ID $this->commentUrl; // 评论提交地址 $this->trackbackUrl; // Trackback 地址 $this->responseUrl; // 回复地址 内容属性 Php | 复制 $this->content; // 解析后的内容 $this->excerpt; // 摘要（带 more 标签处理） $this->plainExcerpt; // 纯文本摘要 $this->summary; // 第一段摘要 $this->fields; // 自定义字段对象 $this->attachment; // 附件信息（仅 attachment 类型） 日期属性 Php | 复制 $this->date; // Date 对象 $this->dateWord; // 词义化日期（如"3小时前"） $this->year; // 年份 $this->month; // 月份 $this->day; // 日期 分类标签 Php | 复制 $this->categories; // 分类数组 $this->tags; // 标签数组 $this->directory; // 多级目录数组 作者信息 Php | 复制 $this->author; // 作者对象（Widget\Users\Author） $this->author->uid; // 作者 ID $this->author->screenName; // 昵称 $this->author->url; // 作者主页 $this->author->mail; // 作者邮箱 方法 allow(...$permissions) - 检查权限 Php | 复制 $this->allow('comment'); // 允许评论 $this->allow('ping'); // 允许引用 $this->allow('feed'); // 允许 Feed $this->allow('edit'); // 允许编辑 $this->allow('comment', 'edit'); // 多个权限 返回值: bool isMarkdown - 是否为 Markdown Php | 复制 if ($this->isMarkdown) { // 是 Markdown 格式 } hidden - 是否密码保护 Php | 复制 if ($this->hidden) { // 内容被密码保护 } Widget\Base\Comments - 评论 API 评论系统的属性和方法。 基础属性 Php | 复制 $this->coid; // 评论 ID $this->cid; // 所属内容 ID $this->created; // 创建时间戳 $this->author; // 作者名 $this->authorId; // 作者 ID（注册用户） $this->ownerId; // 内容作者 ID $this->mail; // 邮箱 $this->url; // 网址 $this->ip; // IP 地址 $this->agent; // User Agent $this->text; // 评论内容 $this->type; // 类型（comment/pingback/trackback） $this->status; // 状态 $this->parent; // 父评论 ID $this->commentPage; // 所在评论页 动态属性 Php | 复制 $this->date; // Date 对象 $this->dateWord; // 词义化日期 $this->theId; // 锚点 ID（type-coid） $this->permalink; // 评论链接 $this->title; // 所属内容标题 $this->content; // 解析后的评论内容 $this->parentContent; // 所属内容对象 方法 date($format = null) - 输出日期 Php | 复制 $this->date(); // 默认格式 $this->date('Y-m-d H:i:s'); // 自定义格式 author(\(autoLink = null, \)noFollow = null) - 输出作者 Php | 复制 $this->author(); // 默认带链接 $this->author(false); // 不带链接 $this->author(true, true); // 带 nofollow gravatar(\(size = 32, \)default = null, $highRes = false) - 输出头像 Php | 复制 $this->gravatar(); // 默认 32px $this->gravatar(64); // 64px $this->gravatar(64, 'mm', true); // 高分辨率支持 excerpt(\(length = 100, \)trim = '...') - 输出摘要 Php | 复制 $this->excerpt(); // 默认 100 字 $this->excerpt(50); // 50 字 mail($link = false) - 输出邮箱 Php | 复制 $this->mail(); // 纯邮箱 $this->mail(true); // mailto: 链接 Widget\Options - 系统配置 API 全局选项和系统配置。 URL 方法 siteUrl($path = null) - 网站地址 Php | 复制 $this->options->siteUrl(); // http://example.com $this->options->siteUrl('about/'); // http://example.com/about/ index($path = null) - 首页地址 Php | 复制 $this->options->index(); // 网站首页 themeUrl(\(path = null, \)theme = null) - 主题地址 Php | 复制 $this->options->themeUrl(); // 当前主题 URL $this->options->themeUrl('style.css'); // 主题文件 $this->options->themeUrl(null, 'default'); // 指定主题 pluginUrl($path = null) - 插件地址 Php | 复制 $this->options->pluginUrl(); // 插件目录 $this->options->pluginUrl('MyPlugin/'); // 指定插件 adminUrl(\(path = null, \)return = false) - 后台地址 Php | 复制 $this->options->adminUrl(); // 后台首页 $this->options->adminUrl('write-post.php'); // 写文章页 \(url = \)this->options->adminUrl('manage-posts.php', true); // 返回不输出 Feed 地址 Php | 复制 $this->options->feedUrl; // RSS 2.0 $this->options->feedRssUrl; // RSS 1.0 $this->options->feedAtomUrl; // Atom 1.0 $this->options->commentsFeedUrl; // 评论 RSS 2.0 $this->options->commentsFeedRssUrl; // 评论 RSS 1.0 $this->options->commentsFeedAtomUrl; // 评论 Atom 1.0 系统属性 基本设置 Php | 复制 $this->options->title; // 网站标题 $this->options->description; // 网站描述 $this->options->keywords; // 网站关键词 $this->options->theme; // 当前主题 $this->options->siteUrl; // 网站地址 $this->options->siteDomain; // 网站域名 内容设置 Php | 复制 $this->options->pageSize; // 每页文章数 $this->options->postDateFormat; // 文章日期格式 $this->options->commentDateFormat; // 评论日期格式 $this->options->frontPage; // 首页显示（recent/page:X/file:X） $this->options->frontArchive; // 归档作为首页 评论设置 Php | 复制 $this->options->commentsListSize; // 每页评论数 $this->options->commentsPageSize; // 评论分页大小 $this->options->commentsShowCommentOnly; // 只显示评论 $this->options->commentsThreaded; // 启用嵌套评论 $this->options->commentsOrder; // 评论排序（ASC/DESC） $this->options->commentsMarkdown; // 支持 Markdown $this->options->commentsShowUrl; // 显示评论者网址 $this->options->commentsUrlNofollow; // 添加 nofollow $this->options->commentsAvatar; // 显示头像 $this->options->commentsAvatarRating; // 头像评级 $this->options->commentsPageBreak; // 评论分页 $this->options->commentsHTMLTagAllowed; // 允许的 HTML 标签 $this->options->commentsAntiSpam; // 反垃圾评论 $this->options->commentsAutoClose; // 自动关闭评论 $this->options->commentsPostTimeout; // 关闭评论天数 $this->options->commentsMaxNestingLevels;// 最大嵌套层数 其他设置 Php | 复制 $this->options->allowRegister; // 允许注册 $this->options->allowXmlRpc; // XML-RPC 支持 $this->options->feedFullText; // Feed 输出全文 $this->options->time; // 当前时间戳 $this->options->timezone; // 时区 $this->options->serverTimezone; // 服务器时区 $this->options->generator; // Generator 信息 $this->options->version; // 版本号 $this->options->software; // 软件名称 插件配置 plugin($pluginName) - 获取插件配置 Php | 复制 \(config = \)this->options->plugin('HelloWorld'); echo $config->word; // 访问配置项 返回值: \Typecho\Config personalPlugin($pluginName) - 获取个人插件配置 Php | 复制 \(config = \)this->options->personalPlugin('HelloWorld'); 其他方法 themeFile(\(theme, \)file = '') - 获取主题文件路径 Php | 复制 \(path = \)this->options->themeFile('default', 'index.php'); pluginDir($plugin = null) - 获取插件目录 Php | 复制 \(dir = \)this->options->pluginDir('HelloWorld'); adminStaticUrl(\(type, \)file = null, $return = false) - 后台静态文件地址 Php | 复制 $this->options->adminStaticUrl('css', 'style.css'); Utils\Helper - 辅助工具 API 插件开发辅助工具类。 路由管理 addRoute(\(name, \)url, \(widget, \)action = null, $after = null) - 添加路由 Php | 复制 use Utils\Helper; Helper::addRoute( 'myplugin-api', // 路由名称 '/api/myplugin/[action:alpha]', // 路由路径 'MyPlugin_Action', // 处理 Widget 'api', // 动作方法 'post' // 在 post 路由之后 ); removeRoute($name) - 删除路由 Php | 复制 Helper::removeRoute('myplugin-api'); Action 扩展 addAction(\(actionName, \)widgetName) - 添加 Action Php | 复制 Helper::addAction('my-action', 'MyPlugin_Action'); // 访问: /action/my-action removeAction($actionName) - 删除 Action Php | 复制 Helper::removeAction('my-action'); 后台菜单 addMenu($menuName) - 添加菜单 Php | 复制 $menuIndex = Helper::addMenu('MyPlugin'); // 返回菜单索引，用于添加子面板 removeMenu($menuName) - 删除菜单 Php | 复制 $menuIndex = Helper::removeMenu('MyPlugin'); 后台面板 addPanel(\(index, \)fileName, \(title, \)subTitle, \(level, \)hidden = false, $addLink = '') - 添加面板 Php | 复制 $menuIndex = Helper::addMenu('MyPlugin'); Helper::addPanel( $menuIndex, // 菜单索引 'panel.php', // 面板文件 '插件设置', // 标题 '配置插件参数', // 副标题 'administrator', // 权限 false, // 是否隐藏 '新增数据' // 新增链接 ); removePanel(\(index, \)fileName) - 删除面板 Php | 复制 $menuIndex = Helper::removeMenu('MyPlugin'); Helper::removePanel($menuIndex, 'panel.php'); 工具方法 options() - 获取 Options 对象 Php | 复制 $options = Helper::options(); echo $options->title; 返回值: \Widget\Options security() - 获取 Security 对象 Php | 复制 $security = Helper::security(); \(token = \)security->getToken($url); 返回值: \Widget\Security url($fileName) - 获取面板 URL Php | 复制 $url = Helper::url('panel.php'); // 输出: /admin/extending.php?panel=panel.php widgetById(\(table, \)pkId) - 根据 ID 获取 Widget Php | 复制 $post = Helper::widgetById('contents', 1); $comment = Helper::widgetById('comments', 1); $category = Helper::widgetById('metas', 1); $user = Helper::widgetById('users', 1); setOption(\(name, \)value) - 设置系统选项 Php | 复制 Helper::setOption('plugin:MyPlugin', ['key' => 'value']); configPlugin(\(pluginName, \)settings, $isPersonal = false) - 配置插件 Php | 复制 Helper::configPlugin('MyPlugin', [ 'option1' => 'value1', 'option2' => 'value2' ]); removePlugin($pluginName) - 强行删除插件 Php | 复制 Helper::removePlugin('MyPlugin'); 评论辅助 replyLink(\(theId, \)coid, \(word = 'Reply', \)formId = 'respond', $style = 2) - 评论回复链接 Php | 复制 Helper::replyLink('comment-123', 456, '回复'); cancelCommentReplyLink(\(word = 'Cancel', \)formId = 'respond') - 取消回复链接 Php | 复制 Helper::cancelCommentReplyLink('取消回复'); threadedCommentsScript() - 输出嵌套评论脚本 Php | 复制 Helper::threadedCommentsScript(); requestService(\(method, ...\)params) - 请求异步服务 Php | 复制 Helper::requestService('methodName', \(param1, \)param2); lang($domain) - 导入语言项 Php | 复制 Helper::lang('MyPlugin'); Hook 系统完整列表 Typecho 的 Hook 系统允许插件在特定位置扩展功能。 核心系统 Hook index.php Hook 名称 类型 参数 说明 begin call 无 系统启动时调用 end call 无 系统结束时调用 admin/common.php Hook 名称 类型 参数 说明 begin call 无 后台公共初始化 admin/header.php Hook 名称 类型 参数 说明 header filter $header 过滤后台头部 CSS admin/footer.php Hook 名称 类型 参数 说明 begin call 无 后台底部开始 end call 无 后台底部结束 admin/menu.php Hook 名称 类型 参数 说明 navBar call 无 后台导航栏扩展 内容编辑 Hook admin/write-post.php / admin/write-page.php Hook 名称 类型 参数 说明 content call \(post/\)page 内容编辑区域 option call \(post/\)page 选项侧边栏 advanceOption call \(post/\)page 高级选项 richEditor call+trigger \(post/\)page 富文本编辑器替换 bottom call \(post/\)page 页面底部扩展 admin/editor-js.php Hook 名称 类型 参数 说明 markdownEditor call $content Markdown 编辑器增强 admin/write-js.php Hook 名称 类型 参数 说明 write call 无 编写页面 JS 增强 Widget 内容展示 Hook Widget\Archive Hook 名称 类型 参数 说明 select filter $query 过滤数据库查询 handleInit call $archive 内容初始化后 handle call \(archive`, `\)type 自定义内容处理 headerOptions filter \(options`, `\)archive 过滤头部选项 header call \(header`, `\)archive 头部渲染时 footer call $archive 底部渲染时 beforeRender call $archive 模板渲染前 afterRender call $archive 模板渲染后 indexHandle call \(archive`, `\)select 首页处理 singleHandle call \(archive`, `\)select 单篇处理 categoryHandle call \(archive`, `\)select 分类处理 tagHandle call \(archive`, `\)select 标签处理 authorHandle call \(archive`, `\)select 作者处理 dateHandle call \(archive`, `\)select 日期处理 searchHandle call \(archive`, `\)select 搜索处理 error404Handle call \(archive`, `\)select 404 处理 search call \(archive`, `\)keywords 搜索操作 feedItem filter $item 过滤 RSS/Atom 项目 pageNav call 多个参数 分页导航 Widget\Base\Contents Hook 名称 类型 参数 说明 filter filter \(row`, `\)widget 过滤内容行数据 title filter \(title`, `\)widget 过滤标题 excerpt filter \(excerpt`, `\)widget 过滤摘要 excerptEx filter \(excerpt`, `\)widget 扩展摘要过滤 markdown filter \(text`, `\)widget 过滤 Markdown autoP filter \(text`, `\)widget 过滤自动段落 content filter \(content`, `\)widget 过滤内容 contentEx filter \(content`, `\)widget 扩展内容 isFieldReadOnly call+trigger $fieldName 检查字段只读 getDefaultFieldItems filter $items 添加默认字段 Widget\Base\Comments Hook 名称 类型 参数 说明 filter filter \(row`, `\)widget 过滤评论行数据 gravatar call+trigger \(email`, `\)size, \(rating`, `\)default, $widget 自定义头像 markdown filter \(text`, `\)widget 过滤 Markdown autoP filter \(text`, `\)widget 过滤自动段落 content filter \(content`, `\)widget 过滤评论内容 contentEx filter \(content`, `\)widget 扩展评论内容 内容管理 Hook Widget\Contents\Post\Edit / Page\Edit Hook 名称 类型 参数 说明 write filter \(post/\)page 过滤写入数据 finishPublish call \(post/\)page 发布完成 finishSave call \(post/\)page 保存完成 mark call \(post/\)page 状态标记 finishMark call \(post/\)page 标记完成 delete call \(post/\)page 删除时 finishDelete call \(post/\)page 删除完成 Widget\Comments\Edit Hook 名称 类型 参数 说明 mark call $comment 状态标记 delete call $comment 删除时 finishDelete call $comment 删除完成 edit filter $comment 过滤编辑数据 finishEdit call $comment 编辑完成 listComments filter $options 过滤列表选项 用户系统 Hook Widget\User Hook 名称 类型 参数 说明 register filter $user 过滤注册数据 finishRegister call $user 注册完成 logout call 无 登出时 Widget\Login Hook 名称 类型 参数 说明 login call \(name`, `\)password, $remember 登录尝试 hashValidate call+trigger \(password`, `\)hash 密码验证 loginSucceed call $user 登录成功 loginFail call $user 登录失败 simpleLoginSucceed call $user 简单登录成功 simpleLoginFail call $name 简单登录失败 文件上传 Hook Widget\Upload Hook 名称 类型 参数 说明 deleteHandle call+trigger $content 自定义删除处理 attachmentHandle call+trigger $attachment 自定义附件 URL attachmentDataHandle call+trigger $content 自定义附件数据 beforeModify call $file 修改前 modify call $file 修改时 modifyHandle call+trigger $file 自定义修改 beforeUpload call $file 上传前 upload call $file 上传时 uploadHandle call+trigger $file 自定义上传 评论反馈 Hook Widget\Feedback Hook 名称 类型 参数 说明 comment filter $comment 过滤评论数据 finishComment call $comment 评论完成 reply call \(comment`, `\)parent 回复时 cancelReply call 无 取消回复 trackback filter $trackback 过滤引用 finishTrackback call $trackback 引用完成 pingback filter $pingback 过滤 Pingback finishPingback call $pingback Pingback 完成 其他系统 Hook Widget\Backup Hook 名称 类型 参数 说明 export call $backup 备份导出 Widget\XmlRpc Hook 名称 类型 参数 说明 textFilter filter $text 过滤文本内容 Widget 动态扩展 动态属性 使用 ___ 前缀添加自定义属性： Php | 复制 // 注册 \Typecho\Plugin::factory('Widget\Archive')->___readTime = [Plugin::class, 'getReadTime']; // 实现 public static function getReadTime($archive) { return ceil($archive->length / 300); } // 模板中使用 <?php echo $this->readTime; ?> 动态方法 使用 call 前缀添加自定义方法： Php | 复制 // 注册 \Typecho\Plugin::factory('Widget\Archive')->callCustomMethod = [Plugin::class, 'handleMethod']; // 实现 public static function handleMethod(\(archive, \)args) { echo 'Custom output'; } // 模板中调用 <?php $this->customMethod(); ?> 附录：常用代码示例 基本文章循环 Php | 复制 <?php while ($this->next()): ?> <a href="<?php \(this->permalink(); ?>"><?php \)this->title(); ?> <?php $this->date('Y-m-d'); ?> · <?php $this->author(); ?> · <?php $this->commentsNum(); ?> <?php $this->content('阅读全文'); ?> <?php $this->tags(' ', true, '无标签'); ?> <?php endwhile; ?> 评论列表 Php | 复制 <?php \(comments = \)this->comments(); ?> <?php while ($comments->next()): ?> <li id="<?php $comments->theId(); ?>"> <?php $comments->gravatar(40); ?> <?php $comments->author(); ?> <?php $comments->date(); ?> <?php $comments->content(); ?> <?php endwhile; ?> 条件判断 Php | 复制 <?php if ($this->is('index')): ?> <?php elseif ($this->is('post')): ?> <?php elseif ($this->is('page')): ?> <?php elseif ($this->is('category')): ?> <?php else: ?> <?php endif; ?> 获取自定义字段 Php | 复制 <?php \(thumb = \)this->fields->thumb; if (!empty($thumb)) { echo ' title . '" />'; } ?> 版本说明 本文档基于 Typecho 1.3+ 版本整理，部分 API 在旧版本中可能不可用。 文档生成时间: 2026-02-03 适用版本: Typecho 1.3+
完整 Markdown 语法与扩展功能参考手册 标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落与换行 这是第一段。在 Markdown 中，段落由空行分隔。 这是第二段。 手动换行：在行尾添加两个空格，然后回车。 就像这样。 或者直接使用反斜杠换行\ 这是新行。 文本样式 粗体文本 粗体文本（替代语法） 斜体文本 斜体文本（替代语法） 粗斜体文本 粗斜体文本 粗斜体文本 删除线文本 高亮文本（GFM 扩展） 上标：H2O 或 H2O 下标：X2 或 X2 行内代码 列表 无序列表 项目一 嵌套项目一 深度嵌套 嵌套项目二 项目二 替代符号 嵌套 另一种符号 嵌套 有序列表 第一项 嵌套第一项 嵌套第二项 第二项 第三项 任务列表 已完成任务 未完成任务 另一个任务 定义列表 术语一 定义一 另一个定义 术语二 定义二 链接 内联链接 引用链接 相对路径链接 同一页面锚点 https://自动链接.com email@example.com 图片 带尺寸的图片： 带链接的图片： 代码块 围栏代码块 Javascript | 复制 function helloWorld() { console.log("Hello, world!"); return true; } Python | 复制 def fibonacci(n): if n <= 1: return n return fibonacci(n-1) + fibonacci(n-2) 缩进代码块（4个空格或1个制表符） // 这是缩进代码块 const x = 10; console.log(x); 带行号的代码块（部分扩展） Diff | 复制 - const oldCode = "deprecated"; + const newCode = "recommended"; 引用 这是一级引用。 这是嵌套引用。 返回一级引用。 多段落引用： 这是第二个段落。 嵌套在引用中。 水平线 表格 表头左对齐 表头居中 表头右对齐 单元格 单元格 单元格 长文本单元格 粗体 $9.99 代码 斜体 100 简单表格： 左对齐表头 | 居中表头 | 右对齐表头 --- | :---: | ---: 内容 | 内容 | 内容 脚注 这是一个带脚注的句子1。另一个脚注2。 数学公式（部分扩展支持） 行内公式 质能方程：\(E = mc^2\)，勾股定理：\(a^2 + b^2 = c^2\) 块级公式 \[\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}\] \[\begin{pmatrix} a & b \\ c & d \end{pmatrix}\] 转义字符 *星号* _下划线_ `反引号` [左括号] (圆括号) #井号 \ 反斜杠 ~ 波浪线 - 连字符 . 句点 ! 感叹号 特殊元素 折叠/详情 注释 内联 HTML HTML 段落 Ctrl+C 复制 进度条（非标准） 进度：75% 米尺 使用量：6 out of 10 表情符号 :smile: :heart: :+1: :-1: :rocket: 直接 Unicode 表情：😀 ❤️ 🚀 图表（Mermaid，部分扩展支持） graph TD; A[开始] --> B{判断}; B -->|是| C[执行操作]; B -->|否| D[结束]; C --> D; pie title 饼图示例 "苹果" : 45.0 "香蕉" : 25.0 "橙子" : 30.0 横排卡片（自定义语法） ::: card-group :: card 卡片 1 内容 :: :: card 卡片 2 更多内容 :: :: 提示框/告警框（自定义语法） [!NOTE] 这是一个提示信息。 [!TIP] 这是一个小技巧。 [!WARNING] 这是一个警告。 [!DANGER] 危险操作！ ℹ️ 容器语法测试 这是一个信息说明块，用于补充背景知识。 ⚠️ 容器语法测试 这是一个警告信息，用于提醒读者注意潜在问题。 时间戳 2024年元旦 缩写 这是 HTML 的缩写：*[HTML]: HyperText Markup Language 插入符号 这是 插入 文本。 键盘按键 按 Ctrl + Alt + Delete 重启。 内联属性（部分扩展） 这是一个 {.red #special}带属性的段落。 锚点 章节标题 跳转到第一节。 术语表 术语 ~ 定义 另一个术语 ~ 另一个定义 任务列表进度 任务完成情况： [2/5] 任务 1 任务 2 任务 3 任务 4 任务 5 内联属性（属性列表） 特殊标题 {#custom-id .class-name data-count=5} 这是一段 {.highlight #important}带有属性的文本。
准备工作 Linux Live USB（如Ubuntu、Linux Mint等） 确保电脑从Live USB启动 Bash | 复制 # 在Live环境中安装并使用Boot Repair sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair # 运行Boot Repair sudo boot-repair 重启后在你原来的系统上，再执行以上命令
本文档基于Typecho默认模板代码和官方文档整理，涵盖了所有可用的PHP模板API。 整理时间：2026年2月 模板路径：/home/nmb/code/博客UI增强/md/default/ 📋 目录结构 Bash | 复制 default/ ├── 404.php # 404错误页面 ├── comments.php # 评论模块 ├── footer.php # 页脚模块 ├── functions.php # 主题配置与自定义函数 ├── header.php # 页头模块 ├── index.php # 首页/文章列表 ├── page.php # 独立页面 ├── post.php # 文章详情页 ├── sidebar.php # 侧边栏 ├── style.css # 主题样式 ├── grid.css # 网格布局样式 ├── normalize.css # CSS重置样式 ├── screenshot.png # 主题缩略图 └── img/ # 图片资源目录 📊 API统计概览 类别 数量 说明 核心对象 $this API 约35个 模板核心方法 选项对象 $this->options API 约18个 站点设置方法 用户对象 $this->user API 3个 用户相关方法 评论对象 API 约15个 评论相关方法 Widget类 API 8个 内容组件类 全局函数 API 6个 辅助函数 表单元素 API 3种 主题配置元素 文件结构说明 文件名 作用 必须性 style.css 主题样式文件 否 screenshot.png 主题缩略图 否 index.php 首页以及说明文件 是 404.php 404页面文件 否 archive.php 通用（分类、搜索、标签、作者）页面文件 否 category.php 分类页面文件 否 search.php 搜索页面文件 否 tag.php 标签页面文件 否 author.php 作者页面文件 否 comments.php 评论页面文件 否 footer.php 底部页面文件 否 functions.php 主题函数文件 否 header.php 头部页面文件 否 page.php 独立页面文件 否 post.php 日志页面文件 否 sidebar.php 侧边栏页面文件 否 注：如果archive.php不存在，index.php也会作为通用页面，实现archive.php的工作。 一、核心对象 $this API 1.1 模板加载API 方法 参数 返回值 说明 使用示例 need() \(file` | void | 引入模板文件 | `\)this->need('header.php')$this->need('footer.php') 1.2 页面类型判断API 方法 参数 返回值 说明 使用示例 is() \(type, \)param bool 判断当前页面类型 \(this->is('index')` `\)this->is('post')\(this->is('page')` `\)this->is('category')\(this->is('category', 'default')` `\)this->is('tag')\(this->is('author')` `\)this->is('archive')\(this->is('single')` `\)this->is('search') 页面类型判断示例： Php | 复制 <?php if ($this->is('post')): ?> <?php elseif ($this->is('page')): ?> <?php elseif ($this->is('category', 'default')): ?> <?php endif; ?> 1.3 文章循环API 方法 参数 返回值 说明 使用示例 have() 无 bool 是否有文章 $this->have() next() 无 void 移动到下一篇文章 $this->next() 文章循环示例： Php | 复制 <?php if ($this->have()): ?> <?php while ($this->next()): ?> <?php $this->title() ?> <?php $this->content() ?> <?php endwhile; ?> <?php else: ?> 没有找到内容 <?php endif; ?> 1.4 文章内容API 方法 参数 返回值 说明 使用示例 content() \(more` | void | 输出文章内容 | `\)this->content(_t('阅读剩余部分'))$this->content('Continue Reading...') title() 无 void 输出文章标题 \(this->title()` `\)archive->title() permalink() 无 void 输出文章链接 \(this->permalink()` `\)archive->permalink() date() \(format` | void | 输出日期 | `\)this->date('F j, Y')\(this->date('c')` `\)archive->date() 日期格式参考： Y - 4位年份 (如 2026) m - 月份 (01-12) d - 日期 (01-31) H:i - 时间 (24小时制) F j, Y - 英文日期格式 (如 February 3, 2026) 1.5 标签API 方法 参数 返回值 说明 使用示例 tags() \(split, \)link, \(default` | void | 输出标签 | `\)this->tags(', ', true, 'none') 参数说明： $split: 标签分隔符 $link: 是否显示为链接 $default: 没有标签时显示的内容 1.6 分类API 方法 参数 返回值 说明 使用示例 category() \(split` | void | 输出分类 | `\)this->category(',')$archive->category(',') 1.7 作者API 方法 参数 返回值 说明 使用示例 author() 无 Object 获取作者对象 \(this->author()` `\)archive->author() 作者对象方法： Php | 复制 $archive->author(); // 输出作者名 $archive->author->permalink(); // 输出作者链接 1.8 评论API 方法 参数 返回值 说明 使用示例 comments() \(type` | Object | 获取评论对象 | `\)this->comments()->to(\(comments)` `\)this->comments('comment')->to(\(comments)` `\)this->comments('trackback')->to(\(trackbacks)` `\)this->comments('pingback')->to($pingbacks) commentsNum() \(none, \)one, \(more` | void | 输出评论数 | `\)this->commentsNum(_t('暂无评论'), _t('1 条评论'), _t('%d 条评论')) allow() \(capability` | bool | 判断权限 | `\)this->allow('comment') commentUrl() 无 void 输出评论提交URL $this->commentUrl() respondId() 无 void 输出评论回复区ID $this->respondId() remember() \(field` | void | 输出记住的字段 | `\)this->remember('author')\(this->remember('mail')` `\)this->remember('url')$this->remember('text') 评论类型过滤： Php | 复制 // 显示全部（默认） \(this->comments()->to(\)comments); // 只显示评论 \(this->comments('comment')->to(\)comments); // 只显示引用通告 \(this->comments('trackback')->to(\)trackbacks); // 只显示引用通知 \(this->comments('pingback')->to(\)pingbacks); 1.9 分页API 方法 参数 返回值 说明 使用示例 pageNav() \(prev, \)next, \(splitPage, \)prevWord, \(nextWord` | void | 输出分页导航 | `\)this->pageNav()$this->pageNav('« 前一页', '后一页 »') 1.10 上下文导航API 方法 参数 返回值 说明 使用示例 thePrev() \(format, \)default void 输出上一篇链接 $this->thePrev('%s', _t('没有了')) theNext() \(format, \)default void 输出下一篇链接 $this->theNext('%s', _t('没有了')) 1.11 归档标题API 方法 参数 返回值 说明 使用示例 archiveTitle() \(format, \)before, \(end` | void | 输出归档标题 | `\)this->archiveTitle(['category' => _t('分类 %s 下的文章'), 'search' => _t('包含关键字 %s 的文章'), 'tag' => _t('标签 %s 下的文章'), 'author' => _t('%s 发布的文章')], '', ' - ') 参数说明： $format: 多级菜单间的分隔符，如 » 或 - $before: title 前显示的字符 $end: title 后显示的字符 自定义title示例： Php | 复制 // 默认：站点名称 » 页面标题 <?php \(this->options->title(); ?><?php \)this->archiveTitle(); ?> // 自定义：页面标题 - 站点名称 <?php \(this->archiveTitle('', '', ' - '); ?><?php \)this->options->title(); ?> 1.12 头部/底部输出API 方法 参数 返回值 说明 使用示例 header() \(keywords` | void | 输出HTML头部信息 | `\)this->header()$this->header('keywords=&generator=&template=&pingback=&xmlrpc=&wlw=') footer() 无 void 输出底部脚本 $this->footer() 头部信息过滤参数： keywords: 关键词 description: 描述、摘要 rss1: feed rss1.0 rss2: feed rss2.0 atom: feed atom generator: 程序版本等 template: 模板名称 pingback: 文章引用 xmlrpc: 离线写作 wlw: Windows Live Writer离线写作 commentReply: 评论回复 1.13 相关文章API 方法 参数 返回值 说明 使用示例 related() \(limits, \)type Object 获取相关文章 \(this->related(5)->to(\)relatedPosts)\(this->related(5, 'author')->to(\)relatedPosts) 参数说明： $limits: 默认值为5，表示显示的相关文章数量 \(type`: 默认值为NULL，表示文章的相关方式，只接受`author`。当`\)type为author时，根据用户显示相关文章；为其他值时，根据标签显示相关文章 相关文章调用示例： Php | 复制 <?php \(this->related(5)->to(\)relatedPosts); ?> <?php while ($relatedPosts->next()): ?> <a href="<?php \(relatedPosts->permalink(); ?>" title="<?php \)relatedPosts->title(); ?>"> <?php $relatedPosts->title(); ?> <?php endwhile; ?> 二、选项对象 $this->options API 2.1 基础设置API 方法 参数 返回值 说明 使用示例 title() 无 void 输出站点标题 $this->options->title() description() 无 void 输出站点描述 $this->options->description() charset() 无 void 输出字符编码 $this->options->charset() siteUrl() 无 void 输出站点URL $this->options->siteUrl() 2.2 主题设置API 方法 参数 返回值 说明 使用示例 themeUrl() \(file` | void | 输出主题文件URL | `\)this->options->themeUrl('style.css')\(this->options->themeUrl('normalize.css')` `\)this->options->themeUrl('grid.css') logoUrl 无 string 自定义Logo地址 $this->options->logoUrl sidebarBlock 无 array 侧边栏配置 $this->options->sidebarBlock 2.3 评论设置API 方法 参数 返回值 说明 使用示例 commentsRequireMail 无 bool 评论是否必填邮箱 $this->options->commentsRequireMail commentsRequireUrl 无 bool 评论是否必填网址 $this->options->commentsRequireUrl 2.4 用户相关API 方法 参数 返回值 说明 使用示例 profileUrl() 无 void 输出个人资料URL $this->options->profileUrl() logoutUrl() 无 void 输出登出URL $this->options->logoutUrl() adminUrl() \(url` | void | 输出后台管理URL | `\)this->options->adminUrl()$this->options->adminUrl('login.php') index() \(path` | void | 输出特定功能URL | `\)this->options->index('Logout.do') 2.5 RSS订阅API 方法 参数 返回值 说明 使用示例 feedUrl() 无 void 输出文章RSS $this->options->feedUrl() commentsFeedUrl() 无 void 输出评论RSS $this->options->commentsFeedUrl() 三、用户对象 $this->user API 方法 参数 返回值 说明 使用示例 hasLogin() 无 bool 用户是否已登录 $this->user->hasLogin() screenName() 无 void 输出用户昵称 $this->user->screenName() 四、评论对象 API ($comments) 4.1 评论循环API 方法 参数 返回值 说明 使用示例 to() \(object` | void | 将评论赋值给变量 | `\)this->comments()->to($comments) have() 无 bool 是否有评论 $comments->have() next() 无 void 移动到下一条评论 $comments->next() 4.2 评论基础API 方法 参数 返回值 说明 使用示例 listComments() 无 void 列出所有评论 $comments->listComments() pageNav() 无 void 评论分页导航 $comments->pageNav() 4.3 评论信息API 方法 参数 返回值 说明 使用示例 permalink() 无 void 输出评论所在文章链接 $comments->permalink() author() \(autoLink` | void | 输出评论作者 | `\)comments->author()$comments->author(false) excerpt() \(length, \)suffix void 输出评论摘要 \(comments->excerpt(10, '[...]')` `\)comments->excerpt(35, '...') content() 无 void 输出评论内容 $comments->content() date() \(format` | void | 输出评论日期 | `\)comments->date('F jS, Y')\(comments->date('h:i a')` `\)comments->date('Y-m-d H:i') 4.4 评论进阶API 方法/属性 参数 返回值 说明 使用示例 theId() 无 void 输出评论唯一ID $comments->theId() sequence() 无 int 评论所在楼层 $comments->sequence() responseUrl() 无 void 回复地址 $comments->responseUrl() responseId() 无 void 回复框ID $comments->responseId() trackbackUrl() 无 void Trackback地址 $comments->trackbackUrl() gravatar() \(size, \)default, \(rating, \)alt void 头像显示 \(comments->gravatar(40, '', '', 'avatar')` `\)comments->gravatar('40', '') reply() \(word` | void | 回复按钮 | `\)comments->reply()$comments->reply('回复') threadedComments() \(options` | void | 嵌套评论 | `\)comments->threadedComments($options) children 属性 mixed 子评论属性 if ($comments->children) { ... } levels 属性 int 评论层级 $comments->levels levelsAlt() \(odd, \)even void 层级交替样式 $comments->levelsAlt(' comment-level-odd', ' comment-level-even') alt() \(odd, \)even void 交替样式 $comments->alt(' comment-odd', ' comment-even') authorId 属性 int 作者ID $comments->authorId ownerId 属性 int 文章作者ID $comments->ownerId 4.5 评论回复API 方法 参数 返回值 说明 使用示例 cancelReply() 无 void 输出取消回复链接 $comments->cancelReply() 4.6 自定义嵌套评论示例 Php | 复制 <?php function threadedComments(\(comments, \)options) { $commentClass = ''; if ($comments->authorId) { if (\(comments->authorId == \)comments->ownerId) { $commentClass .= ' comment-by-author'; // 文章作者的评论 } else { $commentClass .= ' comment-by-user'; // 已登录用户的评论 } } \(commentLevelClass = \)comments->levels > 0 ? ' comment-child' : ' comment-parent'; ?> <li id="li-<?php $comments->theId(); ?>" class="comment-body<?php if ($comments->levels > 0) { echo ' comment-child'; $comments->levelsAlt(' comment-level-odd', ' comment-level-even'); } else { echo ' comment-parent'; } $comments->alt(' comment-odd', ' comment-even'); echo $commentClass; ?>"> <div id="<?php $comments->theId(); ?>"> <?php $comments->gravatar('40', ''); ?> <?php $comments->author(); ?> <a href="<?php \(comments->permalink(); ?>"><?php \)comments->date('Y-m-d H:i'); ?> <?php $comments->reply(); ?> <?php $comments->content(); ?> <?php if ($comments->children) { ?> <?php \(comments->threadedComments(\)options); ?> <?php } ?> <?php } ?> 五、Widget类 API 5.1 页面列表 Widget 类 方法 参数 说明 使用示例 \Widget\Contents\Page\Rows alloc() 无 分配页面列表Widget \Widget\Contents\Page\Rows::alloc()->to($pages) - next() 无 移动到下一页 $pages->next() - slug 属性 页面缩略名 $pages->slug - permalink() 无 输出页面链接 $pages->permalink() - title() 无 输出页面标题 $pages->title() 页面导航示例： Php | 复制 <a<?php if ($this->is('index')): ?> class="current"<?php endif; ?> href="<?php $this->options->siteUrl(); ?>">首页 <?php \Widget\Contents\Page\Rows::alloc()->to($pages); ?> <?php while ($pages->next()): ?> <a<?php if (\(this->is('page', \)pages->slug)): ?> class="current"<?php endif; ?> href="<?php $pages->permalink(); ?>" title="<?php \(pages->title(); ?>"><?php \)pages->title(); ?> <?php endwhile; ?> 5.2 最新文章 Widget 类 方法 参数 说明 使用示例 \Widget\Contents\Post\Recent alloc() 无 分配最新文章Widget \Widget\Contents\Post\Recent::alloc()->parse(' {title} ') - parse() $pattern 解析输出格式 参见示例 占位符： {permalink}: 文章链接 {title}: 文章标题 5.3 最近评论 Widget 类 方法 参数 说明 使用示例 \Widget\Comments\Recent alloc() 无 分配最近评论Widget \Widget\Comments\Recent::alloc()->to($comments) 最近评论示例： Php | 复制 <?php \Widget\Comments\Recent::alloc()->to($comments); ?> <?php while ($comments->next()): ?> <a href="<?php \(comments->permalink(); ?>"><?php \)comments->author(false); ?>: <?php $comments->excerpt(35, '...'); ?> <?php endwhile; ?> 5.4 分类 Widget 类 方法 参数 说明 使用示例 \Widget\Metas\Category\Rows alloc() 无 分配分类Widget \Widget\Metas\Category\Rows::alloc()->listCategories('wrapClass=widget-list') 占位符（parse模式）： {permalink}: 分类链接 {name}: 分类名称 {count}: 该分类下文章数 {description}: 分类描述 分类列表示例： Php | 复制 // 方法一：使用listCategories <?php \Widget\Metas\Category\Rows::alloc()->listCategories('wrapClass=widget-list'); ?> // 方法二：使用parse（带描述） <?php \Widget\Metas\Category\Rows::alloc() ->parse(' {name} ({count}) '); ?> // 方法三：获取分类描述 <?php echo $this->getDescription(); ?> 5.5 归档 Widget 类 方法 参数 说明 使用示例 \Widget\Contents\Post\Date alloc() $options 分配归档Widget \Widget\Contents\Post\Date::alloc('type=month&format=F Y')->parse(' {date} ') 参数说明： type: 归档类型 (year/month/day) format: 日期格式 占位符： {permalink}: 归档链接 {date}: 归档日期 5.6 自定义分类文章 Widget 类 方法 参数 说明 使用示例 \Widget\Archive alloc() \(name, \)params 自定义查询Widget \(this->widget('Widget_Archive@myCustomCategory', 'type=category', 'mid=1')->to(\)categoryPosts) 调用指定分类文章示例： Php | 复制 <?php \(this->widget('Widget_Archive@myCustomCategory', 'type=category', 'mid=1')->to(\)categoryPosts); if ($categoryPosts->have()): while ($categoryPosts->next()): // 显示文章 <a href="<?php \(categoryPosts->permalink(); ?>"><?php \)categoryPosts->title(); ?> endwhile; endif; ?> 5.7 Widget占位符汇总表 占位符 说明 适用Widget {permalink} 链接地址 Post\Recent, Post\Date, Category, Page {title} 标题 Post\Recent, Post\Date, Page {date} 日期 Post\Date {name} 名称 Category {count} 数量 Category {description} 描述 Category 六、全局函数 API 6.1 翻译函数 函数 参数 返回值 说明 使用示例 _e() $string void 输出翻译文本 _e('首页')_e('搜索')_e('暂无评论')_e('阅读剩余部分') _t() $string string 返回翻译文本 _t('暂无评论')_t('显示最新文章') 6.2 主题配置函数 函数 参数 返回值 说明 使用示例 themeConfig() \(form` | void | 主题配置回调 | `function themeConfig(\)form) { ... } themeFields() \(layout` | void | 文章字段配置 | `function themeFields(\)layout) { ... } themeInit() \(archive` | void | 主题初始化 | `function themeInit(\)archive) { ... } themeInit示例： Php | 复制 function themeInit($archive) { if ($archive->is('category', 'jobs')) { $archive->parameter->pageSize = 10; // 自定义分类文章显示条数 } } 七、表单元素 API (主题配置) 7.1 文本输入框 Php | 复制 new \Typecho\Widget\Helper\Form\Element\Text( 'name', // 字段名 null, // 值 null, // 默认值 _t('标题'), // 标签 _t('描述') // 说明 ) 示例： Php | 复制 $logoUrl = new \Typecho\Widget\Helper\Form\Element\Text( 'logoUrl', null, null, _t('站点 LOGO 地址'), _t('在这里填入一个图片 URL 地址, 以在网站标题前加上一个 LOGO') ); \(form->addInput(\)logoUrl->addRule('url', _t('请填写一个合法的URL地址'))); 7.2 复选框 Php | 复制 new \Typecho\Widget\Helper\Form\Element\Checkbox( 'name', // 字段名 [ // 选项 'ShowRecentPosts' => _t('显示最新文章'), 'ShowRecentComments' => _t('显示最近回复'), 'ShowCategory' => _t('显示分类'), 'ShowArchive' => _t('显示归档'), 'ShowOther' => _t('显示其它杂项') ], ['ShowRecentPosts', 'ShowRecentComments'], // 默认选中 _t('侧边栏显示') // 标签 ) 示例： Php | 复制 $sidebarBlock = new \Typecho\Widget\Helper\Form\Element\Checkbox( 'sidebarBlock', [ 'ShowRecentPosts' => _t('显示最新文章'), 'ShowRecentComments' => _t('显示最近回复'), 'ShowCategory' => _t('显示分类'), 'ShowArchive' => _t('显示归档'), 'ShowOther' => _t('显示其它杂项') ], ['ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowArchive', 'ShowOther'], _t('侧边栏显示') ); \(form->addInput(\)sidebarBlock->multiMode()); 7.3 表单方法 方法 参数 说明 使用示例 addInput() \(element` | 添加输入元素 | `\)form->addInput($logoUrl) addRule() \(rule, \)message 添加验证规则 $logoUrl->addRule('url', _t('请填写一个合法的URL地址')) multiMode() 无 启用多选模式 $sidebarBlock->multiMode() 7.4 完整主题配置示例 Php | 复制 <?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; function themeConfig($form) { // Logo设置 $logoUrl = new \Typecho\Widget\Helper\Form\Element\Text( 'logoUrl', null, null, _t('站点 LOGO 地址'), _t('在这里填入一个图片 URL 地址, 以在网站标题前加上一个 LOGO') ); \(form->addInput(\)logoUrl->addRule('url', _t('请填写一个合法的URL地址'))); // 侧边栏设置 $sidebarBlock = new \Typecho\Widget\Helper\Form\Element\Checkbox( 'sidebarBlock', [ 'ShowRecentPosts' => _t('显示最新文章'), 'ShowRecentComments' => _t('显示最近回复'), 'ShowCategory' => _t('显示分类'), 'ShowArchive' => _t('显示归档'), 'ShowOther' => _t('显示其它杂项') ], ['ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowArchive', 'ShowOther'], _t('侧边栏显示') ); \(form->addInput(\)sidebarBlock->multiMode()); } ?> 八、自定义模板 8.1 自定义首页模板 在模板目录下创建文件（如 home.php），在文件开头添加： Php | 复制 <?php /** * 自定义首页模板 * * @package index */ ?> 然后进入后台『设置』-『文章』页面，选择"站点首页"中的"直接调用[home.php]模板文件"，保存即可。 8.2 自定义页面模板 在模板目录下创建文件，在文件开头添加： Php | 复制 <?php /** * 自定义页面模板 * * @package custom */ ?> 其中 @package custom 是必须的，然后进入 Typecho 后台在『创建页面』的【展开高级选项】里就可以看到并选择该模板。 8.3 自定义分类模板 方法一： 直接在模板目录下建立一个名为 category 的目录，然后在里面放上以分类缩略名为文件名的 php 文件。例如访问缩略名为 default 的分类时，会自动调用 category/default.php。 方法二： 在模板文件中使用 is 语法判断： Php | 复制 <?php if ($this->is('category', 'default')): ?> <?php endif; ?> <?php if ($this->is('category', 'category2')): ?> <?php endif; ?> 8.4 自定义404页面 制作一个HTML页面，命名为 404.php 把页面放到当前模板目录下即可 8.5 自定义错误页面 创建一个php文件（有两个变量可以直接使用：\(code`和`\)message，分别代表错误代码和错误信息） 把文件传到服务器某个路径 打开 config.inc.php，加入：define('__TYPECHO_EXCEPTION_FILE__', '你的文件路径'); 九、进阶功能 9.1 面包屑导航 Php | 复制 <a href="<?php $this->options->siteUrl(); ?>">首页 » <?php if ($this->is('index')): ?> 最新文章 <?php elseif ($this->is('post')): ?> <?php \(this->category(); ?> » <?php \)this->title() ?> <?php else: ?> <?php $this->archiveTitle(' » ', '', ''); ?> <?php endif; ?> 9.2 相关文章 Php | 复制 <?php \(this->related(5)->to(\)relatedPosts); ?> <?php while ($relatedPosts->next()): ?> <a href="<?php \(relatedPosts->permalink(); ?>" title="<?php \)relatedPosts->title(); ?>"> <?php $relatedPosts->title(); ?> <?php endwhile; ?> 9.3 分离评论和引用通告 Php | 复制 <?php \(this->comments('comment')->to(\)comments); ?> <?php if ($comments->have()): ?> 评论 <?php while ($comments->next()): ?> <li id="<?php $comments->theId() ?>"> <?php $comments->gravatar(32, '', '', 'avatar'); ?> <?php $comments->author() ?> 说: <?php \(comments->date('F jS, Y'); ?> at <?php \)comments->date('h:i a'); ?> <?php $comments->content() ?> <?php endwhile; ?> <?php endif; ?> <?php \(this->comments('pingback')->to(\)pingbacks); ?> <?php if ($pingbacks->have()): ?> Pingbacks <?php while ($pingbacks->next()): ?> <li id="<?php $pingbacks->theId() ?>"> <?php \(pingbacks->author() ?> <?php \)pingbacks->date('F jS, Y'); ?> <?php endwhile; ?> <?php endif; ?> 十、文件功能映射表 文件 主要功能 涉及API类型 主要API示例 404.php 404错误页面 模板加载、翻译、表单提交 $this->need(), _e(), 搜索表单 comments.php 评论展示与提交 评论API、用户API、表单 \(this->comments()`, `\)comments->author(), \(this->allow()`, `\)this->commentUrl() footer.php 页脚输出 选项API、日期函数 \(this->options->siteUrl()`, `\)this->options->title(), $this->footer() functions.php 主题配置与自定义函数 表单API、自定义函数 themeConfig(), themeFields(), Form\Element\Text header.php 页头与导航 选项API、页面判断、Widget \(this->options->charset()`, `\)this->archiveTitle(), $this->is(), \Widget\Contents\Page\Rows index.php 文章列表 文章循环、内容API、分页 \(this->have()`, `\)this->next(), \(this->content()`, `\)this->pageNav() page.php 独立页面 文章内容、模板加载 \(this->content()`, `\)this->need() post.php 文章详情 文章内容、标签、导航 \(this->content()`, `\)this->tags(), \(this->thePrev()`, `\)this->theNext() sidebar.php 侧边栏小工具 Widget API、用户API \Widget\Contents\Post\Recent, \Widget\Comments\Recent, \Widget\Metas\Category\Rows, $this->user->hasLogin() 十一、常用代码片段 11.1 文章信息显示 Php | 复制 作者: <a href="<?php \(archive->author->permalink(); ?>"><?php \)archive->author(); ?> 时间: <time datetime="<?php \(archive->date('c'); ?>"><?php \)archive->date(); ?> 分类: <?php $archive->category(','); ?> 评论: <a href="<?php \(archive->permalink() ?>#comments"><?php \)archive->commentsNum(_t('暂无评论'), _t('1 条评论'), _t('%d 条评论')); ?> 11.2 侧边栏小工具 Php | 复制 最新文章 <?php \Widget\Contents\Post\Recent::alloc() ->parse(' {title} '); ?> 最近回复 <?php \Widget\Comments\Recent::alloc()->to($comments); ?> <?php while ($comments->next()): ?> <a href="<?php \(comments->permalink(); ?>"><?php \)comments->author(false); ?>: <?php $comments->excerpt(35, '...'); ?> <?php endwhile; ?> 分类 <?php \Widget\Metas\Category\Rows::alloc()->listCategories('wrapClass=widget-list'); ?> 归档 <?php \Widget\Contents\Post\Date::alloc('type=month&format=F Y') ->parse(' {date} '); ?> 11.3 评论表单 Php | 复制 <?php if ($this->allow('comment')): ?> <div id="<?php $this->respondId(); ?>" class="respond"> <?php $comments->cancelReply(); ?> 添加新评论 <form method="post" action="<?php $this->commentUrl() ?>" id="comment-form" role="form"> <?php if ($this->user->hasLogin()): ?> 登录身份: <a href="<?php $this->options->profileUrl(); ?>"> <?php $this->user->screenName(); ?> . <a href="<?php $this->options->logoutUrl(); ?>" title="Logout">退出 » <?php else: ?> 称呼 <input type="text" name="author" id="author" class="text" value="<?php $this->remember('author'); ?>" required/> Email <input type="email" name="mail" id="mail" class="text" value="<?php \(this->remember('mail'); ?>"<?php if (\)this->options->commentsRequireMail): ?> required<?php endif; ?> /> 网站 <input type="url" name="url" id="url" class="text" placeholder="http://" value="<?php \(this->remember('url'); ?>"<?php if (\)this->options->commentsRequireUrl): ?> required<?php endif; ?> /> <?php endif; ?> 内容 <?php $this->remember('text'); ?> 提交评论 <?php else: ?> 评论已关闭 <?php endif; ?> 十二、注意事项 安全防护：所有模板文件开头必须包含： Php | 复制 <?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?> 主题注释：模板信息注释格式： Php | 复制 /** * 主题描述 * * @package 主题名 * @author 作者名 * @version 版本号 * @link 作者网站 */ 自定义模板： 自定义首页：@package index 自定义页面：@package custom 主题初始化：themeInit() 函数在版本 Revision: 1466 (2010-06-28) 及以后有效 嵌套评论：使用自定义评论函数时，记得添加审核提示： Php | 复制 <?php $singleCommentOptions->commentStatus(); ?> Widget占位符：不同Widget支持的占位符不同，请参考具体文档 附录：常量与变量 常用常量 常量 说明 __TYPECHO_ROOT_DIR__ Typecho根目录 __TYPECHO_EXCEPTION_FILE__ 自定义错误页面路径 常用变量 变量名 类型 说明 $this Object 当前上下文对象 $comments Object 评论对象 $pages Object 页面对象 $form Object 表单对象 $archive Object 存档对象（函数参数） 文档结束 本文档整理了Typecho主题开发中所有可用的API，涵盖了模板开发的核心功能。如有遗漏或错误，欢迎反馈补充。 最后更新时间： 2026年2月3日