Bộ cài đặt phiên bản cải tiến của trường_get_items?


9

Người ta có thể truy xuất các mục trường từ một thực thể với

// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');

Nhưng có một cách thuận tiện để làm ngược lại, Core, hoặc cách khác?

// Attach new term $term to $node in field 'field_tags'.
$term = taxonomy_term_load($tid);
$node = field_set_items('node', $node, 'field_tags', 'taxonomy_term', $term);
node_save($node);

Tôi muốn tránh những rắc rối khi tự gán một thuật ngữ $, hãy tìm hiểu rõ cấu trúc mảng trông như thế nào và sau đó xây dựng mảng bằng tay, vì đôi khi nó không tầm thường.

Vấn đề duy nhất trong hàng đợi cốt lõi mà tôi có thể thấy có vẻ tương tự mơ hồ là về ngôn ngữ trường api DX .

Câu trả lời:


6

Không, không có chức năng như vậy.

Xem bình luận của tôi tại Hỗ trợ ngôn ngữ cho các trường thực thể .


1
Cảm ơn Berdir. Tôi đã hy vọng bạn xuất hiện;) và tôi cũng sợ bạn nói như vậy. Vấn đề với mã trong nhận xét của bạn là đối với nhiều trường, 'giá trị' có thể không đủ hoặc chỉ đơn giản là sai.
Letharion

field_get_items () cũng không giúp bạn điều đó, nó sẽ trả về một mảng các mục có chứa giá trị. Hoặc bất cứ điều gì loại trường xác định. Không có cách nào để trừu tượng hóa điều đó.
Berdir

Ví dụ: field_get_items () trả về mảng (mảng ('tid' => 123)). Mã của bạn cần biết rằng field_tags là một tham chiếu thuật ngữ phân loại và nó có tập hợp khóa nó là một định nghĩa cho thuật ngữ phân loại.
Berdir

Các bình luận không còn hiển thị ở trang đó theo liên kết đã cho.
Junaid

Bình luận trên trang thảo luận ngay bây giờ: drupal.org/node/1500308/discuss
Berdir

2

Để một chức năng như vậy tồn tại, field_set_items()cần phải có khả năng xác định stdClassđối tượng là một thuật ngữ phân loại và cũng ánh xạ nó tới một chức năng có thể giải mã đối tượng và tạo ra một mảng trường từ đó.

Vì không có chức năng cốt lõi để làm điều đó, tôi không nghĩ rằng việc này sẽ dễ dàng.


Thật khó chịu khi không có thuộc tính $ entity-> entity_type (nhưng) , nhưng bất kể, điều đó có thể dễ dàng được thêm vào cuộc gọi lại ví dụ của tôi. Tôi đã cập nhật câu hỏi để phản ánh điều này.
Letharion

1
Việc thiếu một entity_typevấn đề thực sự không phải là IMHO ... vấn đề chính xác là những gì bạn đã thêm vào câu hỏi của mình: "đôi khi nó không tầm thường". Bởi vì dữ liệu là không tầm thường, field_set_itemsđể hoạt động như bạn mong muốn, mỗi loại trường trong hệ thống sẽ cần triển khai một số loại giao diện mô tả cách thiết kế đảo ngược mảng dữ liệu từ một biến đối tượng / tùy ý.
Clive

2

Mặc dù điều này không giúp xây dựng cấu trúc mảng phức tạp đôi khi, tôi thấy rằng những gì tôi đang tìm kiếm ở một mức độ nào đó đã được giới thiệu trong Drupal 8. Có lẽ nó sẽ được mở rộng hơn nữa trong tương lai. :)

API đơn giản mới có sẵn để truy cập các trường, thuộc tính và thông tin ngôn ngữ .

Ví dụ sử dụng từ trang được liên kết:

<?php
// Change a field value.
$body = $comment->get('comment_body');
$body[0]['value'] = 'This is actually a perverted tango';
$comment->set('comment_body', $body);
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.