İçerik türüne göre sayfa başlığı nasıl geçersiz kılınır


12

pagetitleBir sayfa başlığı oluşturmak için çekirdek modülü kullanıyorum . Ancak, belirli içerik türleri içinsayfaana başlık , düğüm etiketi değil , içerik türü etiketi (ör. "Haberler") olmalıdır (ör. "Drupal 8 yayınlandı!").

Bunu başarmanın basit bir yolu var mı? İlk tahminim kullanmaktı, template_preprocess_page_titleancak $variablesdüğüm, düğüm tipi vb.İle ilgili hiçbir bağlamı yok ...


bir düğümü ziyaret ettiğinizde sayfa başlığının bu düğümün içerik türü etiketini göstermesi ne anlama geliyor?
— MrD

Bir düğüm ziyaret ettiğinizde sayfanın başlığı düğümün başlık (örneğin, "Drupal 8 yayımlanan!" Dır Ben içerik türü başlığı (örneğin, "Haber") olmak istiyorum..
— Filipe Miguel Fonseca

Yanıtlar:


25

Ivan Jaros tarafından belirtildiği gibi kullanabilirsiniz hook_preprocess_page_title.

Bağlam elde etmek için önce düğümü yoldan yüklemeniz yeterlidir.

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;
  }
}

Bunu yalnızca belirli içerik türleriyle kullanmak $node->bundle()istiyorsanız, makine tarafından okunabilir adı alıp kontrol etmek için kullanabilirsiniz.


1
Bu block_title,. Ancak Sayfa başlığını geçersiz kılmaz. Sayfa başlığının başlık bloğu ile aynı değere ayarlanması hakkında herhangi bir fikir
— Malabya ​​Tewari

4

Linus, önişleme işlevi için doğru anladı, ancak mevcut düğümü almak için kişisel olarak kullanırım (daha kısa ve daha kolay göründüğü için ...)

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

Ardından düğüm başlığına erişmek için şunu kullanın:

$title = $node->getTitle()

veya başka bir özel alana (değeri olan) erişmek için:

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

Aslında, normal bir düğüm önişleme işlevinde bu verilere eriştiğiniz her şeye erişin :)


2

Zaten D8 için hazır olan Metatag modülünü kullanın ve ihtiyacınız olanı destekleyin.


Sayfa başlığı bloğunda geçersiz kılma başlığını destekliyorsa% 100 olmamasına rağmen. Bu noktada sadece sayfa başlığı için işe yaradığını biliyorum.

Girdi için teşekkürler Ivan Jaros, görebildiğim kadarıyla desteklenen sayfa başlığı HTML başındaki olduğunu, ana başlığı geçersiz kılmak istiyorum.
— Filipe Miguel Fonseca

2
Bu durumda hook_preprocess_page_title. Düğümü rotadan yükleyin, varlık türünü alın ve oradan etiket alın.

Bu, kullanıcı profili sayfası için benim için çalıştı.
— Kevin

0

Küçük bir modül yapın. İki dosya gereklidir:

Dosya adı: 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

Dosya: 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);
    }
  }
}

Ben hook_form_alter () varsayılan bir değer ve PLACEHOLDER gerekir sanmıyorum gibi muhtemelen daha fazla ihtiyacım var, ama ben bu oy (-;


0

THEMENAME_preprocess_html (& $ değişkenler) {} içinde, sayfa başlığı için en yüksek el örneği olan $ değişkenleri ['head_title'] vardır (Yapısal başlık: $ variable ['head_title_array']). Başlığın işlenebileceği $ değişkenler ['sayfa'] ['içerik'] ve $ değişkenler ['düğüm_türü'] gibi başka ilginç dizi anahtarları da vardır.

Son düşünce: $ değişkenler ['head_title'] = ['title_part1', 'title_part2']; html.html.twig'den beri

<title>{{ head_title|safe_join(' | ') }}</title>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.