2012-07-16 86 views
2

我有一個分類詞彙表kategorie這樣分類的參考場:Drupal的:編寫使用規則和定製的PHP代碼

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

詞彙具有這樣ID的自定義字段:957214d2-ce39-423d-aeb1-32f2e8b972f6,所以每一個術語和父詞條具有ID(其不是tid!)。

我有一個引用分類法字段的內容類型分類。也有稱爲kategorieTempId陣列字段,並且該值是像在kategorie-分類法是相同的。該數組中的ID的數量表示術語和父項的分層順序。因此,如果節點應該在kategorie -Kat01 - > Child01,將有兩個ID在kategorieTempId,一個家長,一個孩子的術語。
現在我需要讓孩子長期的ID,比獲得從詞彙的分類項,並將其寫入引用的術語領域。

我做了什麼至今:
建立一個規則,即節約了節點之前發射,使用動作地產取實體獲得從詞彙的分類術語到一個數組。然後,我添加動作執行定製的PHP代碼找孩子的TID,並將其寫入到一個名爲katReturn場。
這裏是codeI使用(我是一個總的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技能是有限的,我感謝任何幫助,這指向了正確的方向。感謝名單。

+1

任期參考的字段列是'tid',所以你的代碼應該是'$節點 - > field_kat_return [ 'UND'] [0] [ 'TID'] = $項目;' – Clive 2012-07-16 12:44:30

+0

謝謝爲你的答覆,但我不明白這一點。字段field_kategorie不是引用分類字段。它只是一個幫手字段,它與我所尋找的術語的tid相同。 術語引用字段是field_kategorie。我想把從最後一個foreach循環獲得的分類術語寫入這個領域。 – krabbe 2012-07-16 13:01:20

+0

我的回答有錯誤。當然field_kategorie是引用分類法字段。而field_kat_return是幫手場... – krabbe 2012-07-16 18:31:23

回答

1

解決的辦法是比我想象的簡單。由於@Clive
我可以保存期限-ID存儲在$項目,不直接通過第三的foreach循環下去。

$node->field_kat_return['und'][0]['tid'] = $item;