সামগ্রীর ধরণ অনুসারে কীভাবে পৃষ্ঠা শিরোনামকে ওভাররাইড করা যায়


12

আমি pagetitleপৃষ্ঠা শিরোনাম রেন্ডার করতে মূল মডিউলটি ব্যবহার করছি । তবে নির্দিষ্ট সামগ্রীর ধরণের জন্য আমি চাই wantপৃষ্ঠামূল শিরোনামটি সামগ্রীর ধরণের লেবেল হতে হবে (যেমন "নিউজ") এবং নোড লেবেল নয় (যেমন "ড্রুপাল 8 মুক্তি পেয়েছে!")।

এটি অর্জন করার কোনও সহজ উপায় আছে? আমার প্রথম অনুমানটি ব্যবহার করা ছিল template_preprocess_page_titleতবে $variablesনোড, নোডের প্রকার ইত্যাদি সম্পর্কে কোনও প্রসঙ্গ নেই ...


আপনি যখন কোনও নোডে যান তখন পৃষ্ঠার শিরোনামটি এই নোডের বিষয়বস্তুর প্রকারের লেবেলটি দেখায় তার অর্থ কী?
মিঃডি

আপনি যখন কোনও নোডে যান তখন পৃষ্ঠার শিরোনাম হ'ল নোডের শিরোনাম (যেমন "দ্রুপাল 8 মুক্তি পেয়েছে!"। আমি এটি সামগ্রী সামগ্রীর শিরোনাম হতে চাই (যেমন "নিউজ")
ফিলিপ মিগুয়েল ফোনসেকা

উত্তর:


25

ইভান জারোস দ্বারা উল্লিখিত হিসাবে আপনি ব্যবহার করতে পারেন hook_preprocess_page_title

কিছু প্রসঙ্গ পেতে আপনাকে প্রথমে রুটটি থেকে নোডটি লোড করতে হবে।

function yourtheme_preprocess_page_title(&$variables) {

  // Load the node entity from current route
  if ($node = \Drupal::routeMatch()->getParameter('node')) {

    // Load the label of the bundle
    $bundle_label = \Drupal::entityTypeManager()
      ->getStorage('node_type')
      ->load($node->bundle())
      ->label();

    // Set the page title
    $variables['title'] = $bundle_label;
  }
}

আপনি যদি কেবল নির্দিষ্ট সামগ্রীর প্রকারের সাথে এটি ব্যবহার $node->bundle()করতে চান তবে আপনি মেশিন-পঠনযোগ্য নামটি পেতে এবং এটির বিরুদ্ধে পরীক্ষা করতে পারেন।


1
এটি এর জন্য শিরোনাম পরিবর্তন করে block_title। তবে এটি পৃষ্ঠা শিরোনামকে ওভাররাইড করে না। পৃষ্ঠার শিরোনাম ব্লক হিসাবে একই মান সেট করা পেতে যে কোনও ধারণা
মালবায়া তেওয়ারি

4

লিনাস প্রিপ্রোসেস ফাংশনটির জন্য এটি সঠিকভাবে পেয়েছে তবে আমি ব্যক্তিগত নোডটি ব্যক্তিগত নোডটি পাওয়ার জন্য এটি ব্যক্তিগতভাবে ব্যবহার করব (এটি সংক্ষিপ্ত এবং সহজ বলে মনে হচ্ছে ...)

$node = \Drupal::request()->attributes->get('node')

তারপরে নোড শিরোনাম অ্যাক্সেস করতে, ব্যবহার করুন:

$title = $node->getTitle()

বা অন্য কাস্টম ক্ষেত্রে (মান সহ) অ্যাক্সেস করতে:

$node->get('field_MYFIELD')->value

প্রকৃতপক্ষে, আপনি নিয়মিত নোড প্রিপ্রোসেস ফাংশনে এই ডেটাগুলি যেভাবে অ্যাক্সেস করতে চান তাতে সমস্ত কিছু অ্যাক্সেস করুন :)


2

এটি ইতিমধ্যে D8- প্রস্তুত মেটাটাগ মডিউলটি ব্যবহার করুন এবং আপনার যা প্রয়োজন তা সমর্থন করে।


