Başlığına göre bir düğüm nasıl yüklenir?


32

Yalnızca bir düğümün başlığını biliyorum ve düğümü kullanarak yüklemek istiyorum node_load().

Bunu nasıl yaparım?


Eğer normal bir Sayfa ise NID almalısınız arg(1), tüm sayfalar için düğüm / X olacaktır. ve node_load()sadece NID üzerinde çalışıyor
GoodSp33d


drupal 7'de node_load () 'ı başlığını kullanarak düğüm almak için kullanamazsınız, sadece nid
abd

Başlıklarınız benzersiz mi?
Artur

Yanıtlar:


17

Drupal 6'da aşağıdaki kodu kullanabilirsiniz.

$node = node_load(array('title' => 'node title'));

Düğümün türünü de biliyorsanız, aşağıdaki kodu kullanabilirsiniz.

$node = node_load(array('title' => 'node title', 'type' => 'page'));

node_load () her zaman tek bir düğüm döndürür. Bunun nedeni, fonksiyonun db_query () işlevinden döndürülen veritabanı sorgusu sonuç kaynağının üzerinden geçmemesidir .

  if ($revision) {
    array_unshift($arguments, $revision);
    $node = db_fetch_object(db_query('SELECT ' . $fields . ' FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.nid = n.nid AND r.vid = %d WHERE ' . $cond, $arguments));
  }
  else {
    $node = db_fetch_object(db_query('SELECT ' . $fields . ' FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE ' . $cond, $arguments));
  }

3
@sokratis Unvanların benzersiz olması gerekmediğini ve herhangi bir zamanda değiştirilebileceğini unutmayın. Eğer referans kimliğine göre referans olarak geçebilirseniz, bu daha güvenli olacaktır.
David L

4
Drupal, CamelCase hayranı değil.
Sivaji

1
Bu örnek aynı zamanda sadece düz D7'de çalışmaz. node_load(). Bunu yansıtmak için soru etiketini düzenlediniz.
Chapabu

3
D7 sürümü (kullanımdan kaldırılmış $conditionsparametresini kullanarak da olsa ):$nodes = node_load_multiple(array(), array('title' => 'node title'));
Clive

47

Drupal 7'de, parametreler node_load()değiştirildi. Bazı koşullara uyan düğümleri almak için EntityFieldQuery sınıfını kullanmanız gerekir .

$query = new EntityFieldQuery();


 $entities = $query->entityCondition('entity_type', 'node')
  ->propertyCondition('type', 'your_node_type')
  ->propertyCondition('title', 'your node title')
  ->propertyCondition('status', 1)
  ->range(0,1)
  ->execute();

  if (!empty($entities['node'])) {
    $node = node_load(array_shift(array_keys($entities['node'])));
  }

1
node_load (array ('title' => 'düğüm başlığı', 'type' => 'sayfa')) - bu yakında kullanılmayacak, bu nedenle bu cevap doğru.
Nikit

1
Tek bir düğümü yüklemek için bu çok uzun sürüyor; /
kenorb

12

Drupal 7

İşte basit bir yolu (zaten önerdiği olan Clive ve en SO ):

$nodes = node_load_multiple(NULL, array("title" => "Foo Bar"));
$node = current($nodes);

ve EntityFieldQuery sınıfını kullanmaktan daha hatırlanması kolay .

Ayrıca bakınız: Programlı Drupal 7'de başlığa göre düğümleri alma SO at


1
bu kabul edilen cevap olmalı!
Alex Skrypnyk,

3
[maruz kadar güzel bir yaklaşım, unfortunalty, ölüme amaçlanan api.drupal.org/api/drupal/modules%21node%21node.module/function/... (fonksiyon node_load_multiple) @todo Remove $conditions in Drupal 8.
augusto

10

Drupal 7'de, aşağıdakine benzer bir kod kullanabilirsiniz.

$result = db_query("SELECT n.nid FROM {node} n WHERE n.title = :title AND n.type = :type", array(":title"=> $title, ":type"=> $type));  
$nid = $result->fetchField();

Bir şey değil: D
abd,

6

Drupal 8'de şunu çalıştırın:

$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties(['title' => $title]);
foreach ( $nodes as $node ) {
  $node->doSomething(...);
}

$node tam olarak başlatılmış bir düğüm nesnesi olacaktır.


1

Ayrıca Drupal 8'de

$nids = \Drupal::entityQuery('node')
->condition('title', 'YourNodeTitle')
->sort('nid', 'DESC')
->execute();

ve sonra:

$node = \Drupal\node\Entity\Node::load(HEREYOUNODEID);

İhtiyacın olduğunu unutma

use Drupal\node\Entity\Node;
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.