Bir varlık grubunu tür ve kimliğe nasıl alabilirim?


11

Ben tanımlamak gerekir bundleonun bir varlığın typeve id.

Örneğin, eğer type'düğüm' ve id7 ise, 'sayfa' olarak alabilirim bundle.

Teşekkürler

Yanıtlar:


11

entity_loadVarlığı @Nikhil tarafından belirtildiği gibi yüklemek için kullanın .

Sonra paketi çıkarmak için entity_extract_ids komutunu kullanın . Misal:

$entity = entity_load('node', array('7'));

list(, , $bundle) = entity_extract_ids('node', $entity);

echo "Bundle name is : " . $bundle;

İşlev entity_extract_ids, öğeleri içeren sayısal olarak dizine alınmış bir diziyi (karma tablosu değil) döndürür:

  • 0: Varlığın birincil kimliği.
  • 1: Varlığın düzeltme kimliği veya $ entity_type sürümlenmemişse NULL.
  • 2: Varlığın grup adı veya $ entity_type öğesinde paket yoksa NULL.

burada, 0, 1ve 2dizi indeksleri vardır. Ancak, çekirdek ve katkı modülleri tarafından kullanılan yaklaşım list()işlevi kullanmaktır .


Dizi sayısal dizinine bağımlı olmak iyi değil düşünüyorum.
Junaid

3
@Junaid Bu endeks tahmin edilebilir, bu yüzden iyi. Drupal çekirdeği bu görevi böyle yapar. Eğer 'sihirli sayı' rahatsız ederse sadece dil özelliklerini kullanırsınız:list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Clive

@Junaid Değişmeyeceklerinden emin olduğunuzda sayısal dizine güvenebilirsiniz. Niçin sayısal dizini kullandığımın açıklaması için düzenlemeye bakın. Çünkü API işlevi bu şekilde tasarlanmıştır. Ayrıca, çözüm varlık modülüne bağlı değildir ;-)
AjitS

7

İşte en temiz ben modül kod Organik gruplarından var şu.

$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();

Örneğin şöyle diyebilirim:

$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();

Düzenleme: @Clive belirttiği gibi, yukarıdaki yöntem varlık modülüne bağlıdır.

İşte herhangi bir ekstra modüle bağlı olmayan başka bir yöntem. Burada açıklanmıştır https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW

Bu yöntemi yapıştırarak kopyalayın:

function _entity_get_bundle($entity, $entity_type) {
  $info = entity_get_info($entity_type);
  if (empty($info['entity keys']['bundle'])) {
    return $entity_type;
  } else {
    return $entity->{$info['entity keys']['bundle']};
  }
}

Nedir $group_type, $gid? ve değeri $bundle nedir?
Mart'ta

Maalesef, uygun parametre adlarını kullanmayı unuttum. Şimdi düzeltildi.
Junaid

Aynı entity_loadşekilde, en temiz nasıl da yapabilirsiniz?
Mart'ta

1
Şahsen ben yöntemden entity_metadata_wrapper()daha temiz olduğunu düşünmüyorum entity_extract_ids(). Ayrıca kurulmakta olan varlık modülüne güveniyorsunuz ...
Clive

Her zaman daha temiz değildir, ancak özellikle de meta veri sarmalayıcıları kullanıyorsanız, geçerli bir alternatiftir. Belki @develkar veya Junaid cevaplarını her iki alternatifi de içerecek şekilde düzenleyebilir mi? (Junaid, belki de Varlık modülüne ve entity_metadata_wrappers hakkındaki sayfaya bağlantı ekleyebilirsiniz?)
Alice Heaton

3

Varlık_yüklemeyi deneyin

Varlıkları veritabanından yükleyin.

Varlıklar statik bellek önbelleğinde saklanır ve aynı sayfa isteği sırasında tekrar yüklenirse veritabanı erişimi gerektirmez.

Parametreler

$ entity_type : Yüklenecek varlık türü, örneğin düğüm veya kullanıcı.

$ ids : Bir varlık kimlikleri dizisi veya tüm varlıkları yüklemek için FALSE.

$ koşullar : (kullanımdan kaldırıldı) Temel tabloda, anahtarların veritabanı alanları ve değerlerin bu alanların sahip olması gereken değerler olduğu ilişkilendirilebilir bir koşullar dizisi. Bunun yerine, bu işlev tarafından yüklenebilen varlık kimliklerinin bir listesini almak için EntityFieldQuery kullanılması tercih edilir.

$ reset : İstenen varlık türü için dahili önbelleğin sıfırlanıp sıfırlanmayacağı.

Geri dönüş değeri

Kimliklerine göre dizine eklenen varlık nesneleri dizisi. Hiçbir sonuç bulunmadığında boş bir dizi döndürülür.


3

Düğüm kimliğinden düğüm türünü almak için performans açısından çok hafif bir yol istiyorsanız - düğüm tablosunda tek bir seçme sorgusu kullanabilirsiniz.

$type = db_query("SELECT type FROM {node} WHERE nid = :nid", 
                  array(':nid' => $nid))->fetchField();

Bu şekilde, tüm varlık kanca sistemini entity_load vb. İle çağırmanız gerekmez.

Dizinlenmiş düğüm kimliğini kullanan tek bir seçme sorgusudur.


burada sadece düğümlerle oynamıyoruz.
Junaid

OP, "Örneğin, tür 'düğüm' ve kimlik 7 ise," sayfa "yı paket olarak alabilirim." dolayısıyla düğüm tabanlı örnek cevap.
David Thomas
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.