Verwendung von hook_node_presave zum Ändern des Feldwerts


9

Grundsätzlich möchte ich Vor- und Nachnamen in $ node-> field_par_contact_name zusammenfügen

Aber es warnt mich. (Siehe unten)

Funktion partnerschaft_knoten_presave ($ knoten) {
  if ($ node-> type == 'partnerschaft') {
    $ first_name = $ node-> field_par_contact_first_name ['und'] [0] ['name'];
    $ surname = $ node-> field_par_contact_surname ['und'] [0] ['name'];

    // https://drupal.org/project/field_hidden
    // Versteckte Variable
    $ node-> field_par_contact_name ['und'] [0] ['value'] = $ first_name. ''. $ Nachname;

    // Warnung nach dem Speichern: array_flip (): Kann nur STRING- und INTEGER-Werte umdrehen! in DrupalDefaultEntityController-> load () (Zeile 173 von ... / drupal-7.23 / includes / entity.inc
  }}
}}

Aktualisiert , siehe Bild: Geben Sie hier die Bildbeschreibung ein


Senden Sie das Formular programmgesteuert? Ich meine, benutzt du hook_form_alter? und dann drupal_form_submit irgendwo in deinem Code?
Harshal

Antworten:


6

Für den Anfang verwenden Sie wahrscheinlich den falschen Array-Schlüssel für den Feldwert, den Sie speichern. 'name' sollte dort 'value' sein.

$node->field_par_contact_name['und'][0]['value'];

Zweitens verwenden Sie tatsächlich Taxonomy Term Reference-Felder für Ihre Felder "Vorname" und "Nachname". Ein wichtiger Punkt bei Referenzfeldern ist, dass Sie nicht immer davon ausgehen können, dass die referenzierten Entitäten vollständig geladen wurden und in Ihrem Objekt verfügbar sind. Wenn das Knotenobjekt geladen wird, sieht dieses Feld standardmäßig nur so aus:

$node->field_par_contact_first_name (Array)
  'und' (Array)
    0 (Array)
      'tid' => 284

Nur der 'tid'-Schlüssel ist definitiv da. 'name' ist eine Eigenschaft des referenzierten Begriffs und normalerweise nicht automatisch verfügbar. (Nachfolgender Code lädt möglicherweise den referenzierten Begriff und stellt ihn im $ node-Objekt zur Verfügung. Dies ist jedoch nur zufällig der Fall.)

Sie würden es viel einfacher haben, wenn Ihre Felder "Vorname" und "Nachname" Textfelder anstelle von Referenzen wären. Dann würden diese Werte direkt zum Knoten selbst gehören und nicht zu einem separaten Taxonomiebegriff, auf den verwiesen wird.

Wenn Sie jedoch keine Taxonomie-Termreferenzen mehr verwenden, sollten Sie in Ihrem Code einen Punkt angeben, um den referenzierten Term zu laden, und dann die benötigten Werte aus der Eigenschaft $ term-> name selbst abrufen.


Siehe Bild oben. Es gibt keinen 'Wert'
Kenpeter

Ah, Sie verwenden Taxonomy Term Reference-Felder für den Vor- und Nachnamen, keine Textfelder, wie ich angenommen habe. Das ist eigenartig. :) Die Antwort wurde aktualisiert.
Les Lim

Du hast Recht.
Kenpeter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.