codecamp

插件

说明

Extension 作为 Notadd Framework 的一个特性存在,允许通过 Extension 的方式对 Notadd Framework 进行功能或模板的扩展。 Extension 的机制类似于 Laravel 中 Service Provider 的机制,提供了一种实现组件化的机制,并可以实现传统插件机制中的安装、卸载以及插件启动过程。

基本结构

一个完整的 Notadd Extension ,必然是遵循 Composer 相关规范的 Package。

目录结构

插件位于目录 extensions 下,插件目录结构如下

vendor 厂商目录
-extension 插件目录
--configuations 可加载配置文件目录
--resources 资源目录
---translations 翻译文件目录
---views 视图目录
--src 源码目录
---Extension 扩展服务提供者定义文件
--composer.json Composer 配置文件

  • Extension
  • Resources
  • Composer

其他说明

  • composer.json 中需定义 type 为 notadd-extension
  • composer.json 中需依赖 package 为 notadd/installers

Extension 结构

Extension 的机制类似于 Laravel 中 Service Provider 的机制,提供了一种实现组件化的机制,并可以实现传统插件机制中的安装、卸载以及插件启动过程。

基本结构

一个完整的 Notadd Extension ,必然是遵循 Composer 相关规范的 Package。

目录结构

插件位于目录 extensions 下,插件目录结构如下

vendor 厂商目录
-extension 插件目录
--configuations 可加载配置文件目录
--resources 资源目录
---translations 翻译文件目录
---views 视图目录
--src 源码目录
---bootstrap.php 插件启动脚本
--composer.json Composer 配置文件

其他说明

  • composer.json 中需定义 type 为 notadd-module
  • composer.json 中需依赖 package 为 notadd/installers

Composer

通过对 Composer 的自定义,可以实现 Composer 自动加载 Extension 定义的依赖项。

Type

配置 type 属性为 notadd-extension

Require

添加 notadd/installers 的 Package,才能实现 Composer 自动加载 Extension 定义的依赖项。

完整示例

{
    "name": "notadd/extension-demo",
    "description": "Notadd's Demo Extension.",
    "type": "notadd-extension",
    "keywords": ["notadd", "demo", "extension"],
    "homepage": "https://notadd.com",
    "license": "Apache-2.0",
    "authors": [
        {
            "name": "twilroad",
            "email": "heshudong@ibenchu.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "Notadd\\Demo\\": "src/"
        }
    },
    "require": {
        "php": ">=7.0",
        "notadd/installers": "0.5.*"
    }
}
模块
模板
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

技术规范

API 结构

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }