{"id":13476097,"url":"https://github.com/einsqing/wemall","last_synced_at":"2025-12-17T11:35:55.730Z","repository":{"id":17350197,"uuid":"20121708","full_name":"einsqing/wemall","owner":"einsqing","description":"wemall7 开源版本 (不含商城)","archived":false,"fork":false,"pushed_at":"2017-07-01T06:00:48.000Z","size":29661,"stargazers_count":306,"open_issues_count":1,"forks_count":207,"subscribers_count":53,"default_branch":"v7","last_synced_at":"2024-05-20T22:52:34.557Z","etag":null,"topics":["php","shop","thinkphp","thinkphp5","wechat","weixin","wemall","wemallshop"],"latest_commit_sha":null,"homepage":"http://www.wemallshop.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/einsqing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-24T04:09:45.000Z","updated_at":"2024-05-02T10:26:47.000Z","dependencies_parsed_at":"2022-09-25T08:35:50.256Z","dependency_job_id":null,"html_url":"https://github.com/einsqing/wemall","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/einsqing%2Fwemall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/einsqing%2Fwemall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/einsqing%2Fwemall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/einsqing%2Fwemall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/einsqing","download_url":"https://codeload.github.com/einsqing/wemall/tar.gz/refs/heads/v7","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247535519,"owners_count":20954576,"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":["php","shop","thinkphp","thinkphp5","wechat","weixin","wemall","wemallshop"],"created_at":"2024-07-31T16:01:26.559Z","updated_at":"2025-12-17T11:35:50.684Z","avatar_url":"https://github.com/einsqing.png","language":"JavaScript","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"WeMall商城 7.0 (不含商城)\n===============\n\n\n\n​\twemall7.0 开源系统，基于thinkphp5开发，支持composer，优化核心，减少依赖，基于全新的架构思想和命名空间。\n\n\n\n### thinkphp5.0特性\n\n- 基于命名空间和众多PHP新特性\n- 核心功能组件化\n- 强化路由功能\n- 更灵活的控制器\n- 重构的模型和数据库类\n- 配置文件可分离\n- 重写的自动验证和完成\n- 简化扩展机制\n- API支持完善\n- 改进的Log类\n- 命令行访问支持\n- REST支持\n- 引导文件支持\n- 方便的自动生成定义\n- 真正惰性加载\n- 分布式环境支持\n- 更多的社交类库\n\n\u003e ThinkPHP5的运行环境要求PHP5.4以上。\n\n\n\n### wemall7.0特性\n\n- 基于TP5，性能优越\n- 前后分离，简单方便\n- 插件扩展，功能丰富\n- 钩子机制，高度扩展\n- 自动升级，维护简单\n- 使用pjax，体验提升\n- rest架构，耦合度低\n\n\n\u003e ##### 功能列表\n\u003e\n\u003e 1. 首页=》系统首页\n\u003e\n\u003e 2. 设置=》站点设置，短信配置，邮件配置\n\u003e\n\u003e 3. 微信=》微信配置，微信菜单，自定义回复，模版消息，多客服设置，微信打印机\n\u003e\n\u003e 4. 内容=》文章分类，文章列表\n\u003e\n\u003e 5. 模版=》模版设置，邮件模版，短信模版\n\u003e\n\u003e 6. 用户=》管理员用户组，管理员列表，用户列表，会员列表\n\u003e\n\u003e 7. 插件=》插件管理，插件商店\n\u003e\n\u003e 8. 帮助=》使用帮助\n\u003e\n\u003e    ...\n\n\n\n\n## 插件钩子机制\n\n### 安装\n\n\u003e composer require qingyuexi/think-addons\n\n### 配置\n\n#### 公共配置\n\n```\n'addons'=\u003e[\n    // 可以定义多个钩子\n    'testhook'=\u003e'putong\\demo\\demo' // 键为钩子名称，用于在业务中自定义钩子处理，值为实现该钩子的插件，\n                    // 多个插件可以用数组也可以用逗号分割\n]\n\n```\n\n或者在application\\extra目录中新建`addons.php`,内容为：\n\n```\n\u003c?php\nreturn [\n    // 可以定义多个钩子\n    'testhook'=\u003e'putong\\demo\\demo' // 键为钩子名称，用于在业务中自定义钩子处理，值为实现该钩子的插件，\n                    // 多个插件可以用数组也可以用逗号分割\n]\n\n```\n\n### 创建插件\n\n\u003e 创建的插件可以在view视图中使用，也可以在php业务中使用\n\n安装完成后访问系统时会在项目根目录生成名为`addons`的目录，在该目录中创建需要的插件。\n\n下面写一个例子：\n\n#### 创建putong分类插件\n\n\u003e 在addons目录中创建putong目录\n\n#### 创建插件分类配置文件\n\n\u003e 在putong目录中创建config.php类文件，插件配置文件可以省略。\n\n```\n\u003c?php\nreturn [\n    'name' =\u003e 'putong',\n    'title' =\u003e 'putong',\n    'description' =\u003e 'putong类插件',\n    'status' =\u003e 1,\n    'author' =\u003e '清月曦'\n];\n\n```\n\n#### 在putong分类下创建demo插件\n\n\u003e 在addons目录下的putong目录下创建demo目录\n\n#### 创建钩子实现类\n\n\u003e 在test目录中创建Demo.php类文件。注意：类文件首字母需大写\n\n```\n\u003c?php\nnamespace addons\\putong\\demo;   // 注意命名空间规范\n\nuse think\\Addons;\n\n/**\n * 插件测试\n * @author byron sampson\n */\nclass Demo extends Addons   // 需继承think\\addons\\Addons类\n{\n    // 该插件的基础信息\n    public $info = [\n        'name' =\u003e 'test',   // 插件标识\n        'title' =\u003e '插件测试',  // 插件名称\n        'description' =\u003e 'thinkph5插件测试',    // 插件简介\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#### 创建插件配置文件\n\n\u003e 在test目录中创建config.php类文件，插件配置文件可以省略。\n\n```\n\u003c?php\nreturn [\n    'name' =\u003e 'demo',\n    'title' =\u003e 'demo',\n    'description' =\u003e 'demo插件',\n    'status' =\u003e 1,\n    'url' =\u003e true,\n    'author' =\u003e '清月曦',\n    'version' =\u003e '0.1'\n];\n\n```\n\n#### 创建钩子模板文件\n\n\u003e 在demo目录中创建info.html模板文件，钩子在使用fetch方法时对应的模板文件。\n\n```\n\u003ch1\u003ehello tpl\u003c/h1\u003e\n\n如果插件中需要有链接或提交数据的业务，可以在插件中创建controller业务文件，\n要访问插件中的controller时使用addon_url生成url链接。\n如下：\n\u003ca href=\"{:addon_url('putong://demo/admin/index')}\"\u003elink demo\u003c/a\u003e\n格式为：\ndemo为插件名，admin为controller中的类名，index为controller中的方法\n\n```\n\n#### 创建插件的controller文件\n\n\u003e 在test目录中创建controller目录，在controller目录中创建Action.php文件 controller类的用法与tp5中的controller一致\n\n```\n\u003c?php\nnamespace addons\\putong\\demo\\controller;\n\nclass Admin\n{\n    public function index()\n    {\n        echo 'hello link';\n    }\n}\n\n```\n\n\u003e 如果需要使用view模板则需要继承`\\think\\addons\\Controller`类 模板文件所在位置为插件目录的view中，规则与模块中的view规则一致\n\n```\n\u003c?php\nnamespace addons\\putong\\demo\\controller;\n\nuse think\\addons\\Controller;\n\nclass Admin extends Controller\n{\n    public function index()\n    {\n        return $this-\u003efetch();\n    }\n}\n\n```\n\n### 使用钩子\n\n\u003e 创建好插件后就可以在正常业务中使用该插件中的钩子了 使用钩子的时候第二个参数可以省略\n\n#### 模板中使用钩子\n\n```\n\u003cdiv\u003e{:hook('testhook', ['id'=\u003e1])}\u003c/div\u003e\n\n```\n\n#### php业务中使用\n\n\u003e 只要是thinkphp5正常流程中的任意位置均可以使用\n\n```\nhook('testhook', ['id'=\u003e1])\n\n```\n\n### 插件目录结构\n\n#### 最终生成的目录结构为\n\n```\ntp5\n - addons\n -- putong\n --- demo\n ---- controller\n ----- Admin.php\n ---- view\n ---- action\n ----- link.html\n --- config.php\n --- info.html\n --- Demo.php\n - application\n - thinkphp\n - extend\n - vendor\n - public\n```\n\n\n\n## 版权信息\n\nwemall7开源版遵循Apache2开源协议发布，并提供免费使用。本项目包含的第三方源码和二进制文件之版权信息另行标注。版权所有Copyright © 2016-2017 by wemallshop.com ([http://www.wemallshop.com](http://www.wemallshop.com)) All rights reserved。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feinsqing%2Fwemall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feinsqing%2Fwemall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feinsqing%2Fwemall/lists"}