আমি কীভাবে পৃষ্ঠা শিরোনাম সেট করব?


29

আমি জানি যে আমি পৃষ্ঠার শিরোনামটি এটি দিয়ে পরিবর্তন করতে পারলাম drupal_set_title(t('Amy page title')), কিন্তু যখন আমি ড্রপাল 8 এ চেষ্টা করব তখন আমি পেয়ে যাচ্ছি যে কোনও ফাংশন ত্রুটি নেই।

ড্রুপাল 8 এ আমি কীভাবে পৃষ্ঠার শিরোনাম পরিবর্তন করতে পারি?

উত্তর:


30

আপনি এখানে দেখতে পারেন যে ফাংশনটি ড্রুপাল 8 এ অবমূল্যায়িত হয়েছে।

আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে এখন রুটে শিরোনামগুলি বিভিন্ন উপায়ে সেট করা যেতে পারে। আগে কেবল drupal_set_title()যে কোনও জায়গায় ডাকা হত। নিম্নলিখিত ব্যবহারের ক্ষেত্রে বিদ্যমান:

স্থির শিরোনাম

স্থির শিরোনামের জন্য আপনি রাউটিং সংজ্ঞাটিতে একটি '_ টাইটেল' সেট করেছেন:

block.admin_add:
  path: '/admin/structure/block/add/{plugin_id}/{theme}'
  defaults:
    _controller: '\Drupal\block\Controller\BlockAddController::blockAddConfigureForm'
    _title: 'Configure block'
  requirements:
    _permission: 'administer blocks'

গতিশীল শিরোনাম

আপনি যদি কোনও নিয়ামক লেখেন এবং আপনার একটি গতিশীল শিরোনাম প্রয়োজন হয়, উদাহরণস্বরূপ সাইট কনফিগারেশনের উপর নির্ভর করে, রুট ডিফল্টগুলিতে _title_callback ব্যবহার করুন।

mymodule.test:
  path: '/mymodule/test'
  defaults:
    _controller: '\Drupal\mymodule\Controller\Test::getContent'
    _title_callback: '\Drupal\mymodule\Controller\Test::getTitle'

<?php
class Test {

  /**
   * Returns a page title.
   */
  public function getTitle() {
    return  'Foo: ' . \Drupal::config()->get('system.site')->get('name');
  }

  /**
   * Returns a page render array.
   */
  public function getContent() {
    $build = array();
    $build['#markup'] = 'Hello Drupal';
    return $build;
  }
}
?>

চূড়ান্ত শিরোনাম ওভাররাইড

আপনি যদি কোনও নিয়ামক লিখেন এবং আপনাকে রুট থেকে শিরোনামটি ওভাররাইড করা দরকার হয়, আপনি রেন্ডার অ্যারেতে # শিরোনাম ফিরে আসতে পারেন। এটি সাধারণত এড়ানো উচিত, যেহেতু পৃষ্ঠার জন্য শিরোনাম যখন সম্পূর্ণরূপে রেন্ডার করা হয় অন্য প্রসঙ্গে যেমন (ব্রেডক্র্যাম্বের মতো) শিরোনাম থেকে আলাদা হতে পারে।

<?php
class Test {

  /**
   * Renders a page with a title.
   *
   * @return array
   *   A render array as expected by drupal_render()
   */
  public function getContentWithTitle() {
    $build = array();
    $build['#markup'] = 'Hello Drupal';
    $build['#title'] = 'Foo: ' . Drupal::config()->get('system.site')->get('name');

    return $build;
  }

}
?>

এর আউটপুট পতাকা drupal_set_title()

দ্রুপাল ৮-এ আউটপুট বৈধতা দ্রুপাল to এর বিপরীত We এটি নিরাপদ হিসাবে চিহ্নিত না করা থাকলে আউটপুট স্বয়ংক্রিয়ভাবে পালানো যায়। উভয় t()এবং new FormattableMarkupফেরত বস্তু যা স্বয়ংক্রিয়ভাবে পালানো হবে না।

$form['#title'] = $this->t('Add new shortcut');
$form['#title'] = $this->t("'%name' block", array('%name' => $info[$block->delta]['info']));

ড্রুপাল 8.5+

$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
  $route->setDefault('_title', 'New Title');
}

এবং আপনি hook_preprocess_HOOK()এটিকে ওভাররাইড করতে ব্যবহার করতে পারেন

/**
 * Implements hook_preprocess_HOOK().
 */
function MYMODULE_preprocess_page_title(&$variables) {
   // WRITE YOUR LOGIC HERE, 
  if ($YOUR_LOGICS === TRUE) {

    $variables['title'] = 'New Title';
  }
}

