Bir içerik türündeki tüm düğümler üzerinde yineleme nasıl yapılır


22

Belirli bir içerik türünün tüm düğümlerinin bir alanından bazı bilgileri kurtarmak istiyorum. Bunu kullanarak nasıl yapılacağını biliyorum db_queryve tüm düğüm kimliğini alıp sonra tekrarlayın. Bilmek istediğim, drupal fonksiyonları kullanarak bunun etrafında başka bir yol olup olmadığıdır.

Yanıtlar:


28

Bu bilgileri doğrudan node_load_multiple()

$nodes = node_load_multiple(array(), array('type' => 'my_type'));

$conditionsDiziye istediğiniz kadar özellik koşulu ekleyebilirsiniz (ikinci argüman), böylece durum, oluşturulan vb. De adil bir oyundur.

$conditionsteknik olarak kullanımdan kaldırılmıştır (bunun lehine düşünürüm EntityFieldQuery) ancak bu işlevin Drupal 7'den kaldırılma şansı temelde hiçbiri değildir. Çok fazla kırılacaktı.


3
Yine de Drupal 8'de gitti.
mpdonadio

Tam olarak aradığım şey olduğu için bu cevabı kabul edeceğim, ancak @MPD çözümünü kullanacağım çünkü Drupal 8 ile de çalışacak :)
drcelus

@drcelus Evet MPD yöntemi kesinlikle gitmek için en iyi yoldur, muhtemelen şunu söylemeliydim - EntityFieldQuerytüm yol :) Ben bunu postity için her şeyden daha fazla olduğunu
Clive

1
entity_load_multipleD8'de bulunur. Gerçi özelliklere göre yükleyemezsiniz.

Açıklama için teşekkürler. Diyelim ki $ koşulları D8'den geçti.
mpdonadio

34

Drupal çekirdek adı verilen bir sınıf sağlar EntityFieldQuery(). Kullanmak için çok sayıda örneği olan kullanışlı bir belge sayfası da var. En basit haliyle:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);
  $nodes = node_load_multiple($nids);

  foreach ($nodes as $node) {
    // do something awesome
  }
}

Bu, "page" türünde yayınlanmış tüm düğümleri yükler. Bunu periyodik olarak şu şekilde ayarlamanız gerekir:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);

 foreach ($nids as $nid) {
    $node = node_load($nid, NULL, TRUE);
    // do something awesome
  }
}

aynı anda çok fazla yüklemekten kaçınmak, bu da bellek sorunlarına neden olabilir.

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.