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

Kenpeter
quelle
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.

Les Lim
quelle
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