আমি কীভাবে একটি লিঙ্ক তৈরি করব?


26

বলুন আমি blockBaseকাস্টম ব্লক তৈরি করতে শ্রেণিটি প্রসারিত করছি এবং আমি blockBuildআমার ব্লকের জন্য কিছু মার্কআপ তৈরি করার পদ্ধতিটি প্রয়োগ করছি । এটার মতো কিছু:

 class YourModuleBlock extends BlockBase {

   /**
     * Implements \Drupal\block\BlockBase::blockBuild().
     */
     public function build() {
      return array(
        '#markup' => 'This is a block!',
      );
     }
   }

আমি যদি এই মার্কআপটিতে একটি লিঙ্ক সরবরাহ করতে চাইতাম, ডি 7-তে আমি lফাংশনটি ব্যবহার করতাম তবে এটি আর উপলভ্য নয় ( এখানে দেখুন )। সুতরাং, লিঙ্কগুলি তৈরি করার জন্য আমার নতুন ডি 8 পদ্ধতি উপলব্ধ করা দরকার। আমি কেবল একটি <a>ট্যাগ ব্যবহার করতে পারি , তবে এটি ডি 7-এ কখনও সেরা অভ্যাস ছিল না।

সুতরাং, লিঙ্কগুলি তৈরি করার জন্য ব্যবহার করার সঠিক পদ্ধতিটি কী এবং আমি কীভাবে এটি আমার ফাংশনে উপলব্ধ করব?


দয়া করে নীচের লিঙ্কটি পরীক্ষা করুন যা ড্রুপাল
স্বপ্নিল বিজবে

উত্তর:


56

Rup দ্রুপাল :: l অবচিত হয়। সম্ভবত এই কেস কারও জন্য কার্যকর হবে

  use Drupal\Core\Url;
  use Drupal\Core\Link;
  $url = Url::fromRoute('entity.node.edit_form', array('node' => NID));
  $project_link = Link::fromTextAndUrl(t('Open Project'), $url);
  $project_link = $project_link->toRenderable();
  // If you need some attributes.
  $project_link['#attributes'] = array('class' => array('button', 'button-action', 'button--primary', 'button--small'));
  print render($project_link);

2
এই toRenderable()কৌশলটি খুব দরকারী, ধন্যবাদ!
নিক

তবুও ড্রুপাল 8.4 কোরের উপর কাজ করে
পোদারোক

ব্রহ, আপনি এটার সাথেই আমার জীবন বাঁচালেন, আমি দ্রুপলের কাছে নতুন এবং এটির জন্য নোডগুলির দিকে ইঙ্গিত করার জন্য কীভাবে গ্রুপ মডিউল নাম কলাম পরিবর্তন করতে পারি তা বুঝতে সক্ষম হয়েছি!
মাইক কিউ

24

এক, এটি 100% সম্পূর্ণ নয়, এই সমস্যাটি দেখুন । এই বলে, আমাকে পরিবর্তন নোটিশ থেকে কিছু কোড উদ্ধৃত করুন :

ড্রুপাল 7:

// Internal path.
$internal_link = l(t('Book admin'), 'admin/structure/book');

// External Uri.
$external_link = l(t('External link'), 'http://www.example.com/', array('external' => TRUE));

ড্রুপাল 8:

// Internal path (defined by a route in Drupal 8).
use Drupal\Core\Url;
$url = Url::fromRoute('book.admin');
$internal_link = \Drupal::l(t('Book admin'), $url);

// External Uri.
use Drupal\Core\Url;
$url = Url::fromUri('http://www.example.com/');
$external_link = \Drupal::l(t('External link'), $url);

সম্পাদনা করুন: রুটের নামগুলি moduledirectory/modulename.routing.ymlফাইলগুলিতে এবং (ডিফল্টরূপে) {router}সারণীতে রয়েছে।


2
আমি {রাউটার} টেবিলের মধ্যে $ রাউটার_নামটি পেয়েছি।
24ma13wg

1
আমি কীভাবে সামনের পৃষ্ঠার লিঙ্ক তৈরি করতে পারি। ড্রুপাল 7 এ, এটি l ('হোম', '<ফ্রন্ট>') হতে পারে। তবে ড্রুপাল ৮-এ কী?
গুরু

fromRoute('<front>')

7
Rup দ্রুপাল :: l অবচিত হয় is এর পরিবর্তে \ দ্রুপাল ore মূল \ লিংক :: থেকে পাঠ্যঅ্যান্ডআরআরএল ($ পাঠ্য, $ ইউআরএল) ব্যবহার করুন
ইয়াল

