İç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.