2

私はこのような分類法の語彙kategorieを持っています:

  • Kat01
    • Child01
    • Child02
  • Kat02
    • Child01
    • Child02

語彙には、次のようなIDを持つカスタムフィールドがあります:957214d2-ce39-423d-aeb1-32f2e8b972f6したがって、すべての用語と親用語にはIDがあります(これはtidではありません!)。

参照されている分類フィールドkategorieを持つコンテンツタイプがあります。また、 kategorieTempIdという配列フィールドがあり、値はkategorie-taxonomyの場合と同じです。その配列内のIDの数は、用語と親用語の階層順序を表します。したがって、ノードがkategorie -Kat01-> Child01にある必要がある場合、kategorieTempIdには2つのIDがあります。1は親用、もう1つは子用語用です。
次に、語彙から分類用語を取得して参照用語フィールドに書き込むよりも、子用語のIDを取得する必要があります。

これまでに行ったこと:
ノードを保存する前に実行されるルールを設定します。プロパティごとにエンティティを取得するアクションを使用して、語彙から配列に分類用語を取得します。次に、アクションExecute custom PHP codeを追加して子tidを見つけ、それをkatReturnというフィールドに書き込みます。
これが私が使用するコードです(私は完全なphp初心者であり、これがエレガントな方法であるかどうかはわかりませんが、機能します):

$anzahl = 0; //counter for hierarchy  
foreach ($kat_id_fetched as $kat_term) { // fill two arrays  
  $tid[$anzahl] = $kat_term->tid; // array with termID  
  $parentTerm_id[$anzahl] = db_query("SELECT {parent} FROM {taxonomy_term_hierarchy} WHERE tid = $kat_term->tid")->fetchField(); // array with parent-termID  
  ++$anzahl;  
};
foreach ($tid as $item) { // check if tid is parent  
  $anzahl = 0;  
  if (!in_array($item, $parentTerm_id)) {
    $kat_child = $item; // if not in parent-array, save tid
    $node->field_kat_return['und'][0]['value'] = $item;
    break;  
  };
  ++$anzahl;  
};  

これで、子用語のtidがわかり、参照分類フィールドに書き込みたいのですが、わかりません。私が試したコードは次のとおりです。

foreach ($kat_id_fetched as $kat) {
  if ($kat->tid == $returned_kat) {
    $node->field_kategorie[] = $kat;
    break;
  };
};

私は、私が欲しいものを明確にしたことを願っています。前に言ったように、私のphpスキルは限られており、正しい方向を示す助けに感謝しています。ありがとう。

4

1 に答える 1

1

解決策は私が思っていたよりも簡単です。@Cliveのおかげ
で、$ itemに格納されているterm-idを、3番目のforeachループを経由せずに直接保存できます。

$node->field_kat_return['und'][0]['tid'] = $item;  
于 2012-07-17T23:36:08.443 に答える