web-dev-qa-db-ja.com

タイトルではなくフィールドでノードを関連付ける方法は?

Feeds を使用してXMLからコンテンツをインポートしています。コンテンツは次のような映画と上映時間です。

<film id=av1>
  <title>Avatar</title>
  <showtimes total="2">
    <showtime show_id="1" id="av1" date="1/1/2012" price="10" />
    <showtime show_id="2" id="av1" date="2/1/2012" price="15" />
  <showtimes>
<film>

現在、私は2つのコンテンツタイプ(フィルムとショータイム)を作成し、Node Reference( References module))を使用してショータイムをフィルムに関連付けています。関係を使用してリスト、日付リストなどを表示する.

これは問題ありませんが、Node参照はノードタイトルでのみリンクできるため、ソースフィードの映画タイトルを更新すると問題が発生します。IDフィールドを使用してリンクすることをお勧めします。決して変わらない。

問題は、フィードを使用して2つのコンテンツタイプにインポートしているため、2つのフィードインポーターを実行していて、同期するにはソースのタイトルを使用する必要があることです。 Drupalで映画のタイトルが変更されたとすると、XMLにさらに上映時間が追加されます。インポート時に、新しいShowtimeノードが作成されますが、Filmノードが見つかりません。ソースからのIDフィールドを使用すると、物事が結合されたままになります。参照されたコンテンツタイプの代わりにフィールドコレクションを使用する方がよいでしょうか?

可能な解決策:

  • 分類語彙を使用して、各映画に新しい用語「id」を作成します。次に、上映時間に同じ用語をタグ付けします。これが分類法の適切な使用であるかどうかはわかりませんが、この方法で単一接続を作成しますか?

  • Relation モジュールがフィールドによるリンクを提供するかどうかを確認します。おそらくフィードではまだ機能しません。

  • 映画のコンテンツタイプを1つ作成し、上映時間を保存するには Field Collection を使用します。次に、すべてが単一のノードに接続されます。これがどれほど実現可能かわかりません。

どんなガイダンスや提案も歓迎します!

3
pushka

あなたは間違っています。 Node referenceはノードIDを使用します-参照を作成するためのノードの主キーです。参照するノードを入力する必要があるフォーム要素は、オートコンプリートを使用して、参照したいノードですが、格納されている値はノードIDなので、ノード参照を使用してタイトルを変更しても問題はありません。

これを説明するためのノード参照モジュールのコードは、これらの参照の作成に使用するフィールドタイプに対してスキーマが定義されている場所にあります。

/**
 * Implements hook_field_schema().
 */
function node_reference_field_schema($field) {
  $columns = array(
    'nid' => array(
      'type'     => 'int',
      'unsigned' => TRUE,
      'not null' => FALSE,
    ),
  );
  return array(
    'columns' => $columns,
    'indexes' => array('nid' => array('nid')),
    'foreign keys' => array(
      'nid' => array(
        'table' => 'node',
        'columns' => array('nid' => 'nid'),
      ),
    ),
  );
}
2
googletorp