Перенос данных из Profile в поля Field [решено]

Главные вкладки

Аватар пользователя antton antton 18 декабря 2011 в 21:27

Недавно обновил сайт Drupal 6.22 => Drupal 7.10. При переносе автоматически перенеслись данные модуля Profile (поля MySQL profile_field, profile_value). Полистав сайт Drupal.org, я понял что этот модуль признан устаревшим, и при чистой установки Drupal 7 с нуля он даже не ставится. Соответственно, возник вопрос.

Как теперь перенести данные из модуля Profile в стандартные средства управления профилем в Drupal 7 - поля Field (field_data_field_***, da_field_revision_field_***)?

Комментарии

Аватар пользователя antton antton 19 декабря 2011 в 0:18

Ну таблицы то я вижу.

В таблицы:

da_field_config
da_field_config_instance

— построчно заносится информация о названиях создаваемых полях в профиле ("field_имя_поля")

Ну и для каждого создаваемого поля создаются отдельные таблицы в MySQL:

field_data_field_имя_поля
field_revision_field_имя_поля

Для примера, создаём поле ФИО пользователя — «field_real_name». Соответственно, в таблицах «da_field_config», «da_field_config_instance» появятся строки «field_real_name».
Ну и дополнительно в базе данных появятся таблицы: «field_data_field_real_name», «field_revision_field_real_name», где и будут храниться данные пользователей по этому полю.

С этим вопросов вроде не возникает. Но а так как я не программист, а лишь умею читать уже написанный код, меня интересуют есть ли готовые способы миграции данных. Возможно используя какой-либо промежуточный модуль (например, Profile2 в Drupal 7 или CCK Profile в Drupal 6). Возможно, SQL-запрос кто-нибудь уже написал.

Аватар пользователя antton antton 25 декабря 2011 в 17:34

Как я догадываюсь можно на Drupal 6 установить модуль content profile. Перенести на него данные из стандартного профиля Drupal 6.

А затем уже при обновлении Drupal 6 на Drupal 7 данные уже перенесутся с помощью модуля обновления CCK.

В верном направлении копаю? У кого-нибудь есть опыт переноса данных в Drupal 6 из стандартного профиля в content profile?

Аватар пользователя antton antton 9 января 2012 в 1:58

И так, как решил. Длинно, нудно. Но как уж умею.

Создал в панели управления Drupal 7, в профиле, - новые аналогичные поля: День рождение, город, страна, реальное имя. Поигравшись добавляя данные о пользователях, полез ручками в базу данных MySQL (панель управления phpmydmin) и проанализировал новые получившиеся таблицы профиля filed в Drupal 7:

field_data_field_birthday
field_data_field_city
field_data_field_country
field_data_field_real_name

field_revision_field_birthday
field_revision_field_city
field_revision_field_country
field_revision_field_real_name

1. Разбил старую таблицу profile_value на таблицы: birthday, city, country, phone, real_name. (Помогают в такой разбивке данные из таблицы profile_field)

2. Добавил новые колонки в таблицы birthday, city, country, phone, real_name, соответствующие колонкам в новых таблицах field (расположив колонки в том же порядки). Т.е. по сути уже получил нужные мне таблицы.

3. Заполнил недостающие данные в полученных колонкам методом копировать/вставить - с помощью SQL-команд запросов к базе данных (запросы UPDATE, SET).

4. Очистил содержимое таблиц (запрос TRUNCATE):

field_data_field_birthday
field_data_field_city
field_data_field_country
field_data_field_real_name

field_revision_field_birthday
field_revision_field_city
field_revision_field_country
field_revision_field_real_name

удалив из них тестовые данные, которые появились в них когда я тестировал эти поля в Drupal 7.

5. Скопировал данные из таблиц birthday, city, country, phone, real_name в таблицы field:

birthday => field_data_field_birthday
city => field_data_field_city
country => field_data_field_country
real_name => field_data_field_real_name

birthday => field_revision_field_birthday
city => field_revision_field_city
country => field_revision_field_country
real_name => field_revision_field_real_name

При копирование выбрал метод "копировать только данные" (т.е. структуру таблиц не копировал).

6. С помощью команды phpmyadmin "восстановить таблицы", на всякий случай исправил имеющиеся ошибки, в том числе пересчитал индексы.