इसके शीर्षक के आधार पर नोड कैसे लोड करें?


32

मैं केवल एक नोड का शीर्षक जानता हूं, और मैं नोड का उपयोग करके लोड करना चाहता हूं node_load()

मैं उसको कैसे करू?


यदि इसका एक सामान्य पृष्ठ है, तो आपको arg(1)इसमें एनआईडी प्राप्त करना चाहिए जो सभी पृष्ठों के लिए नोड / एक्स होगा। और node_load()केवल NID
GoodSp33d

मेरा url प्रोजेक्ट्स / {यूजरनेम} / {नोड टाइटल} है, इसीलिए मैं arg (2)
helxsz

ड्रुपल 7 में आप नोड - लोड नहीं कर सकते () शीर्षक से नोड प्राप्त करने के लिए, बस nid द्वारा
पेट

क्या आपके शीर्षक अद्वितीय हैं?
आर्टूर

जवाबों:


17

Drupal 6 में, आप निम्न कोड का उपयोग कर सकते हैं।

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

यदि आप नोड के प्रकार को भी जानते हैं, तो आप निम्न कोड का उपयोग कर सकते हैं।

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

नोड_लोड () हमेशा एकल नोड लौटाता है। ऐसा इसलिए है क्योंकि फ़ंक्शन डेटाबेस क्वेरी परिणाम संसाधन पर 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));
  }

3
@sokratis ध्यान रखें कि शीर्षक अद्वितीय होने की जरूरत नहीं है और किसी भी समय बदला जा सकता है। यदि आप नोड आईडी द्वारा संदर्भ के लिए स्विच कर सकते हैं, तो यह सुरक्षित होगा।
डेविड एल

4
Drupal CamelCase का प्रशंसक नहीं है।
शिवाजी

1
यह उदाहरण D7 में भी काम नहीं करेगा। node_load()। इसे दर्शाने के लिए प्रश्न टैग संपादित किया है।
चापाबु

3
D7 संस्करण (बहिष्कृत का उपयोग कर यद्यपि $conditionsपैरामीटर):$nodes = node_load_multiple(array(), array('title' => 'node title'));
क्लाइव

47

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'])));
  }

1
नोड_लोड (सरणी ('शीर्षक' => 'नोड शीर्षक', 'प्रकार' => पृष्ठ ')) - यह जल्द ही अप्रचलित होगा, इसलिए यह उत्तर सही है।
निकित

1
एक नोड को लोड करने के लिए यह इतना लंबा है; /
kenorb

12

द्रुपाल al

यहाँ एक सरल तरीका है (जैसा कि पहले से ही क्लाइव और एसओ द्वारा सुझाया गया है ):

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

और EntityFieldQuery वर्ग का उपयोग करने की तुलना में याद रखना बहुत आसान है ।

यह भी देखें: एसओ में ड्रुपल 7 में शीर्षक द्वारा प्रोग्रामेटिक रूप से नोड्स प्राप्त करना


1
यह स्वीकृत उत्तर होना चाहिए!
एलेक्स स्क्रीपनीक

3
अच्छा दृष्टिकोण, unfortunalty मरने के लिए, के रूप में [में उजागर intented api.drupal.org/api/drupal/modules%21node%21node.module/function/... (समारोह node_load_multiple) @todo Remove $conditions in Drupal 8.
ऑगस्टो

10

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();

आपका स्वागत है: डी।
अब्द

6

Drupal 8 में, इसे चलाएं:

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

$node पूरी तरह से तात्कालिक नोड ऑब्जेक्ट होगा।


1

द्रुपाल 8 में भी

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

और अगला:

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

आप की जरूरत है मत भूलना

use Drupal\node\Entity\Node;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.