2013-12-03 1 views
0

В настоящее время я работаю над модулем миграции, где я использую разные источники XML (поставляемые внешним поставщиком) для импорта программы кинотеатра. Я получаю отдельные файлы для кино, театров и расписание сеансов, как это (упрощенный):Восстановить отношения между узлами при использовании модуля миграции в Drupal 7

<Movies> 
<Movie> 
    <movieid>14652</movieid> 
    <title>Movie Title</title> 
</Movie> 
</Movies> 

<Theaters> 
<Theater> 
    <theaterid>75102</theaterid> 
    <description>Blabla</description> 
</Theater> 
</Theaters> 

<Showtimes> 
    <Showtime> 
    <showtimeid>147001169</showtimeid> 
    <movieid>14652</movieid> 
    <theaterid>75102</theaterid> 
    <date>2013-12-02 20:15</date> 
    </Showtime> 
</Showtimes> 

Я уже в состоянии импортировать все необходимые данные и создавать узлы для каждого типа. ЗА ИСКЛЮЧЕНИЕМ отношений между ними. Я не уверен, какое поле я должен использовать для этого. В настоящее время я использую ссылки на сущности, но я не знаю, как правильно их настроить, и если они являются лучшим выбором для такого типа приложений. План состоит в том, чтобы отображать информацию о шоу в зависимости от фильмов или театров (например, показывать все фильмы, которые в настоящее время воспроизводятся в выбранном театре, или показать все кинотеатры для данного фильма. Другой связанный вопрос. Я должен переписать идентификаторы узлов (nid) с указанными идентификаторами из XML (в это сохранить?) или я создавать различные поля для них

заранее спасибо за любую помощь Если какой-либо требуется дополнительная информация, я отвечу сразу,?!)

с наилучшими пожеланиями, Satara


Решения

Я просто должен был использовать sourceMigration() функции с помощью ключа миграции, определенного в массиве «Миграция» в режиме вытеснения migrate_api (файл) в качестве параметра). Теперь идентификаторы получить правильно отображаются в полях entity_refernce:

$this->addFieldMapping('field_showtime_movie', 'movieid')->xpath('movieid')->sourceMigration('Movie'); 
$this->addFieldMapping('field_showtime_theater', 'theaterid')->xpath('theaterid')->sourceMigration('Theater'); 

ответ

1

Если вы только собираетесь использовать узлы, которые также можно использовать ссылки на узлы: https://drupal.org/project/references

Что было вокруг гораздо дольше, и, возможно, проще установить вверх. Я бы создал тип узла Showtime, который имеет 2 x опорных поля узла. Один, чтобы ссылаться на фильмы, а другой - на театры.

Как только вы создали свои типы узлов, сначала необходимо перенести фильмы и театры, а затем вы можете ссылаться на них при переносе сеансов. Это можно сделать при сопоставлении полей ссылки на узлы. Migrate сопоставляет идентификатор старого элемента с вновь созданным идентификатором узла. Взгляните на эту документацию (https://drupal.org/node/1133448) под заголовком подзаголовка. Миграция.

Лично я бы не заставлял нид. Нет необходимости. Migrate создаст таблицы сопоставления, чтобы вы могли узнать, какой элемент сопоставляется с каким узлом.

+0

Спасибо за ваш быстрый ответ. Теперь он работает. Я решил продолжить использование модуля entity_reference, потому что он все еще находится в активной разработке, в отличие от node_reference. – Satara

+1

Его все еще активно поддерживается. Теперь это дополнительный модуль ссылок https://drupal.org/project/references, но да, его больше не разрабатывают как стабильное. – nickwshaw

+1

В [примечаниях к выпуску ссылок 7.x-2.0] (https://drupal.org/node/985370/release) они говорят, что в ближайшем будущем это будет наиболее непримиримо устаревшим, и что entity_reference следует, вероятно, сначала рассмотреть свежие проекты D7. Поскольку эта запись довольно старая, возможно, они решили ее сохранить. – Satara

Смежные вопросы