Drupal → Пример миграции материалов из Drupal 5 в Drupal 7 с помощью модуля Migrate
Пример класса для 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.
Оставить комментарий