যদিও আমি পৃষ্ঠাটি শিরোনাম ব্লকে ওভাররাইডিং শিরোনাম সমর্থন করি তবে আমি 100% নই। এই মুহুর্তে আমি কেবল জানি এটি পৃষ্ঠা শিরোনামের জন্য কাজ করে।

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

2
সেক্ষেত্রে হুক_প্রিপ্রসেস_পৃষ্ঠা_ শিরোনাম। রুট থেকে নোড লোড করুন, সত্তাটি পাবেন এবং সেখান থেকে লেবেল পান।

এটি ব্যবহারকারীর প্রোফাইল পৃষ্ঠার জন্য আমার পক্ষে কাজ করেছে।
কেভিন

0

একটি ছোট মডিউল তৈরি করুন। দুটি ফাইলের প্রয়োজন:

ফাইলের নাম: liveeventtitles.info.yml

name: Live Event Titles
description: Programmatically generates titles for event node bundles.
package: Custom
type: module
version: 1.0
core: 8.x
dependencies:
  - node

ফাইল: liveeventtitles.module

<?php
/**
 * @file
 * Modify the node create/edit form and automatically generate a node title for event nodes.
 */
define('LIVEEVENTTITLES_PLACEHOLDER', '%LiveEventTitle%');
/**
 * Implements hook_form_alter().
 */
function liveeventtitles_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  if ($form_id == 'node_event_form' || $form_id == 'node_event_edit_form') {
    $title_widget = &$form['title']['widget'][0];
    $default = (!empty($title_widget['value']['#default_value'])? $title_widget['value']['#default_value'] : LIVEEVENTTITLES_PLACEHOLDER);
    $title_widget['value']['#default_value'] = $default;
    $title_widget['value']['#type'] = 'value';
    $title_widget['value']['#required'] = FALSE;
    $form['title']['#access'] = FALSE;
  }
}
/**
 * Implements hook_node_presave
 */
function liveeventtitles_node_presave(Drupal\node\Entity\Node $node) {
  $type = $node->getType();
  if ($type == 'event') {
    // Load the artist node to get the title
    if ($artist_id = $node->field_artist->getString()) {
      $artist = \Drupal\node\Entity\Node::load($artist_id);
      $artist_name = $artist->title->getString();
    }
    // Load the Venue to get the title
    if ($venue_id = $node->field_venue->getString()) {
      $venue = \Drupal\node\Entity\Node::load($venue_id);
      $venue_name = $venue->title->getString();
    }
    if (!empty($venue_name) && !empty($artist_name)) {
      $node->setTitle($artist_name . ' at ' . $venue_name);
    }
  }
}

আমার সম্ভবত আমার প্রয়োজনের চেয়ে বেশি রয়েছে যেমন হুক_ফরম_াল্টার () এ আমার কোনও ডিফল্ট মান এবং PLACEHOLDER দরকার মনে হয় না তবে এটিকে ভোট দেওয়ার জন্য আমার কাউকে কারণ দেওয়া দরকার (-;


0

THEMENAME_preprocess_html (& $ ভেরিয়েবল) {In এ $ ভেরিয়েবলগুলি ['head_title'] রয়েছে যা পৃষ্ঠার শিরোনামের জন্য সর্বোচ্চ হাত - উদাহরণ (কাঠামোগত শিরোনাম: $ ভেরিয়েবল ['হেড_উইচটিও_আররে'])। এছাড়াও অন্যান্য আকর্ষণীয় অ্যারে কীগুলি রয়েছে যেমন $ ভেরিয়েবল ['পৃষ্ঠা'] ['সামগ্রী'] এবং $ ভেরিয়েবল ['নোড_ টাইপ'] যার ভিত্তিতে শিরোনামটি প্রক্রিয়া করা যায়।

চূড়ান্ত চিন্তা: $ ভেরিয়েবল ['head_title'] = ['শিরোনাম_ পার্ট 1', 'শিরোনাম_ পার্ট 2']; যেহেতু html.html.twig এ

<title>{{ head_title|safe_join(' | ') }}</title>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.