2

Drupal 5 のサイトを Drupal 6 から Drupal 7 に移行する作業のほとんどが完了しました。CCK コンテンツ移行は、1 つの例外を除いて素晴らしい仕事をしました。 「許可された値」リストに。

元の「許可された値」リストがキー|ラベルのペアを使用しなかった場合、次のようになります。

Alabama
Alaska
Arizona 

許可された値は、Drupal 7 に移行されると、次のように key|label 形式に自動的に更新されました。

1|Alabama
2|Alaska
3|Arizona

これは、データベース内の実際のデータがそれに応じて変更されなかったことを除けば、それほど悪くはありません。そのため、既存のデータは「1」ではなく「Alabama」と表示されます。おそらく、新しいデータは「Alabama」ではなく「1」を格納します。また、ノードを編集すると、そのフィールドにデータが存在するにもかかわらず、値「-None-」が選択リストで事前に選択されます。

場合によっては、「許可された値」リストは、次のようにキー | ラベルのペア (キーとして文字列を使用) を使用しました。

movie|Movie
television|Television
product_or_service|Product or Service

これらの場合、キーはデータベースに格納されます。前のケースと同様に、ノードを編集するときに (既存のデータを表示する代わりに) 値 "-None-" が事前に選択されます。Drupal 7 に移行してもキーとラベルのペアは変更されませんでしたが、次のようにスペースが削除されていることに気付きました。

product_or_service | Product or Service

なりました:

product_or_service|Product or Service

ただし、ここでの問題は、キーがラベル (Product または Service など) ではなくノード (product_or_service など) に表示されることです。

いずれの場合も、ビューのこれらの選択リストから作成された公開フィルターは結果を返しません。選択リストではない他のフィールド(テキストフィールドなど)で公開フィルターを作成しようとしましたが、それらは問題なく機能しました(そのビューの詳細オプションで「AJAXを使用」が選択されると)。

問題は、これらの分野を前進させる最善の方法は何かということです。既存のノードと新しいノードの両方で key|label データを一貫して使用したいと考えています。また、Drupal 6 に戻って移行プロセスをやり直すことは、できれば避けたいと思っています。

この問題に関する参考文献は、オンラインで 2 つしか見つかりませんでした。同じ問題が発生した後、1 人が手動でデータを更新したようです (この投稿の 1 つのコメントを参照してください)。ノードがあまりないので、このような解決策に反対しているわけではありませんが、それを行う方法についてかなり具体的な指示が必要です (意味がわかれば、phpMy Admin を介してデータベースにアクセスします)。

別の人が Drupal 6 で修正したようですが、私はすでに Drupal 7 を使用しており、(これを除いて) ほぼ完了しているため、6 に戻ることは避けたいと考えています! この場合も、おそらく特定の指示が必要になるでしょう。

誰かがこれを経験しましたか?または、スマートでシンプルなソリューションを知っていますか? ご意見やご提案をいただければ幸いです。ありがとうございました!

4

1 に答える 1

0

1) DB の数値を正しい文字列に置き換えます。これを行うには、次のような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 6 のコードではなく Drupal 7 にありますが、おわかりいただけると思います)

2) キーが DB 内のデータと一致していることを確認します。キーが同じであれば、ノードを編集するときに正しい値が選択されているはずです。問題がある場合は、キーの値とDBに保存されている値を比較してください。これにより、余分なスペースなどの小さな違いが強調表示されます...

于 2012-09-04T08:53:16.593 に答える