# 包/Packages <p class="uk-article-lead">包是 Pagekit 扩展它的功能的概念。包有主题和扩展两种形式。</p> [toc=2] ## 包的位置 所有包都存放在 `/packages` 目录中,在子目录中以提供者进行分类。 每个包都属于一个特定的提供者 - 例如,官方所有包都属于 `pagekit`,包括 _博客_ 扩展和_One_ 主题。 提供者名字是开发者或组织独具代表性的标识。至少它会匹配一个 GitHub 用户名。包名也将定义它所在目录的名称。 ## 包的内容 一个包至少包含两个文件: 1. 包含包的元数据的 `composer.json`,它是包的定义。 2. `index.php` 所谓的[模块定义](modules.md),并为 Pagekit 添加实际的功能。 其余的内容则取决与包的 `类型/ type`.要了解更多关于包的实际内容,查看[主题开发教程](223157) 或者[扩展开发教程](223156)。 ## 包的定义 包是由它的 `composer.json` 定义的。这个文件包含了包的名称、由[Composer](https://getcomposer.org)安装的潜在依赖,以及显示在 Pagekit 商店的其他信息。 主题中的这个文件类似下面这样: ```json { "name": "pagekit/theme-hello", "type": "pagekit-theme", "version": "0.9.0", "title": "Hello", "description": "A blueprint to develop your own themes.", "license": "MIT", "authors": [ { "name": "Pagekit", "email": "info@pagekit.com", "homepage": "http://pagekit.com" } ], "extra": { "image": "image.jpg" } } ``` 关于此文件的更多信息,查看[Composer 文档](https://getcomposer.org/doc/01-basic-usage.md). ## 安装钩子 包可以是已启用、已禁用或者未安装三种状态。一旦改变了状态,你可能需要修改数据库架构或者运行其他自定义代码。 Pagekit 通过一个自定义脚本文件提供了安装钩子。此文件需要先在 `composer.json` 文件中定义。 ```json "extra": { "scripts": "scripts.php" } ``` 自定义的脚本文件必须返回一个包含回调的 PHP 数组。 ```php return [ 'install' => function ($app) {}, 'uninstall' => function ($app) {}, 'enable' => function ($app) {}, 'disable' => function ($app) {}, 'updates' => [ '0.5.0' => function ($app) {}, '0.9.0' => function ($app) {} ] ]; ``` ### Install 在包被 _安装了_之后执行 install 钩子 ### Uninstall 在包被_卸载了_之前执行 uninstall 钩子 即使你的扩展已经在管理面板中被_禁用_或者_卸载_了,Pagekit 也不会修改已经创建的数据表。你必须注意你需要修改的数据库。 ### Enable 包被_启用_后执行 enable 钩子 ### Disable 包被_禁用_前执行 disable 钩子 ### Updates 在包被启用的前提下,Pagekit 会检查是否有新的更新钩子可用。如果有,它们会依次执行。