{"id":16675073,"url":"https://github.com/funadmin/fun-addons","last_synced_at":"2025-08-23T19:34:11.938Z","repository":{"id":46585986,"uuid":"279542436","full_name":"funadmin/fun-addons","owner":"funadmin","description":"funadmin插件扩展","archived":false,"fork":false,"pushed_at":"2024-03-16T13:56:16.000Z","size":647,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-20T02:41:02.888Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/funadmin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-14T09:33:12.000Z","updated_at":"2024-04-16T02:56:53.000Z","dependencies_parsed_at":"2025-02-15T21:31:26.879Z","dependency_job_id":"48ffb86a-5738-4290-aa5d-ff6032ad4fc2","html_url":"https://github.com/funadmin/fun-addons","commit_stats":{"total_commits":396,"total_committers":2,"mean_commits":198.0,"dds":0.2222222222222222,"last_synced_commit":"18c7049576f0fd7187a1f0dde3b18866647d20ee"},"previous_names":[],"tags_count":120,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funadmin%2Ffun-addons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funadmin%2Ffun-addons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funadmin%2Ffun-addons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/funadmin%2Ffun-addons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/funadmin","download_url":"https://codeload.github.com/funadmin/fun-addons/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248107048,"owners_count":21048845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T12:45:24.072Z","updated_at":"2025-04-09T20:30:25.133Z","avatar_url":"https://github.com/funadmin.png","language":"PHP","readme":"\n## 安装\nv5.0 及以上版本适用于funadmin3.0\nv5.0 以下适用于funadmin 2.x \n\u003e composer require funadmin/fun-addons\n\n## 配置\n\n### 生成配置\n\n系统安装后会自动在 config 目录中生成 addons.php 的配置文件，\n如果系统未生成可在命令行执行\n\n```php\nphp think addons:config \n```\n\n快速生成配置文件\n\n### 公共配置\n```php\n'addons'=\u003e[\n    // 是否自动读取取插件钩子配置信息（默认是开启）\n    'autoload' =\u003e true,\n    // 当关闭自动获取配置时需要手动配置hooks信息\n    'hooks' =\u003e [\n        // 可以定义多个钩子\n        'testhook'=\u003e'test' // 键为钩子名称，用于在业务中自定义钩子处理，值为实现该钩子的插件，\n                    // 多个插件可以用数组也可以用逗号分割\n    ],\n    'route' =\u003e [],\n    'service' =\u003e [],\n]\n```\n或者在\\config目录中新建`addons.php`,内容为：\n```php\n\u003c?php\nreturn [\n    // 是否自动读取取插件钩子配置信息\n    'autoload' =\u003e false,\n    // 当关闭自动获取配置时需要手动配置hooks信息\n    'hooks' =\u003e [\n        // 可以定义多个钩子\n        'testhook'=\u003e'test' // 键为钩子名称，用于在业务中自定义钩子处理，值为实现该钩子的插件，\n                    // 多个插件可以用数组也可以用逗号分割\n    ],\n    'route' =\u003e [],\n    'service' =\u003e [],\n];\n```\n\n## 创建插件\n\u003e 创建的插件可以在view视图中使用，也可以在php业务中使用\n \n安装完成后访问系统时会在项目根目录生成名为`addons`的目录，在该目录中创建需要的插件。\n\n下面写一个例子：\n\n### 创建test插件\n\u003e 在addons目录中创建test目录\n\n### 创建钩子实现类\n\u003e 在test目录中创建 Plugin.php 类文件。注意：类文件首字母需大写\n\n```php\n\u003c?php\nnamespace addons\\test;  // 注意命名空间规范\n\nuse fun\\Addon;\n\n/**\n * 插件测试\n * @author byron sampson\n */\nclass Plugin extends Addons // 需继承fun\\Addon类\n{\n    // 该插件的基础信息\n    public $info = [\n        'name' =\u003e 'test',   // 插件标识\n        'title' =\u003e '插件测试',  // 插件名称\n        'description' =\u003e 'thinkph6插件测试',    // 插件简介\n        'status' =\u003e 0,  // 状态\n        'author' =\u003e 'byron sampson',\n        'version' =\u003e '0.1'\n    ];\n\n    /**\n     * 插件安装方法\n     * @return bool\n     */\n    public function install()\n    {\n        return true;\n    }\n\n    /**\n     * 插件卸载方法\n     * @return bool\n     */\n    public function uninstall()\n    {\n        return true;\n    }\n\n    /**\n     * 实现的testhook钩子方法\n     * @return mixed\n     */\n    public function testhook($param)\n    {\n        // 调用钩子时候的参数信息\n        print_r($param);\n        // 当前插件的配置信息，配置信息存在当前目录的config.php文件中，见下方\n        print_r($this-\u003egetConfig());\n        // 可以返回模板，模板文件默认读取的为插件目录中的文件。模板名不能为空！\n        return $this-\u003efetch('info');\n    }\n\n}\n```\n\n### 创建插件配置文件\n\u003e 在test目录中创建config.php类文件，插件配置文件可以省略。\n\n```php\n\u003c?php\nreturn [\n    'display' =\u003e [\n        'title' =\u003e '是否显示:',\n        'type' =\u003e 'radio',\n        'content' =\u003e [\n            '1' =\u003e '显示',\n            '0' =\u003e '不显示'\n        ],\n        'value' =\u003e '1'\n    ]\n];\n```\n\n### 创建钩子模板文件\n\u003e 在test-\u003eview目录中创建info.html模板文件，钩子在使用fetch方法时对应的模板文件。\n\n```html\n\u003ch1\u003ehello tpl\u003c/h1\u003e\n\n如果插件中需要有链接或提交数据的业务，可以在插件中创建controller业务文件，\n要访问插件中的controller时使用addon_url生成url链接。\n如下：\n\u003ca href=\"{:addons_url('Action/link')}\"\u003elink test\u003c/a\u003e\n或\n\u003ca href=\"{:addons_url('test://Action/link')}\"\u003elink test\u003c/a\u003e\n格式为：\ntest为插件名，Action为controller中的类名[多级控制器可以用.分割]，link为controller中的方法\n```\n\n### 创建插件的controller文件\n\u003e 在test目录中创建controller目录，在controller目录中创建Index.php文件\n\u003e controller类的用法与tp6中的controller一致\n\n```php\n\u003c?php\nnamespace addons\\test\\controller;\n\nclass Index\n{\n    public function link()\n    {\n        echo 'hello link';\n    }\n}\n```\n\n## 使用钩子\n\u003e 创建好插件后就可以在正常业务中使用该插件中的钩子了\n\u003e 使用钩子的时候第二个参数可以省略\n\n### 模板中使用钩子\n\n```html\n\u003cdiv\u003e{:hook('testhook', ['id'=\u003e1])}\u003c/div\u003e\n```\n\n### php业务中使用\n\u003e 只要是thinkphp6正常流程中的任意位置均可以使用\n\n```php\nhook('testhook', ['id'=\u003e1])\n```\n\n### 插件公共方法\n```php\n/**\n * 处理插件钩子\n * @param string $event 钩子名称\n * @param array|null $params 传入参数\n * @param bool $once 是否只返回一个结果\n * @return mixed\n */\nfunction hook($event, $params = null, bool $once = false);\n\n/**\n * 读取插件的基础信息\n * @param string $name 插件名\n * @return array\n */\nfunction get_addons_info($name);\n\n/**\n * 获取插件Plugin的单例\n * @param string $name 插件名\n * @return mixed|null\n */\nfunction get_addons_instance($name);\n\n/**\n * 插件显示内容里生成访问插件的url\n * @param $url 在插件控制器中可忽略插件名，在非插件中生成时需指定插件名。例：插件名://控制器/方法\n * @param array $param\n * @param bool|string $suffix 生成的URL后缀\n * @param bool|string $domain 域名\n * @return bool|string\n */\nfunction addons_url($url = '', $param = [], $suffix = true, $domain = false);\n/**\n * 获取插件列表\n */\nfunction get_addons_list();\n\n/**\n * 导入sql;\n */\nfunction importsql($name)\n\n\n```\n\nthink-addons\nThe ThinkPHP 6 Addons Package\n感谢 zzstudio/think-addons \n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffunadmin%2Ffun-addons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffunadmin%2Ffun-addons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffunadmin%2Ffun-addons/lists"}