如何使用Drupal 8 Migrations

时间:2016-04-01 20:20:09

标签: migration drupal-8

我使用Drupal 8附带的Migration工具从专有CMS创建文章。要将旧数据库与Drupal分离,我首先将文章从旧版CMS导出到Yaml文件中。我的文章有一个像http://example.com/article/123/some-slug.html这样的网址。

如何将通过迁移创建的文章的url_alias设置为/article/123/some-slug.html

更多背景信息。我的迁移模块modules/custom/my_migration如下所示:

档案.../config/install/migrate.migration.my_article.yml

id: my_article
label: Migrates my articles
migration_group: my_migration
source:
  plugin: my_article
destination:
  plugin: entity:node
process:
  type:
    plugin: default_value
    default_value: article

  title: legacy_title

  # ... some more field mappings

档案.../src/Plugin/migrate/source/Article.php

<?php namespace Drupal\my_migration\Plugin\migrate\source;

use Drupal\migrate\Plugin\migrate\source\SourcePluginBase;
use Symfony\Component\Yaml\Yaml;

/**
 * Class Article
 *
 * @MigrateSource(
 *   id = "my_article"
 * )
 */
class Article extends SourcePluginBase {

  protected function initializeIterator() {
    $articles = Yaml::parse(file_get_contents('migration-data/articles.yaml'));

    foreach ($articles as $article) {
      $article['id'] = 'article-' . $article['legacy_id']; 
    }
    return $articles;
  }

  public function fields() {
    return [
      'legacy_title' => $this->t('Article title'),
      'legacy_url' => $this->t('Article URL'),
    ];
  }
}

档案migration-data/articles.yaml

- legacy_id: 123
  legacy_title: 'Article #123'
  legacy_url: '/article/123/article-123.html'
- legacy_id: 456
  legacy_title: 'Article #456'
  legacy_url: '/article/456/article-456.html'

1 个答案:

答案 0 :(得分:0)

您可以使用此代码设置网址别名

$ system_path ='/ node /'.$ node-&gt; id(); //内部节点路径

$ path_alias ='/ article /'.$alias_slug; //别名路径

$ langcode ='en';

\ Drupal :: service('path.alias_storage') - &gt; save($ system_path,$ path_alias,$ langcode);