আপনাকে সিস্টেম.সাইট /> নাম যুক্ত করতে হবে কেন? এটি শিরোনামের অংশ হিসাবে যুক্ত হয়েছে যা এইচটিএমএল শিরোনামে চলে যায় যদি আপনি তা ছাড়াই শিরোনাম স্ট্রিং সরবরাহ করেন।
অনোপজোহন

5

আপনার এইচটিএমএল ডকুমেন্টের শিরোনামে শিরোনাম ট্যাগটি পরিবর্তন করুন।

function mymodule_preprocess_html(&$variables) {

  $variables['head_title']['title'] = $something;
}

পৃষ্ঠার সামগ্রীতে প্রদর্শিত শিরোনামটি পরিবর্তন করুন।

function mymodule_preprocess_block(&$variables) {

  if ('page_title_block' == $variables['plugin_id']) {
    $variables['content']['#title'] = $something;
  }
}

4

দ্রুপাল 8 এ ড্রপাল_সেট_টিউটল ()

$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
  $route->setDefault('_title', 'New Title');
}

দ্রুপাল 8-এ দ্রুপাল_জেট_শীতল ()

$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
  $title = \Drupal::service('title_resolver')->getTitle($request, $route);
}

GET শিরোনাম সম্ভবত সর্বত্র দুর্দান্ত কাজ করে। আমি শিরোনামটি কোথায় সেট করব তা ভাবছি, প্রিপ্রসেস পৃষ্ঠাতে কারণ এটি কাজ করবে বলে মনে হচ্ছে না।
লেম্যানমান্স

3

এই ফাংশনটি দ্রুপাল ৮ থেকে সরানো হয়েছে
Change রেকর্ড পরিবর্তন করুন: drupal_set_title () এবং drupal_get_title () সরানো হয়েছে

ভিতরে রুটগুলি নির্ধারণ করার সময় আপনি এখন শিরোনামটি সেট করতে পারেন modulename.routing.yml। এটি কীভাবে করা যায় তার উদাহরণ, উপরে পরিবর্তন রেকর্ডের লিঙ্কটি দেখানো হয়েছে।


3

আমি ডি 8 তে খুঁজে পেয়েছি যে আপনি যদি কোনও সত্তা দর্শনের জন্য শিরোনাম পরিবর্তন করতে চান তবে আপনি hook_ENTITY_TYPE_view_alter () ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি শিরোনাম হিসাবে ব্যবহারকারীর আইডির পরিবর্তে ব্যবহারকারী "ফিল্ড_ডিসপ্লে_নাম" নামক একটি ক্ষেত্র সহ কোনও ব্যবহারকারী সত্তার দৃষ্টিভঙ্গিটি কীভাবে পরিবর্তন করতে পারবেন তা এখানে:

/**
* Implements hook_ENTITY_TYPE_view_alter().
*/
function mymodule_user_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  $build['#title'] = $entity->get('field_display_name')->getString();
}

ভাল এবং পরিষ্কার পদ্ধতির। ডি 8 /
বিশাল কুমার সাহু

2

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

প্রথমে আপনার html.html.twig ট্যাগটি সরিয়ে ফেলুন, তারপরে, হুক হুক_পেজ_এটাচমেন্টস_ল্টার

function mytemplate_page_attachments_alter(array &$page) {
    $page['#attached']['html_head'][] = [
        [
          '#tag' => 'title',
          '#value' => "My title"
        ],
        'title'
    ];
}

আপনি এর সাথে ট্যাক্সনোমি টার্মের বর্তমান নোডটি পেতে পারেন

$node = \Drupal::routeMatch()->getParameter('node');
$term = \Drupal::routeMatch()->getParameter('taxonomy_term')

2

নোড শিরোনাম এবং এর মত সেট করার জন্য খুব ভাল কারুকৃত অবদানের মডিউলটি অটোমেটিক সত্তা লেবেলটি একবার দেখুন ।

(মনে রাখবেন যে 'পৃষ্ঠার শিরোনাম' 'সত্তা লেবেল' বলার আরও বেশি চালিত উপায়, যেখানে 'পৃষ্ঠা' একটি বিষয়বস্তু সত্তা এবং 'লেবেল' শিরোনাম এবং অন্যান্য সত্তাগুলির সমতুল্য যেমন মন্তব্য বিষয়সমূহ, শ্রোক্তি শর্তের নামগুলি অন্তর্ভুক্ত করে))

