Как исправить измененные пары "ключ | метка" в полях "список выбора" (и соответствующие данные) после перехода на Drupal 7?

Я прошел большую часть процесса миграции сайта Drupal 5 с Drupal 6 на Drupal 7. CCK Content Migrate отлично справился с одним исключением: все поля в формате "список выбора" имеют одну из нескольких проблем с парами ключ | метка в их списке "допустимых значений".

Если исходный список "допустимых значений" не использовал пары "ключ | метка", например:

Alabama
Alaska
Arizona 

Разрешенные значения были автоматически обновлены до формата key|label при их миграции на Drupal 7, например:

1|Alabama
2|Alaska
3|Arizona

Это было бы не так уж и плохо, за исключением того, что фактические данные в базе данных не изменились соответствующим образом, поэтому вы увидите "Алабама" вместо "1" для существующих данных. Предположительно, любые новые данные будут хранить "1" вместо "Алабама". Кроме того, при редактировании узла значение "-None-" предварительно выбирается в списке выбора, несмотря на тот факт, что для этого поля существуют данные.

В некоторых случаях в списке "допустимых значений" использовались пары "ключ | метка" (со строкой в ​​качестве ключа), например:

movie|Movie
television|Television
product_or_service|Product or Service

В этих случаях ключ хранится в базе данных. Как и в предыдущем случае, значение "-None-" предварительно выбирается при редактировании узла (вместо отображения существующих данных). Пары key|label не изменились при переходе на Drupal 7, хотя я заметил, что пробелы были удалены, например:

product_or_service | Product or Service

стали:

product_or_service|Product or Service

Но проблема здесь в том, что ключ отображается в узле (например, product_or_service) вместо метки (например, Product или Service).

Во всех случаях открытые фильтры, созданные из этих списков выбора в представлениях, не возвращают результатов. Я попытался создать открытые фильтры с другими полями, которые не были списками выбора (например, текстовыми полями), и они работали просто отлично (когда в расширенных параметрах этого вида был выбран "использовать AJAX").

Итак, вопрос в том, как лучше всего двигаться вперед в этих областях? Я хотел бы последовательно использовать данные ключевых меток для существующих и новых узлов. И я хотел бы избежать возврата к Drupal 6, чтобы начать процесс миграции заново, если это вообще возможно!

Я нашел только две ссылки на эту проблему в Интернете. Кажется, один человек обновил данные вручную после того, как столкнулся с той же проблемой (см. Единственный комментарий к этой записи). Я не против такого решения, так как у нас не так уж много узлов, но мне понадобятся довольно конкретные указания о том, как это сделать (я получаю доступ к своей базе данных через phpMy Admin, если вы знаете, что я имею в виду).

Другой человек, похоже, исправил это в Drupal 6 - но я надеюсь избежать возврата к 6, так как мы уже в Drupal 7 и почти закончили (за исключением этого)! Мне, вероятно, понадобятся конкретные указания и в этом случае.

Кто-нибудь прошел через это? Или знаете умное / простое решение? Любые мысли или предложения будут очень признательны. Спасибо!

1 ответ

1) Заменить числовые значения в БД правильной строкой. Я бы использовал php, чтобы сделать это, что-то вроде:

$countries = db_query('SELECT nid, field_country_value FROM field_data_field_countries')->fetchAll();

$search = array(1,2,3);
$replace = array('Alabama', 'Alaska', 'Arizona');

while($country = db_fetch_array($countries)) {
    $country_name = str_replace($search, $replace, $country['field_country_value']);
    db_query('UPDATE field_data_field_countries SET field_country_value=:field_country_value WHERE nid=:nid', 
        array(':field_country_value'=>$country_name, ':nid'=>$country['nid']));
}

Это можно запустить из любого пользовательского модуля. (Я извиняюсь, что-то из этого есть в Drupal 7, а не в коде Drupal 6, но вы поняли идею)

2) Убедитесь, что ключи соответствуют данным в БД - если они совпадают, то при редактировании узла должно быть выбрано правильное значение. Если у вас возникли проблемы, сделайте сравнение между значением ключа и значением, хранящимся в БД - это должно выделить любые незначительные различия, такие как лишние пробелы...

Другие вопросы по тегам