web-dev-qa-db-fra.com

Comment modifier par programmation des champs de termes de taxonomie?

Dans D7, comment ajouter/modifier par programmation des champs aux termes de taxonomie? Ils sont clairement modifiables et dans l'interface utilisateur, je peux y ajouter et modifier des champs comme je le fais dans les nœuds, mais cela n'a pas été une tâche facile dans le code. Disons que j'ai un vocabulaire nommé Fruit avec des termes comme pommes et bananes. Je lui ai ajouté un champ nommé main_article_id, donc tous les termes ont un nom, une description et un identifiant d'article principal. Lorsque je crée un nœud nommé Apples qui fait référence au vocabulaire Fruit (field_fruit) et Apples term est sélectionné, le code doit mettre à jour Apples term et définir son main_article_id champ à $node->nid. Voici mon code:

//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

Le nom de colonne d'un champ n'est pas toujours value; dans le cas des références de termes de taxonomie, c'est tid, et dans le cas des références de nœuds/d'entités, cela dépend du module que vous utilisez.

Pour un champ créé à l'aide du module Références , le nom est nid, et pour celui créé à l'aide du module Entity Reference , c'est target_id.

Le code suivant devrait fonctionner un peu mieux:

//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