Come utilizzare hook_node_presave per modificare il valore del campo


9

Fondamentalmente, voglio mettere insieme nome e cognome in $ node-> field_par_contact_name

Ma mi dà un avvertimento. (Vedi sotto)

funzione partnership_node_presave ($ node) {
  if ($ node-> type == 'partnership') {
    $ 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
    // Variabile nascosta
    $ node-> field_par_contact_name ['und'] [0] ['value'] = $ first_name. ''. $ Cognome;

    // Avviso dopo il salvataggio: array_flip (): può solo capovolgere i valori STRING e INTEGER! in DrupalDefaultEntityController-> load () (riga 173 di ... / drupal-7.23 / include / entity.inc
  }
}

Aggiornato , vedi immagine: inserisci qui la descrizione dell'immagine


stai inviando il modulo a livello di codice? Voglio dire, stai usando hook_form_alter? e poi drupal_form_submit da qualche parte nel tuo codice?
harshal,

Risposte:


6

Per cominciare, probabilmente stai usando la chiave di array errata per il valore del campo che stai salvando; 'nome' dovrebbe essere 'valore' lì.

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

In secondo luogo, stai effettivamente utilizzando i campi Riferimento termine tassonomia per i campi "nome" e "cognome". Un punto importante sui campi di riferimento è che non puoi sempre presumere che le entità referenziate siano state caricate completamente e siano disponibili nel tuo oggetto. Per impostazione predefinita, quando l'oggetto nodo viene caricato, quel campo appare solo così:

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

Solo la chiave 'tid' è sicuramente lì. 'nome' è una proprietà del termine di riferimento e di solito non è automaticamente disponibile. (Il codice successivo potrebbe effettivamente caricare il termine a cui viene fatto riferimento e renderlo disponibile all'interno dell'oggetto $ node, ma in tal caso è solo un caso.)

Avresti un tempo molto più facile se i tuoi campi "Nome" e "Cognome" fossero campi di testo anziché riferimenti. Quindi, quei valori appartengono direttamente al nodo stesso, piuttosto che a un termine di tassonomia separato a cui si fa riferimento.

Se sei bloccato usando i riferimenti ai termini tassonomici, tuttavia, dovresti inserire un punto nel codice per caricare il termine referenziato, quindi ottenere i valori necessari dalla proprietà $ term-> name stessa.


Vedi l'immagine sopra. Non esiste un "valore"
kenpeter il

Ah, stai usando i campi di riferimento dei termini di tassonomia per il nome e il cognome, non i campi di testo come pensavo. È strano. :) Aggiornata la risposta.
Les Lim,

hai ragione.
kenpeter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.