Lấy giá trị của một trường từ một thực thể


11

Những gì tôi đã cài đặt trên trang web của mình là các mô đun Entity API và Entityform. Mô-đun Entityform cho phép tôi tạo các biểu mẫu mà bất kỳ người dùng nào cũng có thể gửi và các trường biểu mẫu có sẵn để tôi sử dụng trong các chế độ xem, tương tự như cách một loại nội dung sẽ hoạt động.

Thông thường để kéo giá trị của một trường từ một nút vào mẫu của tôi bằng php, tôi sẽ làm như sau:

<?php echo $node->field_name[$node->language][0]['value']; ?>

Tuy nhiên, điều này không hoạt động với thực thể / thực thể.

Có ai biết một cách để làm điều này cho một lĩnh vực trong một hình thức thực thể không? Một số người đã đề nghị sử dụng hàm devel và hàm dpm () nhưng tôi không biết làm thế nào để sử dụng chúng.

Một số ví dụ cụ thể về cách tôi có thể nhận được giá trị của trường này thực sự sẽ giúp tôi rất nhiều.

Câu trả lời:


13

Bạn đã thử truy cập các giá trị với entity_metadata_wrapper chưa?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example

4
Lưu ý cho người đọc trong tương lai: Điều này là chính xác, nhưng để truy cập vào một trường thực thể là không cần thiết để cài đặt mô-đun Entity API; Lõi Drupal đã có các chức năng để truy cập vào một trường thực thể.
kiamlaluno

Có, nhưng OP đã gắn thẻ và chỉ định họ đã cài đặt mô-đun Entity API, do đó entity_metadata_wrapper, hơn nữa, đây là phần phụ thuộc của mô-đun thực thể.
David Thomas

2
entity-api là thẻ cho API thực thể được triển khai từ Drupal 7, không phải cho mô-đun Entity API. Lưu ý là để tránh các nhà phát triển mới bắt đầu nghĩ rằng mô-đun Entity API là cần thiết để xử lý các thực thể. Tôi đã không nói câu trả lời là không chính xác. :)
kiamlaluno

7

Không sử dụng mô đun API thực thể, để lấy giá trị của trường được liên kết với thực thể, bạn sử dụng field_get_items () ; bạn chỉ cần chuyển loại thực thể, đối tượng thực thể và tên trường.

Ví dụ, để có được nội dung của một nhận xét, bạn sử dụng mã sau đây.

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

Để có được phần thân của một nút, bạn có thể sử dụng đoạn mã sau.

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

Đối tượng thực thể là đối tượng được trả về từ entity_load () hoặc một hàm tải cụ thể cho thực thể đó, chẳng hạn như node_load () , comment_load () hoặc taxonomy_term_load () . Trong Drupal 8, các hàm này là các hàm bao cho entity_load().

Nếu bạn muốn hiển thị nội dung của trường, thì bạn nên sử dụng field_view_field () .


0

Bạn thường có thể nhận được tại các thuộc tính nút $ bởi vì bạn hoặc một số mã bạn đang sử dụng đang gọi node_load () trước đó.

Bạn cần tải đầy đủ một thực thể trước khi bạn có thể nhận được tại các thuộc tính của nó.

Sử dụng entity_load () http://api.drupal.org/api/drupal/includes%21common.inc/feft/entity_load/7

Sau đó, bạn thực sự sẽ có một đối tượng thực thể được tải mà bạn có thể nhận được tại các trường của.

Sử dụng dpm () giống như bất kỳ chức năng nào khác, bạn chỉ cần cài đặt mô-đun phát.

Vì vậy, hãy làm một cái gì đó như thế này:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>

0

Thử:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

Điều này sẽ in giá trị của trường.

Nếu đó là một mảng hãy thử điều này:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

Hãy nhớ rằng đây là đầu ra thô và tùy thuộc vào giá trị đến từ đâu, bạn có thể phải vệ sinh giá trị theo cách thủ công ở đây.

Xem: hàm field_get_items


0

Đặt phần này vào một trong các mô-đun của bạn và đi đến trang của biểu mẫu và bạn sẽ tìm thấy thông tin bạn đang tìm kiếm.

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}

-1

Thay vì sử dụng dpm và cài đặt mô-đun đó, tôi sử dụng:

print_r('<pre>');
print_r($node);
print_r('</pre>');

Hy vọng điều này sẽ giúp bạn đào sâu vào giá trị.


Hmmm, điều đó không mang lại bất cứ điều gì cho tôi :( Có thể là vì tôi đang xem một bản đệ trình thực thể, và không phải là một nút? Hay một bản đệ trình thực thể sẽ là một nút? Vì vậy, nhầm lẫn.
Dustin

Tôi không chắc chắn sau đó, tôi sẽ giả sử rằng bạn sẽ cần một biến khác ngoài nút $.
Brian

1
Câu hỏi là về việc truy cập vào một trường của một thực thể, chứ không phải làm thế nào để in thực thể.
kiamlaluno
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.