দ্রুপাল :: l অবনমন
function

21

আর একটি বিকল্প রেন্ডার অ্যারেতে একটি লিঙ্ক তৈরি করা হয়

$url = Url::fromRoute('entity.node.edit_form', array('node' => NID));
$link = [
  '#type' => 'link',
  '#url' => $url,
  '#title' => t('This link was rendered')
];

ইউরোপ এবং সত্তাগুলির লিঙ্ক তৈরি করতে ড্রুপাল আমাদের কিছু সহায়ক পদ্ধতি সরবরাহ করে।

$url = Node::load(NID)->toUrl('edit-form');

এবং

$link = Node::load(NID)->toLink(t('link text'), 'edit-form');
$link_render_array = $link->toRenderable();

আমার এই উত্তরটি সবচেয়ে ভাল লেগেছে। অতিরিক্ত #attributesহিসাবে যুক্ত করা যেতে পারে কারণ এটি একটি রেন্ডার এলিমেন্ট
mradcliffe


আমি এটি সম্পাদনা করতে পারিনি কারণ আমি অনেক দীর্ঘ অপেক্ষা করেছি ited
mradcliffe

19

এখানে ড্রুপাল ৮-তে লিঙ্ক তৈরির কয়েকটি উদাহরণ রয়েছে Note এই-> টি ('কিছু পাঠ্য') ব্লকবেসে প্রসারিত ব্লকের মধ্যে উপলব্ধ is আপনি যদি এটি অনুলিপি করে অন্য কোনও ক্লাসে অনুলিপি করেন বা এটি একটি। মডিউল ফাইলে ব্যবহার করেন তবে আপনাকে এটি টি () 1 এ পরিবর্তন করতে হবে ।

কোনও নোডের প্রাথমিক লিঙ্ক:

$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();

এটি এর মতো একটি রেন্ডার অ্যারে তৈরি করে:

$link = [
  '#type' => 'link',
  '#url' => $url_object,
  '#title' => 'Title of Node',
];

আপনি নোডটি এভাবে লোড না করে রেন্ডার অ্যারে তৈরি করতে পারেন:

$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
  '#type' => 'link',
  '#url' => $url_object,
  '#title' => $this->t('Read More'),
];

অথবা মূল লিঙ্ক শ্রেণি ব্যবহার করে:

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();

আপনি যদি নিজের লিঙ্কের পাঠ্যে মার্কআপ ব্যবহার করতে চান তবে আপনি কেবল একটি স্ট্রিং রাখতে পারবেন না You আপনাকে রেন্ডার অ্যারে উপাদানটি ব্যবহার করতে হবে:

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link_text =  [
  '#type' => 'html_tag',
  '#tag' => 'span',
  '#value' => $this->t('Load More'),
];
$link = Link::fromTextAndUrl($link_text, $url);

একটি নিখুঁত লিঙ্ক তৈরি করতে, আপনি এই বিকল্পটি URL এ যুক্ত করুন, লিঙ্কটি নয়:

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();

আপনার লিঙ্কে একটি শ্রেণি যুক্ত করতে, আপনাকে এটি URL এ যুক্ত করতে হবে, লিঙ্কটি নয়:

$options = [
  'attributes' => [
    'class' => [
      'read-more-link',
    ],
  ],
];
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();

আপনার লিঙ্কটিতে একটি ক্যোয়ারী স্ট্রিং যুক্ত করতে, আপনার এই লিঙ্কটি নয়, ইউআরএল এও দরকার:

$options = [
  'query' => [
    'car' => 'BMW',
    'model' => 'mini-cooper',
  ],
  'attributes' => [
    'class' => [
      'read-more-link',
    ],
  ],
];
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();

টার্গেট = _ব্ল্যাঙ্ক সহ একটি নতুন উইন্ডোতে লিঙ্কটি খুলতে সেট করতে:

$options = [
  'attributes' => [
    'target' => '_blank'
  ],
];
$url = Url::fromRoute('entity.media.edit_form', ['media' => $entity->id()], $options);
$link = Link::fromTextAndUrl(t('Edit'), $url);
$form['entity']['edit_link'] = $link->toRenderable();

এখানে একটি কর শুল্ক পৃষ্ঠাটির লিঙ্ক:

$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();

সম্পাদনা পৃষ্ঠা নোডের এখানে একটি লিঙ্ক:

$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();

