Вед-дев, Сео, Манимейкинг

Перенос нод из Drupal 6 в Drupal 7

Итак, у вас есть сайт, который вы делали очень давно, и был он сделан на Drupal 6, но сейчас 2014 год и скоро выход D8, в связи с этим, D6 станет устаревшим и больше не будет поддерживаться. В этой статье мы рассмотрим процесс переноса нод из D6 в D7 при помощи модулей:

  • http://drupal.org/project/views_data_export
  • http://drupal.org/project/feeds

При помощи первого модуля мы сделаем экспорт всех нод из D6 в CSV формат, а при помощи второго модуля, мы сделаем импорт нод из CSV файла в D7.

Шаг первый.

Устанавливаем модуль Views Data Export на ваш сайт с Drupal 6 и устанавливаем его. Далее, этот модуль нужно пропатчить, для того чтобы он выводил все HTML тэги в теле ноды (по умолчанию он выводит без html тэгов), либо скачать уже пропатченный модуль в самом низу статьи.

Далее, создаем представление и выбираем тип редставления Views Data.

Перенос нод из Drupal 6 в Drupal 7

Формат выставляем в CSV файл, затем заходим в настройки этого формата.

Перенос нод из Drupal 6 в Drupal 7

Ставим галочку на "Keep HTML Tags". Далее, выводим все необходимые нам поля для экспорта в CSV файл. На нашем примере мы будем выводить следующие поля:

  • title
  • image
  • body
  • term
  • date
  • lang
  • path
  • guid (так как, должно быть одно уникальное поле, мы будем использовать nid в качестве guid)

title (заголовок ноды)

Когда добавляете поля во Views, не забудьте про лейбл полей, например, если вы выводите заголовки нод, то лейбл будет "title".

image (CCK поле изображения)

Указываем лейбл "image". Отображаем в виде URL (чтобы в CSV файле были полные URL адреса к изображению из CCK поля, например, http://webcoder.kz/sites/default/files/image.jpg)

body (тело ноды)

Указываем лейбл "body". Больше тут ничего не нужно настраивать, главное чтобы выводился полный текст body, а не обрезанная версия.

term (название термина таксономии)

Указываем лейбл "term". Вывод термина таксономии нужно делать не в виде ссылки, а в виде plain text.

date (дата создания ноды)

Указываем лейбл "date". Здесь нужно добавить свой собственный формат даты, так как, друпал принимает даты только в виде 2014-02-17 17:01:33 +0600, соответственно, нужно и выводить дату в таком формате:

Y-m-d H:i:s O

lang (язык ноды)

Указываем лейбл "lang". Язык должен выводиться в виде "ru" или "en" (или какой-либо другой язык), иначе feeds в Drupal 7 не примет значение этого поля из CSV корректно. Если у вас стоит дефолтный язык - русские, то по умолчанию это поле выводится в виде "Русский", что является неправильным форматом. Выхода из этой ситуации есть два. Первый - перезаписать значение поля и прописать там "ru", либо потом руками в CSV файле заменить "Русский" на "ru".

path (алиас вашей ноды)

Указываем лейбл "path". По умолчанию во Views это поле выводится таким образом - /somealias/page, что опять же, является неправильными форматом. Переднего слэша не должно быть, иначе feeds в D7 некорректно примет ваши алиасы из CSV файла. Как вариант, для выхода из этой проблемы, в CSV файле можно массово удалить передний слэш

guid (он же nid)

Указываем лейбл "guid". Это id нашей ноды. Поле GUID обязательно должно быть уникальным, для того чтобы при импорте материалов feeds знал, какие ноды уже существуют, а какие нет.

После настройки всех полей, в нашем представлении Views data нужно указать путь, по которому можно будет скачать наш CSV файл.

Перенос нод из Drupal 6 в Drupal 7

После этого, просто переходим на указанный нами путь в этом представлении и вам будет предложено скачать ваш CSV файл!

Шаг второй.

Для того чтобы не было проблем с кодировкой UTF-8, нужно загрузить ваш CSV файл в http://google.com/drive. Необходимо создать Spreadsheet, а затем в неё импортировать наш CSV файл, при этом указав разделитель в виде запятых, затем просто скачиваем наш файл и никаких проблем с кодировкой быть не должно.

Шаг третий.

Устанавливаем модуль Feeds на наш сайт с Drupal 7. Создаем все необходимые поля, которые присутствовали на нашем старом сайте. Идем в настройки admin/structure/feeds и клонируем importer "Node import". Далее, делаем следующие настройки:

Перенос нод из Drupal 6 в Drupal 7

"Attach to content type" ставим ваш тип материала, если у вас количество нод больше чем 250. Если меньше, то можете воспользоваться standalone формой импорта нод из CSV.

В настройках "Fetcher" выбираем "File upload"

В разделе "File upload" оставляем все по умолчанию.

В разделе "Parser" выбираем CSV.

В разделе "CSV parser" оставляем все по умолчанию.

"Processor" выбираем "node processor"

Перенос нод из Drupal 6 в Drupal 7

В разделе "Mapping" прописываем все наши поля. Source должен соответствовать лейблу в вашем CSV файле, например, если у вас лейбл назван "title", то и source нужно будет назвать "title".

Далее, идем добавлять нашу ноду типа "Article" для того чтобы импортировать ноды из CSV файла.

Перенос нод из Drupal 6 в Drupal 7

Загружаем наш CSV файл и ждём. В результате у вас должны импортироваться все ноды из CSV файла. После этого, можете проверить все ваши ноды на странице admin/content

Файл: 


Комментарии (7)

спасибо большое за статью, а как перенести пользователей?

Процесс аналогичен, просто при создании представления в D6 (views data export) выбираете пользователей и все их поля необходимые, а в D7 в feeds в разделе "Processor" выбираем "users"

Спасибо за статью, как раз собираюсь переносить с Д6 на Д7

"либо скачать уже пропатченный модуль в самом низу статьи."

Где можно скачать?

Была проблема с правами на скачивание файлов. Попробуйте сейчас в самом низу статьи скачать архив.

спасибо

Скажите, важно чтобы все урлы сохранились, при таком экспорте и импорте они сохранятся?

Странно, пишите про 6 друпал, а пример представления приведен для 7-го

Разделы

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • Olzhas 6 месяцев 3 недели назад
    Спасибо. С Новым Годом! 
  • Den 7 месяцев 2 недели назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 7 месяцев 2 недели назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 8 месяцев 2 недели назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 8 месяцев 2 недели назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 8 месяцев 2 недели назад
    захожу на mysql через ssh по команде  
  • admin 8 месяцев 2 недели назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 8 месяцев 2 недели назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 9 месяцев 2 дня назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника? 
  • Stas 10 месяцев 2 недели назад
    Ошибка в ключе квантификатора - replace(/будешь|пить/ig, "хлеб"); Указать -g для прохода по всем совпадениям!