ノードのタイトルしかわからないので、node_load()
を使用してノードをロードします。
それ、どうやったら出来るの?
Drupal 6では、次のコードを使用できます。
$node = node_load(array('title' => 'node title'));
ノードのタイプもわかっている場合は、次のコードを使用できます。
$node = node_load(array('title' => 'node title', 'type' => 'page'));
node_load() は常に単一のノードを返します。これは、関数が 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));
}
Drupal 7では、node_load()
のパラメーターが変更されています。いくつかの条件に一致するノードを取得するには、 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'])));
}
これはより簡単な方法です(すでに Clive および [〜#〜] so [〜#〜] で提案されています):
$nodes = node_load_multiple(NULL, array("title" => "Foo Bar"));
$node = current($nodes);
EntityFieldQuery クラスを使用するよりも覚えやすいです。
参照: SOでDrupal 7 のタイトルによってノードをプログラムで取得
Drupal 7では、次のようなコードを使用できます。
$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();
Drupal 8では、これを実行します:
$nodes = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties(['title' => $title]);
foreach ( $nodes as $node ) {
$node->doSomething(...);
}
$node
は完全にインスタンス化されたノードオブジェクトになります。
またDrupal 8
$nids = \Drupal::entityQuery('node')
->condition('title', 'YourNodeTitle')
->sort('nid', 'DESC')
->execute();
そして次:
$node = \Drupal\node\Entity\Node::load(HEREYOUNODEID);
必要なことを忘れないでください
use Drupal\node\Entity\Node;