首页 > 其他分享 >ZBlog插件开发文件结构(插件)

ZBlog插件开发文件结构(插件)

时间:2024-08-25 13:15:11浏览次数:12  
标签:function 文件 插件 ZBlog demoPlugin zbp Config ID

以下基于通过「创建应用」生成的初始文件:

/path/zb_users/plugin/demoPlugin
│  logo.png       [必需]图标,128x128;
│  plugin.xml     [必需]自述文件;
│  main.php       [可选]应用内置管理页,在创建插件时填写才会生成;
│  include.php    [可选]应用嵌入页,在创建插件时填写才会生成;

自动创建的文件最多只有上边四个,可依据需要自行创建需要的文件夹及文件:

│  function.php   [可选]根目录下除了这个外不建议放置额外的「*.PHP」文件;
│                      「function.php」放不下的,可以拆分后放置到「function」文件夹;
├─class           [可选]放置 class 定义文件,;
├─css             [可选]CSS 样式文件,前后台尽量分开;
├─script          [可选]JS 脚本目录,前后台尽量分开;
└─other           [可选]其他任意自定义文件夹及内容

Hello Z-Blog

  1. 使用demoPlugin为「应用 ID」创建一个应用,
    • 「应用名称」填写「第一个插件」;
    • 其他信息保持默认;
  2. 不需要额外创建文件
  3. 使用下边代码「覆盖」「include.php」的内容;
    • 可直接点击「Copy to clipboard」按钮复制;
  4. 「启用插件」后浏览任意「前台页面」即可查看效果;
<?php
// 如果有其他 PHP 文件可以在这里引入,或者在需要的地方「按需要引入」
// require __DIR__ . "function.php";
// require __DIR__ . "class/db.php";
# 注册插件
RegisterPlugin("demoPlugin", "ActivePlugin_demoPlugin");
// 注册接口函数
function ActivePlugin_demoPlugin()
{
  // 向名为'Filter_Plugin_Index_Begin'的接口注册函数
  Add_Filter_Plugin('Filter_Plugin_Index_Begin', 'demoPlugin_HelloZBlog');
}
// 接口函数定义
function demoPlugin_HelloZBlog()
{
  // 注意,在函数中使用变量 $zbp 前应进行全局声明
  global $zbp;
  // 向前台页面的 <head></head> 内部插入内容
  $zbp->header .= "<script>alert(\"hello {$zbp->user->Name}\")</script>";
  // 读取插件配置项
  $InstallTime = $zbp->Config('demoPlugin')->InstallTime;
  $zbp->header .= "<script>alert(\"「demoPlugin」插件首次启用时间为 {$InstallTime}\")</script>";
}
// 插件启用时调用
function InstallPlugin_demoPlugin()
{
  global $zbp;
  $InstallTime = date('Y-m-d H:i:s');
  // 判断配置项是否存在
  // $zbp->HasConfig('插件ID'); //return bool
  if (!$zbp->HasConfig('demoPlugin')) {
    $zbp->Config('demoPlugin')->version = 1;
    $zbp->Config('demoPlugin')->InstallTime = $InstallTime;
    $zbp->SaveConfig('demoPlugin');
  }
}
// 插件关闭时调用
function UninstallPlugin_demoPlugin()
{
  global $zbp;
  // 存在相应开关选项并且状态为开启时,删除当前插件配置
  // $zbp->Config('插件ID')->HasKey('配置名'); //return bool
  if ($zbp->Config('demoPlugin')->HasKey('DelConfig') && 
       $zbp->Config('demoPlugin')->DelConfig == 1) {
    $zbp->DelConfig('demoPlugin');
  }
}

注册及接口挂载

Z-BlogPHP 系统的插件是采用主动插入方式来通知系统。所以必须在「include.php」文件中调用RegisterPlugin函数才能让插件进入系统的插件体系。

// 注册插件
RegisterPlugin("插件ID","ActivePlugin_插件ID");

然后在ActivePlugin_插件ID中完成「大部分」接口的挂载;

