Как загрузить узел на основе его названия?

Я знаю только название узла, и я хочу загрузить узел с помощью node_load () .

Как это сделать?

30 голосов | спросил sokratis 27 J0000006Europe/Moscow 2011, 17:04:07

5 ответов


17

В Drupal 6 вы можете использовать следующий код.

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

Если вы также знаете тип узла, вы можете использовать следующий код.

  $ node = node_load (array ('title' => 'title 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));
  }
 
ответил Blake Senftner 27 J0000006Europe/Moscow 2011, 18:25:39
44

В Drupal 7 параметры для node_load () были изменены. Чтобы получить узлы, которые соответствуют некоторым условиям, вы должны использовать EntityFieldQuery класс.

  $ query = new EntityFieldQuery ();


 $ entities = $ query-> entityCondition ('entity_type', 'node')
  -> свойствоCondition ('type', 'your_node_type')
  -> свойствоCondition ('title', 'название вашего узла')
  -> свойствоCondition ('status', 1)
  - & GT; диапазон (0,1)
  - & GT; выполнение ();

  if (! empty ($ objects ['node'])) {
    $ node = node_load (array_shift (array_keys ($ entities ['node'])));
  }
 
ответил Tamer Zoubi 18 J0000006Europe/Moscow 2012, 20:32:14
10

Drupal 7

Вот более простой способ (как уже было предложено Clive и SO ):

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

и гораздо проще запомнить, чем использовать EntityFieldQuery .

Смотрите также: Программно получая узлы по названию в Drupal 7 в SO

ответил kenorb 29 J000000Wednesday15 2015, 19:20:23
9

В 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 ();
 
ответил abd 13 Maypm12 2012, 20:32:42
2

В Drupal 8 запустите это:

  $ nodes = \ Drupal :: entityTypeManager ()
  - & GT; getStorage ( 'узел')
  -> loadByProperties (['title' => $ title]);
foreach ($ nodes as $ node) {
  $ Node- & GT; йоЗотеЬЫпд (...);
}
 

$ node будет полностью созданным объектом узла.

ответил user1359 6 MaramTue, 06 Mar 2018 07:11:25 +03002018-03-06T07:11:25+03:0007 2018, 07:11:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132