xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Пример миграции контента из vBulletin 3 в Drupal 7: структура форума (разделы)

Опубликовано в

Пример класса для Migrate, для переноса разделов из vBulletin 3.8.x в Drupal 7.x с сохранением иерархии:

class StructureMigration extends Migration {
  public function __construct($arguments) {
    parent::__construct($arguments);
 
    // Source
    $query = Database::getConnection('default', 'vbulletin')->select('forum', 'f');
    $query->fields('f', array('forumid', 'parentid', 'title', 'description', 'displayorder'));
    $query->orderBy('f.forumid');
    $this->source = new MigrateSourceSQL($query, array(), NULL, array('map_joinable' => FALSE));
 
    // Destination
    $this->destination = new MigrateDestinationTerm('sections');
 
    // Key schema
    $source_key_schema = array('threadid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE));
    $this->map = new MigrateSQLMap($this->machineName, $source_key_schema, MigrateDestinationTerm::getKeySchema());
 
    // Mapping
    $this->addFieldMapping('tid', 'forumid');
    $this->addFieldMapping('name', 'title');
    $this->addFieldMapping('description', 'description');
    $this->addFieldMapping('format')->defaultValue('filtered_html');
    $this->addFieldMapping('weight', 'displayorder');
    $this->addFieldMapping('parent', 'parentid');
  }
 
  public function prepareRow($row) {
    if (parent::prepareRow($row) === FALSE) {
      return FALSE;
    }
 
    if ($row->parentid <= 0) {
      $row->parentid = NULL;
    }
  }
 
  public function prepare($term, $row) {
    // http://xandeadx.ru/blog/drupal/511
    db_query("INSERT IGNORE INTO {taxonomy_term_data} (tid) VALUES (?)", array($term->tid));
  }
}

Перед импортом нужно создать словарь с именем sections.

Написанное актуально для Drupal 7, Migrate 2.4
Похожие записи

Комментарии RSS

Плюсую, ждем с нетерпением самое суперценное - миграцию веток воблы в ноды с комментариями :)

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании