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 đó?
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 đó?
Câu trả lời:
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));
}
node_load()
. Đã chỉnh sửa thẻ câu hỏi để phản ánh điều này.
$conditions
tham số không dùng nữa ):$nodes = node_load_multiple(array(), array('title' => 'node title'));
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'])));
}
Đây là một cách đơn giản hơn (như đã được Clive đề xuất và tại SO ):
$nodes = node_load_multiple(NULL, array("title" => "Foo Bar"));
$node = current($nodes);
và dễ nhớ hơn nhiều so với 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
@todo Remove $conditions in Drupal 8.
Trong Drupal 8, chạy 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 khởi tạo đầy đủ.
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;
arg(1)
đó sẽ là nút / X cho tất cả các trang. và chỉnode_load()
hoạt động trên NID