firstborn/migrationmanager

一键创建设置和内容的迁移。

3.0.22 2019-03-09 02:23 UTC

README

迁移管理器现在称为迁移助手。我们已过渡到付费插件,以便提供更好的支持和更新。随着Craft的持续增长和演变,越来越多的人通过迁移管理器使用简化的迁移,提供人们需要的支持和服务变得越来越困难。当前免费版本的迁移管理器将保持一段时间,以确保使用该插件的所有人都能顺利过渡。感谢所有使用此插件并提供反馈以使其更好的人。

查看迁移助手

适用于Craft CMS 3的迁移管理器

通过点击鼠标轻松在CraftCMS网站安装之间迁移设置和内容,无需编码。您可以选择要迁移的元素,并创建一个可以提交到版本控制系统中的本地Craft内容迁移文件。然后可以在不同的CraftCMS安装上应用迁移,以立即创建和更新设置和内容,无需多次输入数据。通过使用迁移,您可以确保您的各种网站环境(本地、测试、生产等)保持同步并更新。

相关:Craft 2.x迁移管理器

安装

插件商店(简单方法)

  • 在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

概述

迁移管理器可以为以下任务创建迁移

  • 添加和更新
    • 字段
    • 部分和条目类型
    • 类别
    • 资产卷和转换
    • 用户组
    • 站点和区域
    • 标签
    • 路由
    • 电子邮件设置
  • 添加和更新内容
    • 条目
    • 类别
    • 全局设置
    • 用户

要创建迁移,请选择您希望迁移的元素,然后点击页面底部的“创建迁移”按钮。

Migration Manager

重要的是要记住以与手动创建字段、部分等一致的方式创建迁移。字段必须在添加到部分之前存在。类别必须在字段可以使用之前存在等。在创建迁移时,请记住这一点,将迁移分解成更小的步骤,以防止问题而不是一个大的迁移。

将在 craft/migrations 文件夹中创建一个迁移文件。迁移文件名将包含迁移项的缩略名/处理程序。将新的迁移文件移动到您的目标环境,最好使用版本控制。

  • 在您的开发环境中
git add .
git commit -am 'new migration'
git push
  • 在您的目标环境中
git pull

当您的目标环境中存在新的迁移时,将显示一个徽章以通知您。点击“迁移”选项卡并运行新的迁移。您可以通过简单地点击“运行迁移”按钮来运行所有挂起的迁移,或者您可以选择单个迁移来运行。您还可以从本地的 Craft/工具/迁移选项卡中运行迁移(这仅允许您运行所有挂起的迁移,而不是单个迁移)。

Pending Migration

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值在不同网站数据库实例之间可能不同。

对于导入自定义字段,导入的值应与所需输入结构匹配。检查字段类型的文档和代码,以帮助确定正确的结构。

内容迁移

使用迁移,您还可以直接从元素索引页面(例如,条目、类别和用户列表页面)创建内容迁移。选择要导出的条目,然后在操作列表中点击“创建迁移”选项。内容迁移依赖于一个工作流,其中首先迁移相关/依赖的元素。例如,如果您有一个包含一些选定类别的条目,则在条目迁移正确工作之前,类别必须存在于目标网站上。这意味着首先创建类别(复数)的迁移。这对于用户、资产以及其他条目也是如此。在资产的情况下,您需要确保基于资产源/文件夹/文件名的匹配资产存在于目标网站上。对于全局值,请使用全局屏幕上的“创建迁移”按钮。

Pending Migration

权限

默认情况下,所有具有管理员权限的用户都可以完全访问迁移管理器,并具有创建内容迁移的能力。非管理员用户可以在Craft的用户/权限部分授予访问迁移管理器和创建内容迁移的权限。

自定义迁移

除了生成的迁移之外,您还可以使用迁移管理器创建空迁移,这些迁移可用于删除字段和创建内容等任务。要创建空迁移,只需在迁移管理器/创建迁移选项卡上点击“创建迁移”。新空迁移将被添加到craft/migrations文件夹。

查看示例

了解如何创建自定义迁移的更多信息

致谢

Firstborn的整个开发团队

飞鸭图标由Agne Alesiute设计,来自Noun Project