पृष्ठ शीर्षक को सामग्री प्रकार से कैसे ओवरराइड करें


12

मैं pagetitleपेज शीर्षक रेंडर करने के लिए कोर मॉड्यूल का उपयोग कर रहा हूं । हालाँकि, कुछ सामग्री प्रकारों के लिए मुझे चाहिएपृष्ठमुख्य शीर्षक सामग्री प्रकार लेबल (उदाहरण के लिए "समाचार") है और नोड लेबल नहीं है (उदाहरण के लिए "Drupal 8%!")।

क्या इसे प्राप्त करने का एक सरल तरीका है? मेरा पहला अनुमान का इस्तेमाल किया गया template_preprocess_page_title, लेकिन $variablesनोड, नोड प्रकार, आदि के बारे में कोई संदर्भ जो भी है ...


आपका क्या मतलब है कि जब आप किसी नोड पर जाते हैं, तो पृष्ठ का शीर्षक इस नोड का सामग्री प्रकार लेबल दिखाएगा?
MrD

जब आप किसी नोड पर जाते हैं, तो पृष्ठ का शीर्षक नोड का शीर्षक होता है (उदाहरण के लिए "Drupal 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

मेटाटैग मॉड्यूल का उपयोग करें यह पहले से ही डी 8-तैयार है और आपको इसकी आवश्यकता का समर्थन करता है।


हालाँकि मैं 100% नहीं हूँ अगर यह पेज टाइटल ब्लॉक में ओवरराइडिंग शीर्षक का समर्थन करता है। इस बिंदु पर मैं केवल यह जानता हूं कि यह पृष्ठ शीर्षक के लिए काम करता है।

इवान जारोस इनपुट के लिए धन्यवाद, जहां तक ​​मैं बता सकता हूं कि समर्थित पृष्ठ शीर्षक HTML सिर पर एक है, मैं मुख्य शीर्षक को ओवरराइड करना चाहता हूं।
फिलीप मिगुएल फोंसेका

2
उस स्थिति में hook_preprocess_page_title। रूट से नोड को लोड करें, एंटाइटाइप प्राप्त करें और वहां से लेबल प्राप्त करें।

यह मेरे लिए उपयोगकर्ता प्रोफ़ाइल पृष्ठ के लिए काम करता है।
केविन

0

एक छोटा मॉड्यूल बनाएं। दो फाइलें आवश्यक:

फ़ाइल नाम: liveeventtield.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

फ़ाइल: liveeventtmarks.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 (& $ चर) {} में $ चर ['head_title'] है जो पृष्ठ शीर्षक (संरचित शीर्षक: $ चर ['head -title_array']] के लिए सर्वोच्च हाथ उदाहरण है। अन्य दिलचस्प सरणी कुंजियाँ भी हैं जैसे $ चर ['पेज'] ['सामग्री'] और $ चर ['नोड_टाइप ’] जिसके आधार पर शीर्षक को संसाधित किया जा सकता है।

अंतिम विचार: $ चर ['head_title'] = ['title_part1', 'title_part2']; html.html.twig में से

<title>{{ head_title|safe_join(' | ') }}</title>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.