chillu / drupal-blog-importer
将Drupal博客结构(包括评论和作者)导入SilverStripe CMS,用于博客模块的使用
Requires
- php: >=5.3.2
- composer/installers: *
- guzzle/guzzle: ~3.1
- silverstripe/blog: *
- silverstripe/comments: *
- silverstripe/framework: ~3.1
This package is auto-updated.
Last update: 2021-01-21 12:05:48 UTC
README
将Drupal博客数据转换为SilverStripe博客(使用博客模块构建)。
- 以标准博客结构导入帖子标签
- 使用"comments" 模块导入评论(可选)
- 将博客作者和评论作者导入到
Member
记录中(可选) - 将标签导入由"blogcategories" 模块创建的多对多关系中(可选)
- 将博客帖子体内的相对图片重写为自定义本地文件夹(用于手动迁移)
- 下载相对图片并将它们重写到提供的文件夹中(可选)
- 将不同博客的帖子导入不同的“博客持有者”中
- 基于可用的CSV数据,无需安装Drupal模块或应用程序访问权限
- 支持增量导入和更新
- 为帖子URL生成Apache重写规则
注意:该模块处于alpha状态,迄今为止仅针对Drupal 5进行了测试。它不会导入所有数据点,请参阅以下已知限制。
设置
SilverStripe 扩展
由于SilverStripe博客和评论模块没有提供映射现有Drupal数据所需的所有列,因此我们需要通过添加几个列来扩展它们。例如,Drupal评论有主题行。将以下内容添加到您的配置中(例如,在mysite/_config/config.yml
中)
BlogEntry:
extensions:
- DrupalBlogEntryExtension
Comment:
extensions:
- DrupalCommentExtension
Member:
extensions:
- DrupalMemberExtension
这是一个可选步骤,您需要调整模板和CMS逻辑才能利用这些新列。
SQL导出脚本
导出逻辑位于tools/export.sql
。
该模块操作CSV数据,可以通过MySQL命令行工具检索。请注意,SQL用户需要已授予File
权限,因为脚本使用SELECT ... INTO OUTFILE
。
脚本假定博客节点的列类型为'column'。如果其名为其他(例如'blog'),请替换SQL脚本中的值。如果您已配置了表名前缀,请勿忘记添加。
默认情况下,CSV数据导出到/tmp
文件夹。如果无法访问此位置,请更改脚本路径。我们使用特定的连接和组合列,因此直接从您的工具导出表数据将不起作用 - 请使用此脚本。
使用方法
从Drupal导出
运行以下命令
mysql -u <user> -p <my-drupal-database> < drupal-blog-importer/tools/export.sql
导入到SilverStripe
在SilverStripe webroot中运行以下命令
sake dev/tasks/DrupalBlogImporterTask postFile=/tmp/posts.csv userFile=/tmp/users.csv commentFile=/tmp/comments.csv
可以省略参数以仅导入部分数据。
可用参数
postFile
:博客文章CSV文件的绝对或相对路径commentFile
:评论CSV文件的绝对或相对路径userFile
:用户CSV文件的绝对或相对路径publish
:发布创建的博客页面?
扩展导入器
导入器可能无法完全满足您的需求。例如,标签可能以"blogcategories"模块作为多对多关系导入,或者评论作者可能以昵称与["论坛"模块]中的个人资料匹配的方式导入。
CSV导入逻辑基于核心类CSVBulkLoader
。它提供了很多灵活性,可以在转换和重新映射数据方面进行操作。每种类型(用户、评论、帖子)都有自己的加载类,可以被继承。
:::php
class MyDrupalBlogPostBulkLoader extends DrupalBlogPostBulkLoader {
public $columnMap = array(
'tags' => '->importTags',
// ...
);
protected function importTags($obj, $val, $record) {
// Example: Look up many-many relation, and add new objects
}
}
只需指导依赖注入器使用这些类即可(例如,在mysite/_config/injector.yml
中)
Injector:
DrupalBlogPostBulkLoader:
class: MyDrupalBlogPostBulkLoader
限制
- 丢弃博客文章的修订历史
- 丢弃已注册用户的博客文章订阅
- 忽略博客文章的访问控制
- 评论线程被简化
- 用户没有公开的个人资料或登录能力
- 标签未加权,术语层次结构被简化
- 不更新查看次数(除非特别实现)