ฉันจะโหลดคอลเลกชันฟิลด์จากโหนดได้อย่างไร


72

ฉันมีโหนดที่มีการรวบรวมฟิลด์บางอย่าง

เมื่อฉันดูnode_load()ผลลัพธ์ฉันเห็น:

[field_rich_text_group] => Array
        (
            [und] => Array
                (
                    [0] => Array
                        (
                            [value] => 6
                        )

                    [1] => Array
                        (
                            [value] => 7
                        )

                    [2] => Array
                        (
                            [value] => 8
                        )

                )

        )

ฟังก์ชัน API ใดที่ฉันสามารถใช้เพื่อโหลดข้อมูลฟิลด์ที่มีอยู่ในคอลเลกชันที่มีเอนทิตีของ 6, 7, 8, ฯลฯ

คำตอบ:


88

Doh! ฉันควรดูในโมดูลการรวบรวมฟิลด์:

entity_load('field_collection_item', array($item_id))

1
ฉันกำลังมองหาวิธีการแก้ปัญหาที่คล้ายกัน คุณจะเขียนเอาต์พุตและวางลงในอาร์เรย์ที่เรนเดอร์ได้อย่างไร? ขอบคุณ
หงส์

ฉันได้เขียนฟังก์ชั่นที่กำหนดเองเพื่อสร้างเลย์เอาต์สำหรับรายการเหล่านี้ น่าเศร้าที่พวกเขาคืนค่า HTML ไม่ใช่อาร์เรย์ที่แสดงผลได้ มันจะดีถ้าใช้อาร์เรย์ที่แสดงผลได้ แต่ฉันไม่ชัดเจนในจุดนี้ (ฉันแน่ใจว่ามีเหตุผลที่ดีที่จะทำมันฉันแค่ไม่พบคำอธิบายที่สะท้อน)
Justin

ขอบคุณ การรวมเขตข้อมูลมีประโยชน์ในการทำให้ฟอร์มและผลลัพธ์ง่ายขึ้น แต่เมื่อพูดถึงการสืบค้นที่กำหนดเองฉันดูเหมือนจะต้องดำดิ่งลงในอาร์เรย์ที่ซ้อนกันแม้จะใช้ entity_metadata_wrapper
หงส์

โอ้ใช่ฉันเขียนชุดคลุมที่เปลี่ยนอาร์เรย์ที่หนาแน่นเป็นสิ่งที่ฉันต้องการ
Justin

entity_load () ส่งคืนชุดของโหนดที่เฉพาะเจาะจงกับ "เอนทิตี" และตามด้วยเราจะได้รับฟิลด์ที่ผู้ใช้กำหนดเช่นกัน เราจะแยกความแตกต่างของเขตข้อมูลผู้ใช้จากเขตข้อมูลของนิติบุคคลได้อย่างไร เบาะแสใด ๆ
Raj Pawan Gumdal

38

นอกจากนี้ยังมีฟังก์ชั่น wrapper ที่ทำเช่นเดียวกัน:

field_collection_item_load($id, $reset = FALSE)

หรือตามความคิดเห็นใช้:

field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)

เพื่อโหลดหลายคอลเล็กชัน (ตัวอย่างเช่นหากคุณมีปุ่มเพิ่มเพิ่มเติม )


5
ตามคำตอบของ @ vasiliy-grotov ด้านบนคุณสามารถใช้field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)เพื่อโหลดหลาย ๆ คอลเล็กชัน (ตัวอย่างเช่นถ้าคุณมี "เพิ่มมากขึ้น" btn)
mediaashley

21

ควรใช้field_collection_field_get_entity ()เพื่อโหลดการแก้ไขที่ถูกต้อง

ตัวอย่างการใช้งาน:

$node = node_load(1);
$items = field_get_items('node', $node, 'field_fc');
foreach ($items as $item) {
 $fc = field_collection_field_get_entity($item);
 // Do something.
}

1
วิธีรับฟิลด์วันที่ที่กำหนดในการรวบรวมฟิลด์ ฉันใช้สิ่งต่อไปนี้ $ item = field_collection_field_get_entity ($ itemid) พิมพ์ $ item-> field_course_starts_on ['und'] [0] ['safe_value']; . แต่ไม่มีการพิมพ์ค่า
Harikris

ขอบคุณสำหรับสิ่งนี้. ฉันได้รับค่าคงที่คำเตือน: array_flip (): สามารถพลิกค่า STRING และ INTEGER ได้เท่านั้น! ด้วย ... item_load () และสิ่งนี้สามารถแก้ไขปัญหาได้
Naidim

11

คุณสามารถใช้entity_metadata_wrapperจากโมดูลเอนทิตี API :

$node_wrapper = entity_metadata_wrapper('node', $node);
$field_collection = $node_wrapper->field_rich_text_group[0]->value();
dpm($field_collection);

คุณสามารถวนซ้ำคอลเลกชันทั้งหมดได้เช่นกัน:

$node_wrapper = entity_metadata_wrapper('node', $node);
foreach ($node_wrapper->field_rich_text_group as $field_collection_wrapper) {
  $field_collection = $field_collection_wrapper->value();
  dpm($field_collection);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.