Как исправить измененные пары "ключ | метка" в полях "список выбора" (и соответствующие данные) после перехода на 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) Убедитесь, что ключи соответствуют данным в БД - если они совпадают, то при редактировании узла должно быть выбрано правильное значение. Если у вас возникли проблемы, сделайте сравнение между значением ключа и значением, хранящимся в БД - это должно выделить любые незначительные различия, такие как лишние пробелы...