Nhận tiêu đề của trang


8

Khi tôi nhận được tiêu đề trên một số trang, tôi nhận được một tiêu đề trống như Trang chủ . Mã tôi đang sử dụng trong thuê bao của tôi là mã sau đây.

class HistorySubscriber implements EventSubscriberInterface {
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('onResponse', 0);
    return $events;
  }

  public function onResponse($event) {
    $request = \Drupal::request();
    $route_match = \Drupal::routeMatch();
    $title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
  }
}

Đó là một vấn đề? Làm thế nào tôi có thể sửa chữa nó?


1
Hiện tại không có API rõ ràng để làm điều đó, thật đáng buồn. Đã từng có một số vấn đề để thảo luận về vấn đề đó. Thông tin có sẵn trong hook_pre process_page ... hoặc tạm thời trong \ Drupal \ Core \ Render \ HtmlRenderer :: ready (), điều đáng buồn là không chuyển tiêu đề cho bất kỳ sự kiện nào. Tôi đoán chúng ta nên điền vào một vấn đề chống lại cốt lõi của drupal để giải quyết tình huống ... vì đây là một cách sử dụng rõ ràng cho mọi người
Daniel Wehner

@DanielWehner nghĩa là, hãy để tôi tạo một vấn đề trong drupal.org
rpayanm

Bạn có thể vui lòng gửi liên kết đến vấn đề bạn đã nộp trên drupal.org không?
anavarre

@anavarre đây là vấn đề drupal.org/node/2399615 , nhưng đã bị đóng vì nó là bản sao của drupal.org/node/2264043
rpayanm

Câu trả lời:


1

Các mã sau đây có thể được sử dụng để thay đổi tiêu đề trang.

// Alter page title.
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
  $route->setDefault('_title', 'Kontakt');
}

0

Thử đi

<?php
  $request = \Drupal::request();
  $title=t('Home');
  if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT) && !drupal_is_front_page()) {
    $title = \Drupal::service('title_resolver')->getTitle($request, $route);
  }

?>

mã này trả về null ở trang trước, sau đó bạn nên thử kiểm tra xem drupal_is_front_page sau đó hiển thị tiêu đề khác


Mã đó không hoạt động, trên trang "Trang chủ" $ title là null
rpayanm

@ RolandoPayánMosqueda nếu vấn đề của bạn chỉ ở nhà, hãy thử phát hiện trang trước sau đó thay đổi, tôi cập nhật câu trả lời của tôi
Yusef

Không chỉ trên "Trang chủ" xảy ra điều này, trên "quản trị viên / nội dung" cũng vậy và tôi chắc chắn trên các trang khác nhiều hơn.
rpayanm

@ RolandoPayánMosqueda Tôi nghĩ đó là một vấn đề nghiêm trọng, drupal 8 là beta3, đừng mong đợi mọi thứ hoạt động chính xác, các tính năng và API đặc biệt mới :)
Yusef

0

Sử dụng mã này bên trong chức năng của bạn và Bạn sẽ nhận được tiêu đề của bất kỳ trang nào như thuật ngữ, trang nút ...

public function getCurrentPageTitle() {
    $title = 'DEFAULT TITLE';
    $request = \Drupal::request();
    if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
      // For Taxonomy Term
      if (!empty($request->attributes->get('taxonomy_term'))) {
        $title = $request->attributes->get('taxonomy_term')->get('title')->value;
      }
      // For Node
      else {
        $node = \Drupal::routeMatch()->getParameter('node');
        if (!empty($node) && 'CONTENT_TYPE' === $node->bundle()) {
          $title = "CONTENT_TYPE_SPECIFIC_TITLE_SET";
          //$title = \Drupal::service('title_resolver')->getTitle($request, $route);
        }
        else {
          $title = \Drupal::service('title_resolver')->getTitle($request, $route);
        }
      }
    }
    return $title;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.