it-swarm-ja.com

分類用語のフィールドをプログラムで変更する方法は?

D7では、分類用語にフィールドをプログラムで追加/変更するにはどうすればよいですか?それらは明らかにフィールド化可能であり、UIではノードで行うのと同じようにフィールドを追加および編集できますが、コードでは簡単な作業ではないことが判明しました。りんごやバナナのような用語でフルーツという名前の語彙があるとします。 main_article_idという名前のフィールドを追加しました。そのため、すべての用語には、名前、説明、メインの記事IDがあります。 Fruitボキャブラリ(field_fruit)への参照を持つApplesという名前のノードを作成し、Apples用語を選択すると、コードはApples用語を更新し、そのmain_article_idフィールドを$node->nidに設定する必要があります。これが私のコードです:

//hook_node_insert fires after new node has been inserted into db
function MYMODULE_node_insert($node)
{
    $taxonomy_term_id = $node->field_FRUIT[LANGUAGE_NONE][0]['value'];
    $taxonomy_term = taxonomy_term_load($value['tid']);
    if($taxonomy_term != FALSE)
    {
        //doesn't work
        $taxonomy_term->field_main_article_id[LANGUAGE_NONE][0]['value'] = $node->nid;
        taxonomy_term_save($taxonomy_term);
    }
}
7
Ari Linn

フィールドの列名は常にvalueとは限りません。分類用語参照の場合はtidであり、ノード/エンティティ参照の場合は使用しているモジュールによって異なります。

References モジュールを使用して作成されたフィールドの名前はnidであり、 Entity Reference モジュールを使用して作成されたフィールドの名前はtarget_id

次のコードは少し良く機能するはずです:

//hook_node_insert fires after new node has been inserted into db
function MYMODULE_node_insert($node)
{
    $taxonomy_term_id = $node->field_FRUIT[LANGUAGE_NONE][0]['tid'];

    // $value['tid'] isn't defined anywhere in this function scope so I 
    // assume you meant to use $taxonomy_term_id here
    $taxonomy_term = taxonomy_term_load($taxonomy_term_id);
    if($taxonomy_term != FALSE)
    {
        $column_name = 'nid'; // Or 'target_id' if you're using entity reference            

        $taxonomy_term->field_main_article_id[LANGUAGE_NONE][0][$column_name] = $node->nid;
        taxonomy_term_save($taxonomy_term);
    }
}
9
Clive