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


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.