it-swarm.asia

كيفية تحميل عقدة بناءً على عنوانها؟

أنا أعرف عنوان العقدة فقط ، وأريد تحميل العقدة باستخدام node_load().

كيف يمكنني فعل ذلك؟

31
sokratis

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

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

دروبال 7

فيما يلي طريقة أبسط (كما اقترح بالفعل (Clive وفي لذا ):

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

وأسهل بكثير للتذكر من استخدام EntityFieldQuery class.

انظر أيضًا: الحصول على العقد برمجياً حسب العنوان في Drupal 7 at SO

12
kenorb

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

في Drupal 8 ، قم بتشغيل هذا:

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

$node سيكون كائن عقدة مستنسخ بالكامل.

6
user1359

أيضًا في 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;
1
Yaina Villafañes