内容暂存.
内容暂存是指在访客看到之前,先构建并检查 DXPR Builder 页面。有两种做法:在单独的暂存网站上构建,再把内容移到生产站;或在同一个网站上用 Drupal 的修订和 Content Moderation。本页介绍这两种做法,并准确说明构建器保存对修订和审核状态的影响,因为这决定了哪种做法适合您。
构建器保存做了什么
编辑器中的每次保存都会执行以下步骤:
- 加载页面的 default revision,使用正在编辑的语言。
- 检查当前用户是否有权更新该页面。
- 将新的 HTML 写入字段。
- 如果该实体类型支持修订,则创建新修订并将其设为默认修订。当前用户成为其作者,日志消息为
Saved with DXPR builder,时间为请求时间。 - 解除该页面和修订的编辑锁定,然后保存页面。
保存背后的请求见 API 端点。
因此,在节点或 Drag and Drop Block 上的每次保存都会创建新修订,无论内容类型是否勾选了 Create new revision,Revisions 选项卡都会用构建器的日志消息列出每次保存。Drush dxb:page:update 也会创建修订,日志消息为 Updated via dxb:page:update Drush command.
构建器没有审核状态的控件,也从不设置 moderation_state。当内容类型启用了 Content Moderation 时,新修订保留构建器加载的修订的状态,Content Moderation 在保存时应用该状态的规则:
- 已发布的页面保持发布,新修订立即上线。
- Draft 中的未发布页面仍留在 Draft。
- 有已发布默认修订、又有更新的待定草稿的页面是个问题:构建器加载的是已发布修订,而不是草稿,因此保存会根据已发布内容创建新的已发布修订,草稿的更改会被搁置。
请用节点编辑表单更改状态。要在同一个网站内走检查流程,请让页面在编辑人员用构建器编辑期间保持未发布(Draft),检查完成后再通过表单发布。
暂存网站流程
单独的暂存网站避开了上述审核限制,还能让相关方检查真实页面。
- 编辑人员在暂存网站上构建和修改页面。
- 检查人员在那里批准。
- 用下文方法之一将批准的内容移到生产站。
- 以匿名访客身份在生产站上检查页面。
复制数据库
将数据库从暂存站整体复制到生产站:
drush sql:sync @staging @production
这会替换生产站的所有内容,因此请先备份生产站,并预计丢失复制后在生产站上所做的更改。文件不包含在内;请按下文所述同步文件。
选择性导出内容
要移动单个页面,请用 Default Content 等模块导出节点,包括页面引用的媒体和文件,再导入生产站。构建器将其 HTML 存放在文本字段中,因此字段值随节点一起迁移。HTML 中的图片路径指向 sites/default/files/dxpr_builder_images,因此也要复制这些文件。
仅部署配置
如果您构建的是可重复使用的布局,而不是具体页面:
-
在暂存站上,用容器栏的 More > Save as template 保存布局。这会创建一个用户模板。
-
前往 DXPR Studio > DXPR Builder > User Templates,在该模板的操作中选择 Create page template。
-
导出配置:
drush config:export -
部署
dxpr_builder.page_template.*.yml文件并在生产站上导入:drush config:import -
编辑人员在生产站上从该模板开始新建页面。页面模板出现在空容器中。
文件同步
构建器的上传文件存放在网站默认文件目录的 dxpr_builder_images、dxpr_builder_videos 和 dxpr_builder_files 中。请随内容一起同步它们:
rsync -avz staging:/path/to/files/ production:/path/to/files/
在两个环境都挂载 S3 等共享文件存储,可省去这一步。
修订与回滚
因为每次保存都是一个修订,所以回滚是 Drupal 操作:
- 打开页面的 Revisions 选项卡。
- 找到不需要的保存之前的修订;每次构建器保存都显示
Saved with DXPR builder。 - 点击 Revert。
还原会创建另一个修订,因此历史记录保持完整。
编辑锁定
当编辑人员首次点击进入容器时,编辑器发送 dxpr_toggle_content_lock 请求到 /dxpr_builder/ajax,dxpr_lock 表记录实体、修订、语言和用户。当另一位编辑人员打开该页面时,编辑器查询 dxpr_content_lock_status,隐藏容器控件,并显示带锁定者姓名的 Locked 按钮。保存会删除该行。另一位编辑人员也可以点击 Locked 并确认,以覆盖锁定;从那时起,最后保存者胜出。