এর শিরোনামের উপর ভিত্তি করে কোনও নোড কীভাবে লোড করবেন?


32

আমি কেবল একটি নোডের শিরোনাম জানি এবং আমি নোড ব্যবহার করে লোড করতে চাই node_load()

আমি কেমন করে ঐটি করি?


যদি এটির কোনও সাধারণ পৃষ্ঠা হয় তবে এতে আপনাকে এনআইডি পাওয়া উচিত arg(1)সমস্ত পৃষ্ঠার জন্য নোড / এক্স হবে। এবং node_load()কেবল এনআইডি
গুডস্পিপি 3

আমার ইউআরএলগুলি প্রকল্পগুলি / {ব্যবহারকারীর নাম} /
ode

Drupal 7 আপনি এটি শিরোনাম দ্বারা node_load () পেতে নোড ব্যবহার করতে পারবেন না, শুধু NID দ্বারা
আব্দ

আপনার শিরোনাম অনন্য?
আর্তুর

উত্তর:


17

ড্রুপাল 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
@ সোক্রাটিস মনে রাখবেন শিরোনামগুলি অনন্য হতে হবে না এবং যে কোনও সময় পরিবর্তন করা যেতে পারে। আপনি যদি নোড আইডি দ্বারা রেফারেন্সিং এ যেতে পারেন তবে এটি নিরাপদ হবে।
ডেভিড এল

4
দ্রুপাল ক্যামেলকেসের ভক্ত নয়।
শিভাজি

1
এই উদাহরণটিও ঠিক প্লেইন ডি 7 এ কাজ করবে না। node_load()। এটি প্রতিফলিত করতে প্রশ্ন ট্যাগ সম্পাদনা করেছেন।
চাঁপাবু

3
ডি 7 সংস্করণ (অবচিত $conditionsপ্যারামিটারটি ব্যবহার করেও ):$nodes = node_load_multiple(array(), array('title' => 'node title'));
ক্লাইভ

47

ড্রুপাল 7-তে, প্যারামিটারগুলি node_load()পরিবর্তন করা হয়েছে। কিছু শর্তগুলির সাথে মেলে এমন নোডগুলি পেতে, আপনাকে এন্টিফিল্ডকিউরি ক্লাসটি ব্যবহার করা উচিত ।

$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
একটি একক নোড লোড করার জন্য এটি এত দীর্ঘ; /
কেনরব

12

দ্রুপাল 7

এখানে একটি সহজ উপায় (যেমন ক্লাইভ এবং এসও তে ইতিমধ্যে প্রস্তাবিত ):

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

এবং এন্টিফিল্ডকিউরি ক্লাস ব্যবহার করার চেয়ে মনে রাখা আরও সহজ ।

আরও দেখুন: প্রোগ্রামিয়ালি SO এ দ্রুপাল 7-শিরোনাম অনুসারে নোড পাচ্ছেন


1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত!
অ্যালেক্স Skrypnyk

3
সুন্দর দৃষ্টিভঙ্গি, দুর্ভাগ্যজনকভাবে মৃত্যুর ইচ্ছায় , যেমনটি প্রকাশিত হয়েছে [ api.drupal.org/api/drupal/modules%21node%21node.module/function/… (ফাংশন নোড_লোড_মুক্তি) @todo Remove $conditions in Drupal 8.
অগাস্টো

10

ড্রুপাল 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

ড্রুপাল 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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.