Cách sử dụng hook_node_presave để thay đổi giá trị của trường


9

Về cơ bản, tôi muốn đặt tên và họ cùng nhau thành $ node-> field_par_contact_name

Nhưng nó cho tôi cảnh báo. (Xem bên dưới)

chức năng Partners_node_presave ($ nút) {
  if ($ node-> type == 'Partners') {
    $ 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
    // Biến ẩn
    $ node-> field_par_contact_name ['und'] [0] ['value'] = $ first_name. ''. $ họ;

    // Cảnh báo sau khi lưu: Array_flip (): Chỉ có thể lật các giá trị STRING và INTEGER! trong DrupalDefaultEntityControll-> load () (dòng 173 của ... / drupal-7.23 / gồm / entity.inc
  }
}

Cập nhật , vui lòng xem hình ảnh: nhập mô tả hình ảnh ở đây


bạn đang nộp mẫu lập trình? Ý tôi là bạn đang sử dụng hook_form_alter? và sau đó drupal_form_submit ở đâu đó trong mã của bạn?
khắc nghiệt

Câu trả lời:


6

Đối với người mới bắt đầu, có lẽ bạn đang sử dụng khóa mảng sai cho giá trị trường mà bạn đang lưu; 'tên' nên là 'giá trị' ở đó.

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

Thứ hai, bạn thực sự đang sử dụng các trường Tham chiếu thuật ngữ phân loại cho các trường "tên" và "họ" của bạn. Một điểm quan trọng về các trường Tham chiếu là bạn không thể luôn cho rằng các thực thể được tham chiếu đã được tải đầy đủ và có sẵn trong đối tượng của bạn. Theo mặc định, khi đối tượng nút được tải, trường đó chỉ trông như thế này:

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

Chỉ có phím 'tid' chắc chắn là có. 'Tên' là một thuộc tính của thuật ngữ được tham chiếu và thường không có sẵn tự động. (Mã tiếp theo thực sự có thể tải thuật ngữ được tham chiếu và làm cho nó có sẵn trong đối tượng nút $, nhưng đó chỉ là sự cố nếu có.)

Bạn sẽ có thời gian dễ dàng hơn nhiều nếu các trường "Tên" và "Họ" của bạn là các trường văn bản thay vì tham chiếu. Sau đó, các giá trị đó sẽ thuộc trực tiếp vào nút, thay vì một thuật ngữ phân loại riêng biệt được tham chiếu.

Tuy nhiên, nếu bạn bị mắc kẹt khi sử dụng các tham chiếu thuật ngữ phân loại, thì bạn nên tạo một điểm trong mã của mình để tải thuật ngữ được tham chiếu, sau đó lấy các giá trị bạn cần từ chính thuộc tính $ term-> name.


Xem hình trên. Không có "giá trị"
kenpeter

À, bạn đang sử dụng các trường Tham chiếu thuật ngữ phân loại cho tên và họ, chứ không phải các trường văn bản như tôi giả định. Điều đó thật đặc biệt. :) Cập nhật câu trả lời.
Les Lim

bạn nói đúng.
kenpeter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.