Bir alan koleksiyonunu bir düğümden nasıl yüklerim?


72

Üzerinde birkaç saha koleksiyonu olan bir düğüm var.

Çıktıya baktığımda node_load()şunu görüyorum:

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

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

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

                )

        )

Entity_id değeri 6, 7, 8, vb. Olan koleksiyonda bulunan alan verilerini gerçekten yüklemek için hangi API işlevini kullanabilirim?

Yanıtlar:


88

Doh! Saha toplama modülüne bakmalıydım:

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

1
Benzer bir çözüm arıyorum. Çıktıyı nasıl yazıp oluşturduğunuzu diziye yerleştirirsiniz? Teşekkürler
kuğu

Bu öğelerin düzenini oluşturmak için bir sürü özel işlev yazdım. Ne yazık ki HTML döndürürler, keşfedilemez diziler değil. Yenilenebilir dizileri kullanmak iyi olurdu, ama konuyu tam olarak anlayamadım (Bunu yapmak için iyi bir neden olduğundan eminim, sadece rezonans yapan bir açıklama bulamadım).
Justin

Teşekkürler. Tarla koleksiyonu gerçekten formları ve çıktıyı kolaylaştırmak için kullanışlıdır, ancak özel sorgular söz konusu olduğunda, entity_metadata_wrapper kullanarak bile iç içe geçmiş dizilere dalmak zorunda kalıyorum.
kuğu

Oh, ahh, sadece yoğun dizileri ihtiyacım olana dönüştüren sarmalayıcılar yazdım.
Justin

entity_load (), "varlık" a özgü bir düğüm kümesi döndürür ve bunlarla birlikte kullanıcı tanımlı alanları da alırız. Kullanıcı alanlarını varlık alanlarından nasıl ayırt ederiz? Herhangi bir ipucu var mı?
Raj Pawan Gumdal

38

Aynı hile yapan bir sarmalayıcı işlevi de vardır:

field_collection_item_load($id, $reset = FALSE)

veya yorum başına, kullanın:

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

(Bir varsa örneğin birden çok koleksiyon yüklemek için daha ekleyin düğmeleri).


5
@ Vasiliy-grotov'un yukarıdaki cevabına göre field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE), birden fazla koleksiyonu yüklemek için de kullanabilirsiniz (örneğin, bir "daha fazla ekle" varsa, btn).
mediaashley

21

field_collection_field_get_entity () , doğru düzeltmeyi yüklemek için kullanılmalıdır.

Örnek kullanım:

$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
Alan koleksiyonunda belirtilen tarih alanlarına nasıl ulaşılır? Aşağıdaki şeyi kullandım. $ İtem = field_collection_field_get_entity ($ itemid); $ item-> field_course_starts_on ['und'] [0] ['safe_value']; .Ama bunun için hiçbir değer yazdırılmıyor.
harikris

Bunun için teşekkürler. Sabit oluyordum Uyarı: array_flip (): Sadece STRING ve INTEGER değerlerini çevirebilir! ... item_load () ile ve bu sorunu çözdü.
Naidim

11

Sen kullanabilirsiniz entity_metadata_wrappergelen Varlık API modülüne:

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

Tüm koleksiyonları da döngülendirebilirsiniz:

$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);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.