it-swarm-vi.com

Làm thế nào để tải một nút dựa trên tiêu đề của nó?

Tôi chỉ biết tiêu đề của một nút và tôi muốn tải nút đó bằng cách sử dụng node_load().

Làm thế nào để làm điều đó?

31
sokratis

Trong Drupal 6, bạn có thể sử dụng mã sau đây.

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

Nếu bạn biết loại của nút là tốt, thì bạn có thể sử dụng mã sau đây.

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

node_load () luôn trả về một nút. Đó là bởi vì hàm không lặp qua tài nguyên kết quả truy vấn cơ sở dữ liệu được trả về từ db_query () .

  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));
  }
17
Blake Senftner

Trong Drupal 7, các tham số cho node_load() đã được thay đổi. Để có được các nút phù hợp với một số điều kiện, bạn nên sử dụng lớp EntityFieldQuery .

$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'])));
  }
47
Tamer Zoubi

Drupal 7

Đây là một cách đơn giản hơn (như đã được đề xuất bởi Clive và tại NÊN ):

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

và dễ nhớ hơn nhiều so với việc sử dụng lớp EntityFieldQuery .

Xem thêm: Lập trình nhận các nút theo tiêu đề trong Drupal 7 tại SO

12
kenorb

Trong Drupal 7, bạn có thể sử dụng mã tương tự như sau.

$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();
11
abd

Trong Drupal 8, hãy chạy cái này:

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

$node sẽ là một đối tượng nút được khởi tạo hoàn toàn.

6
user1359

Cũng trong Drupal 8

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

và tiếp theo:

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

Đừng quên bạn cần

use Drupal\node\Entity\Node;
1
Yaina Villafañes