Пример класса для Migrate, для переноса материалов типа product
с дополнительным CCK полем field_price
:
class NodeProductMigration extends Migration {
public function __construct($arguments) {
parent::__construct($arguments);
// Source
$query = Database::getConnection('default', 'drupal5')->select('node', 'n');
$query->fields('n', array('nid', 'title', 'uid', 'status', 'created', 'changed', 'promote', 'sticky'));
$query->fields('nr', array('body', 'teaser', 'format'));
$query->fields('ctp', array('field_price_value'));
$query->fields('ua', array('dst'));
$query->leftJoin('node_revisions', 'nr', 'n.nid = nr.nid');
$query->leftJoin('content_type_product', 'ctp', 'ctp.nid = n.nid AND ctp.vid = n.vid');
$query->leftJoin('url_alias', 'ua', "ua.src = CONCAT('node/', n.nid)");
$query->condition('n.type', 'product');
$this->source = new MigrateSourceSQL($query, array(), NULL, array('map_joinable' => FALSE));
// Destination
$this->destination = new MigrateDestinationNode('product');
// Key schema
$this->map = new MigrateSQLMap(
$this->machineName,
MigrateDestinationNode::getKeySchema(),
MigrateDestinationNode::getKeySchema()
);
// Mapping
$this->addSimpleMappings(array('nid', 'title', 'body', 'uid', 'created', 'changed', 'status', 'promote', 'sticky'));
$this->addFieldMapping('body:summary', 'teaser');
$this->addFieldMapping('body:format', 'format');
$this->addFieldMapping('field_price', 'field_price_value');
$this->addFieldMapping('path', 'dst');
$this->addFieldMapping('is_new')->defaultValue(TRUE);
}
}
Таблица url_alias
не имеет связи по ключу с таблицей node
, поэтому приходится делать такой хитрый джойн с помощью CONCAT()
.
Когда поля в источнике и назначении имеют одинаковые имена, можно вместо $this->addFieldMapping('fieldname', 'fieldname')
использовать $this->addSimpleMappings(array('fieldname'))
.
Метод $this->addFieldMapping(...)->defaultValue(...)
позволяет указать дефолтное значение для поля если в источнике будет NULL.
Написанное актуально для
Migrate 7.x-2.8
Похожие записи
- Пример миграции контента из vBulletin 3 в Drupal 7: темы (топики)
- Импорт товаров и их дисплеев за один запуск Feeds
- Модуль Node Export — экспорт/импорт материалов между сайтами
- Пример миграции контента из vBulletin 3 в Drupal 7: ответы в темах (комментарии)
- Пример миграции контента из vBulletin 3 в Drupal 7: структура форума (разделы)
Добавить комментарий