Trình bao bọc siêu dữ liệu thực thể, nhận bộ sưu tập trường trong bộ sưu tập trường


7

Tôi muốn nhận (và đặt sau) giá trị của bộ sưu tập trường trong bộ sưu tập trường (nội dung trường đa chiều).

Đây là mã của tôi:

// The node is a custom content.

// I get the list of first collections fields.
$temp = field_collection_get($node,'field_top');
// Shows the structure you can see below in the screenshot.
dpm($temp->value()[0]);

// Now, I want to get the value of field_website_informations.
// I've tried several ways but I couldn't find the right way.
// The following line returns an error.
$testage = entity_metadata_wrapper($temp->value()[0], 'field_website_informations');

Có thể thực hiện với API thực thể không?

Ảnh chụp màn hình:

Ảnh chụp màn hình


Làm cho mình một ưu tiên @ user2137454 bằng cách tìm hiểu cách thiết lập và sử dụng trình gỡ lỗi php như xdebug. Bạn sẽ không bao giờ nhìn lại dpm()một lần nữa, đặc biệt là ở Drupal với sự phụ thuộc nặng nề vào các mảng đa chiều để truyền dữ liệu.
Christopher

Câu trả lời:


16

Vâng, nó là có thể. Giả sử bạn có một loại nội dung với một bộ sưu tập trường có tên field_collection_parent, trong đó có một bộ sưu tập trường có tên field_collection_child, trong đó có một trường trong đó có tên field_child.

// First you need to wrap the node with entity_metadata_wrapper
$node_wrapper = entity_metadata_wrapper('node', $node);

// To get the value of field_child:
$value = $node_wrapper
           ->field_collection_parent
           ->field_collection_child
           ->field_child
           ->value();

// UPDATE: If a field accepts multiple values, treat it like an array
// The following line would get the first value of field_collection_child in the 
// first field_collection_parent.
$value = $node_wrapper
           ->field_collection_parent[0]
           ->field_collection_child[0]
           ->value();

// To set/modify the value of field_child
$node_wrapper
  ->field_collection_parent
  ->field_collection_child
  ->field_child
  ->set('Some new value');

// To save the node after modifying
$node_wrapper->save();

Cảm ơn vì đã giúp đỡ =) Khi tôi thử: $ value = $ temp-> field_top-> field_website_informations-> value (); Tôi nhận được lỗi này: Thuộc tính không xác định: EntityListWrapper :: $ field_website_informations Tôi không hiểu ... Nội dung tùy chỉnh của tôi chứa bộ sưu tập trường có tên "field_top". Trong bảng quản trị cho bộ sưu tập trường, tôi có thể thấy "trường hàng đầu", người chứa trường bộ sưu tập phụ "field_website_informations"
lopez

Ok, có vẻ như, trường field_toplà một trường đa giá trị. Tôi cập nhật câu trả lời của tôi cho phù hợp.
ЕЕннн

Nó ổn với bản cập nhật của bạn! ReeeaaalllyyyYYY cảm ơn anh chàng đến từ đất nước Pháp!
matthieu lopez

Rất vui vì nó hoạt động :)
Еннн.
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.