it-swarm.com.de

Wie kann man Felder von Taxonomiebegriffen programmgesteuert ändern?

Wie füge ich in D7 Felder zu Taxonomiebegriffen programmgesteuert hinzu/ändere sie? Sie sind klar feldfähig und in der Benutzeroberfläche kann ich Felder in ihnen hinzufügen und bearbeiten, genau wie in Knoten, aber es erwies sich als keine leichte Aufgabe im Code. Angenommen, ich habe einen Wortschatz namens Fruit mit Begriffen wie Äpfel und Bananen. Ich habe ein Feld mit dem Namen main_article_id Hinzugefügt, sodass alle Begriffe Name, Beschreibung und Hauptartikel-ID haben. Wenn ich einen Knoten mit dem Namen Äpfel erstelle, der einen Verweis auf das Fruchtvokabular (field_fruit) Hat und den Begriff Äpfel ausgewählt ist, sollte der Code den Begriff Äpfel aktualisieren und sein Feld main_article_id Auf $node->nid. Hier ist mein 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

Der Spaltenname für ein Feld ist nicht immer value; Bei Taxonomie-Termreferenzen ist es tid, und bei Knoten-/Entitätsreferenzen hängt es davon ab, welches Modul Sie verwenden.

Für ein Feld, das mit dem Modul Referenzen erstellt wurde, lautet der Name nid, und für ein Feld, das mit dem Modul Entitätsreferenz erstellt wurde, ist es target_id.

Der folgende Code sollte etwas besser funktionieren:

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