অপ্টটি কাস্টম কোড লেখার জন্য দিকনির্দেশনা চেয়েছে বলে মনে হচ্ছে, তবে কাস্টম কোডই সেরা প্রস্তাবনা তা উপলভ্য বিশদ থেকে পরিষ্কার নয়। অবদানযুক্ত কোড থেকে উপলব্ধ কোনও বৈশিষ্ট্যটির সদৃশ করার জন্য খুব নির্দিষ্ট কারণ ছাড়াই পাঠকদের জন্য, দ্রুপাল সম্প্রদায় বিদ্যমান মডিউলটি গ্রহণ করার জন্য দৃ and়ভাবে পরামর্শ দেয় (এবং সাইটের মালিকরা দৃ strongly়ভাবে উপকৃত হন)।


2

drupal_set_title()এবং drupal_get_title()উভয়ই ড্রুপাল 8 থেকে সরানো হয়েছে তবে সবচেয়ে ভাল অংশটি এটির জন্য একটি পৃথক ব্লক page_title। ব্যবহারকারীরা কোনও পৃষ্ঠা / অঞ্চলে এই ব্লকটি আড়াল বা যুক্ত করতে পারেন।

এর জন্য 2 টি সমাধান রয়েছে।

  1. title_blockনির্দিষ্ট পৃষ্ঠায় অক্ষম করুন এবং শিরোনামের জন্য কিছু মার্কআপ সহ নতুন কাস্টম ব্লক যুক্ত করুন। এখন title_blockড্রপাল ব্লক বিভাগের ঠিক পরে এই ব্লকটি রাখুন ।
  2. hook_preprocess_block()আপনার custom_theme.themeফাইলে ফাংশন ব্যবহার করে ।
    কোডের উদাহরণ এখানে:

    function custom_themename_preprocess_block(&$variables) {
      if ('page_title_block' == $variables['plugin_id']) {
        $request = \Drupal::request();
        $path = $request->getRequestUri(); // get current path
        if(strpos($path, 'user')) { //check current path is user profile page
          $variables['content']['#title'] = 'My Profile';
        }
      }
    }

    আমার ক্ষেত্রে আমি ২ য় পদ্ধতির উপরে ব্যবহার করেছি যা কেবলমাত্র ব্যবহারকারী প্রোফাইল পৃষ্ঠায় কাজ করবে।


1

আমি এটির সাথে লড়াই করেছি এবং উপরের সমস্ত সমাধানের চেষ্টা করেছি। শেষ পর্যন্ত যে সমাধানটি কাজ করেছিল তা হ'ল:

function mymodule_preprocess_html(&$variables) {
  $variables['head_title']['title'] = $something;
}

তবে আমি আমার কাস্টম মডিউল ওজন আপডেট করার পরেই:

drush php:eval "module_set_weight('mymodule', 10);"

1

পৃষ্ঠার শিরোনাম প্রাপ্তি @ RPayanm এর উত্তরে লিখিত হিসাবে কাজ করে। তবে সেটিংস করা বেশ জটিল হয়ে উঠল। পরিশেষে জানা গেল যে hook_preprocess_HOOK()পৃষ্ঠার শিরোনামটি খুব সহজেই প্রিপ্রোসেস করতে ব্যবহার করা যেতে পারে।

/**
 * Implements hook_preprocess_HOOK().
 */
function MYMODULE_preprocess_page_title(&$variables) {

  if ($MYLOGIC === TRUE) {

    $variables['title'] = 'New Title';
  }
}

এবং ইতিমধ্যে এখানে অন্যান্য উত্তরে উল্লিখিত হিসাবে আপনি সেইসাথে hook_preprocess_html()HTML শিরোনাম ট্যাগ সেট করতে ব্যবহার করতে পারেন ।


0

আমি ব্যবহারকারী / ইউআইডি জন্য এই পৃষ্ঠার টাইটেল ব্লকটিকে আলাদা আলাদা কাস্টম অ্যাকাউন্ট ক্ষেত্রের নামে পরিবর্তন করেছি:

function hook_preprocess_block(&$variables) {  
  $path = \Drupal::request()->getpathInfo();
  $arg = explode('/', $path);
  if (isset($arg[2]) && $arg[2] == 'user' && isset($arg[3])) {
    if (isset($variables['elements']['content']['#type']) && $variables['elements']['content']['#type'] == 'page_title') {
      $account = \Drupal\user\Entity\User::load($arg[3]);
      if(isset($account) && isset($account->field_mycustomfield->value)){
        $variables['content']['#title']['#markup']=$account->field_mycustomfield->value;
      }
    }
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.