firstborn / migrationmanager
一键创建设置和内容的迁移。
Requires
- craftcms/cms: ^3.0.0-RC1
README
迁移管理器现在称为迁移助手。我们已过渡到付费插件,以便提供更好的支持和更新。随着Craft的持续增长和演变,越来越多的人通过迁移管理器使用简化的迁移,提供人们需要的支持和服务变得越来越困难。当前免费版本的迁移管理器将保持一段时间,以确保使用该插件的所有人都能顺利过渡。感谢所有使用此插件并提供反馈以使其更好的人。
查看迁移助手
适用于Craft CMS 3的迁移管理器
通过点击鼠标轻松在CraftCMS网站安装之间迁移设置和内容,无需编码。您可以选择要迁移的元素,并创建一个可以提交到版本控制系统中的本地Craft内容迁移文件。然后可以在不同的CraftCMS安装上应用迁移,以立即创建和更新设置和内容,无需多次输入数据。通过使用迁移,您可以确保您的各种网站环境(本地、测试、生产等)保持同步并更新。
安装
插件商店(简单方法)
- 在Craft控制面板中,转到设置 -> 插件
- 搜索“MigrationManager”
- 点击“安装”按钮
Composer命令行(手动方法)
- 转到命令行并
cd到项目的根目录 - 将存储库添加到项目的composer.json文件中
composer config repositories.migrationmanager vcs https://github.com/Firstborn/Craft-Migration-Manager.git - 通过composer下载插件
composer require firstborn/migrationmanager - 在Craft控制面板中,转到设置 -> 插件
- 点击“安装”按钮以安装MigrationManager
概述
迁移管理器可以为以下任务创建迁移
- 添加和更新
- 字段
- 部分和条目类型
- 类别
- 资产卷和转换
- 用户组
- 站点和区域
- 标签
- 路由
- 电子邮件设置
- 添加和更新内容
- 条目
- 类别
- 全局设置
- 用户
要创建迁移,请选择您希望迁移的元素,然后点击页面底部的“创建迁移”按钮。
重要的是要记住以与手动创建字段、部分等一致的方式创建迁移。字段必须在添加到部分之前存在。类别必须在字段可以使用之前存在等。在创建迁移时,请记住这一点,将迁移分解成更小的步骤,以防止问题而不是一个大的迁移。
将在 craft/migrations 文件夹中创建一个迁移文件。迁移文件名将包含迁移项的缩略名/处理程序。将新的迁移文件移动到您的目标环境,最好使用版本控制。
- 在您的开发环境中
git add .
git commit -am 'new migration'
git push
- 在您的目标环境中
git pull
当您的目标环境中存在新的迁移时,将显示一个徽章以通知您。点击“迁移”选项卡并运行新的迁移。您可以通过简单地点击“运行迁移”按钮来运行所有挂起的迁移,或者您可以选择单个迁移来运行。您还可以从本地的 Craft/工具/迁移选项卡中运行迁移(这仅允许您运行所有挂起的迁移,而不是单个迁移)。
MigrationManager 使用 Craft 内置的迁移器来运行迁移。失败的迁移将被回滚,并且数据库将返回到迁移前的状态。您可以通过检查 Craft 日志来查看迁移失败的原因的详细信息。在许多情况下,这只是迁移具有依赖项(例如所需字段)的情况,这些依赖项在目标网站上尚未设置或插件丢失。
您还可以通过点击迁移管理器/迁移页面上的“应用”选项卡来查看之前应用的迁移。这将显示已应用的迁移和本地创建的迁移(不需要在本地运行)。请注意,如果您通过点击创建迁移按钮(不选择元素)创建空迁移,它们将显示在新迁移列表中,这样您就有机会测试和运行它们,并使用您定制的迁移代码。
字段类型支持
迁移管理器目前支持所有 CraftCMS 内核字段类型
- 资产
- 分类
- 复选框
- 颜色
- 日期/时间
- 下拉菜单
- 条目
- 轻触开关
- 矩阵
- 多选
- 数字
- 纯文本
- 单选按钮
- 富文本
- 表格
- 标签
- URL
- 用户
此外,它还支持
为了支持额外的字段类型和特殊内容,您可以使用事件处理程序来自定义导入/导出功能。在添加自定义支持时,您需要考虑两种不同的导出/导入程序。导出/导入元素设置和导出/导入元素内容。
要处理自定义字段类型的导出/导入,您的插件/模块应监听来自使用字段的元素的导出/导入事件。以下是迁移管理器具有事件列表的元素,允许您修改导出/导入数据以支持自定义字段。
设置
- AssetSource
- AssetTransform(仅限导入后)
- 分类
- 字段
- 全局
- 部分
- 站点
- 标签
- 用户组
您还可以监听纯内容迁移的导出/导入事件来修改数据或执行与迁移相关的其他操作。
内容
- 条目
- 分类
- 全局
- 用户
使用事件
在导出事件期间,您可以修改 $event->value 数据,包括要导出数据中尚未包含的任何附加设置。
//Custom field example Event::on(Fields::class, Fields::EVENT_BEFORE_EXPORT_ELEMENT, function(ExportEvent $event) { $value = $event->value; $value['typesettings']['special_setting'] = 'some special setting value'; $event->value = $value; });
在导入期间,您可以在导入之前修改数据,或者处理导入后已创建或更新的元素。
在导入之前,$event->element 是要导入(更新或创建)的元素模型(基于处理程序匹配)。$event->value 属性是用于填充元素模型的原始数据。更改 $event->element 中的属性以修改在保存之前要导入的元素。
//Custom fields Event::on(Fields::class, Fields::EVENT_BEFORE_IMPORT_ELEMENT, function(ExportEvent $event) { $element = $event->element; $element->special_setting = $event->value['settings']['special_setting']; $event->element = $element; });
在导入之后,您可以根据需要访问 $event->element 和 $event->value 来执行与元素相关的其他操作。
Event::on(Fields::class, Fields::EVENT_AFTER_IMPORT_ELEMENT, function(ExportEvent $event) { $event->value['typesettings']['special_setting'] = 'some special setting value'; });
如果需要,您还可以取消导入并提供错误消息。错误消息将被写入 Craft 网络日志。
//Custom fields Event::on(Fields::class, Fields::EVENT_BEFORE_IMPORT_ELEMENT, function(ExportEvent $event) { $event->isValid = false; $event->error = 'my reason for cancelling'; });
字段数据中包含id的任何值应转换为句柄/别名或某些字符串值,以便可以在目标网站上查找,而无需依赖于匹配的id值,因为id值在不同网站数据库实例之间可能不同。
对于导入自定义字段,导入的值应与所需输入结构匹配。检查字段类型的文档和代码,以帮助确定正确的结构。
内容迁移
使用迁移,您还可以直接从元素索引页面(例如,条目、类别和用户列表页面)创建内容迁移。选择要导出的条目,然后在操作列表中点击“创建迁移”选项。内容迁移依赖于一个工作流,其中首先迁移相关/依赖的元素。例如,如果您有一个包含一些选定类别的条目,则在条目迁移正确工作之前,类别必须存在于目标网站上。这意味着首先创建类别(复数)的迁移。这对于用户、资产以及其他条目也是如此。在资产的情况下,您需要确保基于资产源/文件夹/文件名的匹配资产存在于目标网站上。对于全局值,请使用全局屏幕上的“创建迁移”按钮。
权限
默认情况下,所有具有管理员权限的用户都可以完全访问迁移管理器,并具有创建内容迁移的能力。非管理员用户可以在Craft的用户/权限部分授予访问迁移管理器和创建内容迁移的权限。
自定义迁移
除了生成的迁移之外,您还可以使用迁移管理器创建空迁移,这些迁移可用于删除字段和创建内容等任务。要创建空迁移,只需在迁移管理器/创建迁移选项卡上点击“创建迁移”。新空迁移将被添加到craft/migrations文件夹。
查看示例。
了解如何创建自定义迁移的更多信息
致谢
Firstborn的整个开发团队
飞鸭图标由Agne Alesiute设计,来自Noun Project


