Як за допомогою гачки_node_presave змінити значення поля


9

В основному, я хочу вставити ім'я та прізвище разом у $ node-> field_par_contact_name

Але це дає мені попередження. (Дивись нижче)

функція partners_node_presave ($ вузол) {
  if ($ node-> type == 'партнерство') {
    $ first_name = $ node-> field_par_contact_first_name ['und'] [0] ['ім'я'];
    $ surname = $ node-> field_par_contact_surname ['und'] [0] ['ім'я'];

    // https://drupal.org/project/field_hidden
    // Прихована змінна
    $ node-> field_par_contact_name ['und'] [0] ['value'] = $ first_name. ''. $ прізвище;

    // Попередження після збереження: array_flip (): Можна перевернути лише значення STRING та INTEGER! в DrupalDefaultEntityController-> load () (рядок 173 від ... / drupal-7.23 / включає / entitet.inc
  }
}

Оновлено , дивіться зображення: введіть тут опис зображення


Ви подаєте форму програмно? Я маю на увазі, ви використовуєте гачок_форма_алтер? а потім drupal_form_submit десь у вашому коді?
суворий

Відповіді:


6

Для початку ви, ймовірно, використовуєте неправильну клавішу масиву для значення поля, яке ви зберігаєте; 'name' має бути 'value' там.

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

По-друге, ви фактично використовуєте поле Посилання терміна таксономії для ваших полів "ім'я" та "прізвище". Важливим моментом щодо посилальних полів є те, що ви не завжди можете припустити, що згадані об'єкти повністю завантажені та наявні у вашому об’єкті. За замовчуванням, коли об’єкт вузла завантажується, це поле виглядає лише так:

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

Тільки ключ "охайна" точно є. 'name' є властивістю зазначеного терміна і зазвичай не доступне автоматично. (Наступний код може фактично завантажувати посилається термін і робити його доступним в об'єкті $ node, але це просто випадковість, якщо так.)

У вас буде набагато простіший час, якби поля "Ім'я" та "Прізвище" були текстовими полями замість посилань. Тоді ці значення належали б безпосередньо самому вузлу, а не окремому терміну таксономії, на який посилається.

Якщо ви зациклювались на використанні посилань на терміни таксономії, то вам слід ввести код у вашому коді, щоб завантажити посилається термін, а потім отримати необхідні значення з самого властивості $ term-> name.


Дивіться зображення вище. Немає "значення"
кенпетер

Ах, ви використовуєте поле Посилання терміна таксономії для імені та прізвища, а не текстові поля, як я припускав. Це своєрідно. :) Оновлено відповідь.
Les Lim

Ви праві.
kenpeter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.