একটি বাহ্যিক লিঙ্ক তৈরি করতে:

$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();

হোমপেজে লিঙ্ক:

$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();

মনে রাখবেন যে এই url এর যে কোনও একটিতে, আপনি কল করে url স্ট্রিং হিসাবে পেতে পারেন:

$url->toString();

উদাহরণ স্বরূপ:

$url_string = Url::fromRoute('<front>')->toString();

linkপদ্ধতি অসমর্থিত হয়েছে।
এয়াল

নোড অবজেক্ট থেকে লিংক () ব্যবহার করার জন্য আমি আমার উত্তরটি সংশোধন করেছি, যেমন $ নোড-> টু লিঙ্ক () -> টু রেন্ডারেবল ();
oknate

এটি একটি ভাল রান ডাউন।
ব্র্যাডি

15

পূর্ববর্তী উদাহরণগুলিতে বৈশিষ্ট্যগুলি নির্ধারণের ক্ষমতাটি হারাতে বা সংশ্লেষিত বলে মনে হয় কারণ কার্যকারিতা কেবল সুস্পষ্ট নয়। লিঙ্কগুলি তৈরির দুটি উপায় রয়েছে যার উপর নির্ভর করে এটির কোনও রুট রয়েছে কি না এবং প্রত্যেকটি কিছুটা ভিন্নতর আচরণ করে তাই এখানে উদাহরণ রয়েছে।

  1. একটি রুট সহ। এটি সর্বাধিক উপলব্ধি করে, আপনি কেবল এটি বিকল্পগুলিতে সরবরাহ করতে পারেন।

    Link::createFromRoute('My link', 
      'entity.node.canonical',
      ['node' => 123],
      ['attributes' => ['class' => 'special']]));
  2. একটি বাহ্যিক url সহ। এই এক একটু অদ্ভুত। কোনও বিকল্প যুক্তি নেই তাই এটি অসম্ভব বলে মনে হতে পারে তবে এটি আসলে ঠিক OK কারণটি হল অনভিজ্ঞ লিঙ্কগুলিতে কখনই কেবল বর্ণিত URL এর বিকল্প থাকে না। এর অর্থ আপনি যখন ক্লাসে URL তৈরি করবেন তখন এটি তৈরি করবেন এবং এটি কার্যকর হবে।

    Link::fromTextAndUrl('My link', 
      Url::FromUrl('https://example.com/about',
        ['attributes' => ['class' => 'special']]));

    এই সমস্তগুলির একটি ছদ্মবেশ হ'ল আপনি এটিও করতে পারেন।

    $link = Link::fromTextAndUrl('Example',  Url::fromUri('https://example.com/about'));
    $link->getUrl()->setOption('attributes', ['class' => 'superspecial']);

2

লিঙ্ক পাঠ্যে বৈশিষ্ট্য এবং এইচটিএমএল মার্কআপ সহ একটি সম্পূর্ণ উদাহরণ:

  $url = Url::fromRoute(
   'your.route.name', 
   [], 
   ['attributes' => ['id' => 'add-link', 'class' => ['btn', 'btn-sm', 'btn-primary']]]
  );
  $link = Link::fromTextAndUrl(
    Markup::create('<span class=\'glyphicon glyphicon-plus\'></span> ' . t('Add new item')), 
    $url
  );

0

আমাকে # সুফিক্স হিসাবে টেবিলের লিঙ্ক যুক্ত করার দরকার ছিল, তবে এটি অর্জনের জন্য এটি এইচটিএমএল হিসাবে রাখা দরকার ছিল

\Drupal\Core\Link::fromTextAndUrl("Add New page", Url::fromRoute('mymodule.add_new_page'))->toString();

যেখানে mymodule.add_new_page আমার মডিউল yML ফাইল থেকে রুট।


0

উত্তর এখানে আমাকে কিছু ভাল পয়েন্টার দিয়েছে। আমি যা চাইছিলাম তা হ'ল আমার লগগুলিতে নোডের লিঙ্ক সরবরাহ করা ... সুতরাং আমি এখানে যা শেষ করেছি তা এখানে

  use Drupal\Core\Url;
  use Drupal\Core\Link;
  /* ...
  .. */  
  $url = Url::fromRoute('entity.node.canonical', array('node' => $object->id()));
$strings = array(
  '!node' => Link::fromTextAndUrl($object->getTitle(), $url)->toString(),
  '%nid' => $nid,
);
\Drupal::logger('mymodule_actions')->notice('Updating !node (%nid)', $strings);

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