এনআইডি (বা নোড অবজেক্ট) থেকে পাথের উপন্যাস পান


22

আমার একটি নোড অবজেক্ট রয়েছে এবং আমি ড্রুপাল 8-তে একটি প্রদত্ত পথ পেতে এটি ব্যবহার করার চেষ্টা করছি।

ছিল drupal_lookup_path()Drupal এর 7 কিন্তু আমি Drupal এর 8 কোন সমতুল্য বা ডকুমেন্টেশন না দেখছি।

নোড অবজেক্ট থেকে পাথ পাওয়ার নতুন "দ্রুপাল" কী?

এটি কিছু সহজ কিছু হবে $node->get('path')?

এটি একটি সাধারণ প্রশ্নের মতো মনে হচ্ছে তবে আমি এটিতে কোনও ডকুমেন্টেশন খুঁজে পাচ্ছি না।

লক্ষ্য করুন আমি বর্তমান পথের জন্য পথের নামটি চাই না; নোড অবজেক্ট বা নোড আইডি দিয়ে আমি একটি স্বেচ্ছাসেবী নোডের জন্য পাথের নামটি চাই।



আমি মনে করি এটি একটি সদৃশ হতে পারে, লিঙ্কযুক্ত প্রশ্নটি দেখুন অনেক উত্তর আছে।
কেভিন

অন্য প্রশ্নের উত্তর রয়েছে যেখানে কীভাবে চলতি পথের জন্য উপন্যাস পাবেন, কোনও নোডের জন্য নয়, যার জন্য ওপি নোড আইডি জানে।
কিমলালুনো

এটি কোনও সদৃশ নয় - আমি বর্তমানের পথটি চাই না। আমি একটি নির্বিচার নোড বস্তু বা এনআইডি দেওয়া পথটি চাই want
জ্যাক রায়ান

হ্যাঁ, এটি কোনও সদৃশ নয়, আমার উত্তর দেখুন।
4k4

উত্তর:



19

ইউআরএল ব্যবহার সম্পর্কে কী :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();

5
আইআইআরসি, এর মধ্যে এবং এলিয়াস ম্যানেজার ব্যবহারের মধ্যে প্রাথমিক পার্থক্যটি হ'ল এটি আউটবাউন্ড পাথ প্রসেসরগুলি চালানোর বিষয়টিও নিশ্চিত করবে, যখন আলিয়াসম্যানেজার কেবল ওরফে অনুসন্ধান করে। আপনি Urlসরাসরি হিসাবে বস্তু পেতে পারেন $node->toUrl()
এমপিডোনাদিও

1
আরও ভাল সমাধান।
প্যাট্রিক

16

আপনার যদি কেবল নীড, 4 কে 4 এর সমাধান থাকে

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

দুর্দান্ত কাজ করে। তবে আপনার যদি ইতিমধ্যে কোনও নোড অবজেক্ট থাকে তবে আপনি একটি বা দুটি ধাপ এড়িয়ে যেতে পারেন। নোডগুলি ইউআরএল পাওয়ার পদ্ধতিগুলি তৈরি করেছে।

$node->toUrl()->toString();

নোডের এলিয়াসযুক্ত ইউআরএল ফিরিয়ে দেবে।

toUrl () একটি url অবজেক্ট দেয়। এখানে দেখুন https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Ull.php/class/Url/8.2.x

এবং টুস্ট্রিং () হ'ল ইউআরএল অবজেক্টের একটি পদ্ধতি যা ইউআরএলটির স্ট্রিং প্রতিনিধিত্ব করে।


9
লক্ষ্য করুন $node->toUrl()->setAbsolute()->toString()পরম URL টি ভাগ করে ইত্যাদি জন্য দরকারী ফিরে আসবো,
টিম

2

আপনি path.alias_storageযদি তার নোডের জন্য কোনও পথ না খুঁজে পেয়ে থাকেন তবে তার নামের বিবরণগুলির একটি অ্যারের ফিরে পেতে বা বুলেট মিথ্যা দিয়ে লোড পদ্ধতিটিও ব্যবহার করতে পারেন।

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);


2

নোড অবজেক্ট থেকে নোড URL পাওয়ার সেরা উপায়-

  • পথটি : $ নোড> toUrl () -> setAbsolute () -> toString ();
  • আপেক্ষিক পাথ : $ নোড-> টুআরএল () -> টু স্ট্রিং ();

এটি নোডের ভাষাও পরিচালনা করবে।


0

আপনি যদি ভাষা দ্বারা নোড ওরফে url পেতে চান তবে ভাষাটি এভাবে ব্যবহার করতে ভুলবেন না।

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

আপনি যদি এটি কোনও ক্লাসে ব্যবহার করছেন তবে নির্ভরতা ইঞ্জেকশনটি সঠিকভাবে ব্যবহার করতে ভুলবেন না।


-5

আমি আরও "দ্রুপালেস্ক" সমাধানের প্রত্যাশা করছিলাম তবে আমি নিজেকে এই কাজটি করার জন্য তৈরি করেছি:

  function getPathFromNID($nid) {
    $db = \Drupal::database();

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.