// 具体的接口挂接
function ActivePlugin_插件ID() {
  Add_Filter_Plugin('API名称','执行代码(函数)');
}

注:可按需在挂载接口前进行判断;也可在接口 A 内部挂载接口 B。

「启用 / 停止 / 更新」插件时执行

可按如下示例定义函数,将在插件执行对应操作时自动调用;

function InstallPlugin_插件ID(){}
function UninstallPlugin_插件ID(){}
function UpdatePlugin_插件ID(){}
// 旧版兼容
function 插件ID_Updated(){UpdatePlugin_插件ID();}

插件状态判断

// 插件未启用直接退出本页面(一般用于配置页面)
if (!$zbp->CheckPlugin('插件ID')) {$zbp->ShowError(48);die();}

用户权限判断

在默认生成的main.php中,除了上边的$zbp->CheckPlugin()调用外,还有如下判断用户权限的指令:

// `root` 既管理员权限
$action='root';
if (!$zbp->CheckRights($action)) {$zbp->ShowError(6);die();}

$zbp->CheckRights()用于判断「当前用户」(包括游客)是否有权执行传入参数代表的某项操作,可配合「用户等级」对权限进行细化管理;

可以通过 -host-/zb_system/cmd.php?act=misc&type=vrs查看当前用户拥有的权限;

可针对用户等级灵活制定其权限;「Z-Blog 角色分配器 - Z-Blog 应用中心」

参考「用户等级划定」;

插件配置数据存取

「Hello Z-Blog」中已有相应用例,以下为逐条讲解;

「配置项」的「值」可以是数字字符串数组;对于PHP 对象,理论上需要能够被序列化,实际使用中建议转为JSON保存;

1、设置并保存配置选项

$zbp->Config('插件ID')->配置名 = 值;
$zbp->SaveConfig('插件ID');

2、读取配置选项

$s = $zbp->Config('插件ID')->配置名;
echo $s;

3、判断配置选项是否已创建

$zbp->HasConfig('插件ID'); //return bool

4、判断配置选项某一键值是否存在

$zbp->Config('插件ID')->HasKey('配置名'); //return bool

5、删除某一配置

$zbp->Config('插件ID')->DelKey('配置名');
$zbp->SaveConfig('插件ID');

6、删除配置

停用插件时可以选择删除配置项,通常我们建议保留配置以备下次重新启用,或者提供专门的开关选项由用户确认删除;

$zbp->DelConfig('插件ID');

CSRF 相关 「重要

对于需要用户点链接或提交表单触发,进而对数据或文件产生影响的,除必要的用户权限验证外,应另外加入 CSRF Token 验证;

通过 GET 方法提交,如果您的目标地址是 cmd.php,那么您可以使用以下函数:

<?php echo BuildSafeCmdURL('act=TagPst'); ?>

如果不是,那么您也可以直接:

<?php echo BuildSafeURL('main.php'); ?>

通过 POST 方法提交,您可以在 form 表单内加入

<input type="hidden" name="csrfToken" value="<?php echo $zbp->GetCSRFToken();?>">

对于应用内的,比如保存配置项,上传文件等操作中,可使用CheckIsRefererValid();进行验证;

if (count($_POST) > 0) {
  CheckIsRefererValid();
  // 你的代码,以下为示例
  // 配置项保存 ↓
  foreach ($_POST as $key => $value) {
    $zbp->Config("demoPlugin")->$key = $value;
  }
  $zbp->SaveConfig("demoPlugin");
  // 结束
  $zbp->SetHint('good');
  Redirect('./main.php');
}

注:对于旧版本 Z-Blog PHP,可能需要先判断:if (function_exists('CheckIsRefererValid')) {CheckIsRefererValid();}

标签:function,文件,插件,ZBlog,demoPlugin,zbp,Config,ID
From: https://www.cnblogs.com/hwrex/p/18378864

相关文章

  • tips in windows/ 1.windows文件路径最长限制
    1.windows文件路径最长限制场景:在用文件资源管理器删除名称超过255字符的文件(文件名最大字符限制就是255)时,发现删除不了,也没反应原因:windows删除调用的是explorer,对路径限制不能超过260,此时超过了,但又由于是应用层,所以不会直接给以报错。使用杀毒软件可以是因为他们调用的是......
  • ZBlog强制开启 Debug 调试模式
    常规开启调试模式是在后台设置中进行,在后台设置的全局设置里打开“调试模式”并保存即可。如果网站程序出错,不能进入后台进行设置,那么在1.7.3及更高版本可以在这样设置:使用空间面板的文件管理或者FTP修改文件:path/zb_users/c_option.php;'ZC_DEBUG_MODE'=>true,//开启Deb......
  • ZBlog固定域名出错不能登入怎么办
    使用空间面板的文件管理或者FTP修改文件:path/zb_users/c_option.php;如果是固定域名出错,需要关闭固定域名功能,请在c_option.php增加项目:'ZC_PERMANENT_DOMAIN_ENABLE'=>false,//1.7.3版本及以后版本使用//或是'ZC_PERMANENT_DOMAIN_WHOLE_DISABLE'=>true,//1.7.2......
  • ZBlog网站备份、恢复与搬家(换空间)方法
    ZBlog网站完整的备份包括两个主要部分:MySQL数据库和zb_users目录下的主题(theme)、插件(plugin)和附件(upload)。一般的操作方法是:将数据库从旧站导出,然后倒入到新站;再通过FTP等将zb_users目录下的主题、插件和上传的文件上传到新站。下面烽烟博客就和大家详细说下zblog备份、恢复......
  • ZBlog网站不同目录文件夹的含义(文件结构)
    Z-BlogPHP│index.php首页│search.php搜索│feed.phpRSS输出│readme.txt程序说明│├─zb_install安装入口(安装完成后可删除)││index.php│││└─language│en.php│zh-cn.php│zh-......
  • ZBlog数据库配置文件在哪里?怎么修改数据库用户名、密码等信息
    一般是在安装程序完成后会自动生成c_option.php配置文件在 zb_users 目录下如何提前配置好c_option.php再执行安装过程?需要在新建文件 c_option.php 加入 'ZC_INSTALL_AFTER_CONFIG'=>true ,再填入其它的数据库配置,这样打开网站就会自动转入安装页面进行安装过程(......
  • ZBlog从环境变量中读取数据库配置
    c_option.php配置文件中参数的值为Zbp_GetEnv('环境变量名'),就会用Zbp_GetEnv函数读取环境变量的值(1.7.3开始支持)那么 ZC_MYSQL_SERVER, ZC_MYSQL_USERNAME, ZC_MYSQL_PASSWORD, ZC_MYSQL_NAME 这4个参数的值就会从 Zbp_GetEnv('DB_HOST') 等中获取//c_option.......
  • ZBlog下载安装环境要求
    PHP:PHP5.2-8.2数据库:MySQL(兼容MariaDB) SQLite PostgreSQL 将下载后的程序代码解压到你的网站根目录,如/home/wwwroot/example.com/,运行你的网站,会自动跳转到安装页面:http://example.com/zb_install/index.php。在安装页面输入您的数据库信息、博客名称、用户名、密码等......
  • ZBlog文件权限安全设置指南
    为了防止ZBLOG被黑或是系统漏洞网站被攻破,可以将网站权限做如下设置,可以在宝塔面板的文件管理里操作。A:需要保留w权限的目录及子目录及其下所有文件zb_users/cachezb_users/uploadB:需要删除w权限的有zb_system及其子目录zb_users下除了cache,upload的其它目录根目录下的......
  • zblog(非js)调用discuz帖子的方法
    步骤1:在zblog目录(以b2c主题为例)/zb_users/theme/b2c/include目录下,新建空文件news01.html和news02.html。 步骤2:复制以下代码保存为news.php,上传到discuz程序的sources/include/cron/目录下。<?phpif(!defined('IN_DISCUZ')){exit('AccessDenied');}//单独id(根据您的需......