รับหัวข้อของหน้า


8

เมื่อฉันได้รับชื่อในบางหน้าฉันได้รับชื่อที่ว่างเปล่าเหมือนบ้าน รหัสที่ฉันใช้ในสมาชิกของฉันคือรหัสต่อไปนี้

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

มันเป็นปัญหาเหรอ? ฉันจะแก้ไขได้อย่างไร


1
ขณะนี้ยังไม่มี API ที่ชัดเจนที่น่าเศร้า เคยมีปัญหาบางอย่างเพื่อหารือเกี่ยวกับปัญหาที่เกิดขึ้น ข้อมูลมีอยู่ใน hook_preprocess_page ... หรือชั่วคราวใน \ Drupal \ Core \ Render \ HtmlRenderer :: เตรียม () ซึ่งเศร้าไม่ผ่านชื่อไปยังเหตุการณ์ใด ๆ ฉันเดาว่าเราควรเติมปัญหากับ drupal core เพื่อแก้ปัญหา ... เนื่องจากนี่เป็น usecase ที่ชัดเจนสำหรับผู้คน
Daniel Wehner

@DanielWehner นั่นคือให้ฉันสร้างปัญหาใน drupal.org
rpayanm

คุณช่วยกรุณาโพสต์ลิงค์ไปยังปัญหาที่คุณยื่นใน drupal.org ได้ไหม?
anavarre

@anavarre นี่คือปัญหาdrupal.org/node/2399615แต่ถูกปิดเพราะมันซ้ำซ้อนกับdrupal.org/node/2264043
rpayanm

คำตอบ:


1

รหัสต่อไปนี้สามารถใช้ในการเปลี่ยนชื่อหน้า

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

0

ลองสิ่งนี้

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

?>

รหัสนี้คืนค่า null ในหน้าแรกจากนั้นคุณควรลองตรวจสอบว่าdrupal_is_front_pageแล้วแสดงชื่ออื่น


รหัสนั้นใช้ไม่ได้ในหน้า "Home" $ ​​title ไม่มีค่า
rpayanm

@ RolandoPayánMosquedaหากปัญหาของคุณอยู่ที่บ้านเท่านั้นลองตรวจจับหน้าแรกจากนั้นเปลี่ยนฉันจะอัปเดตคำตอบของฉัน
Yusef

ไม่เพียง แต่ใน "หน้าแรก" เท่านั้นสิ่งนี้เกิดขึ้นได้ที่ "ผู้ดูแลระบบ / เนื้อหา" ด้วยและฉันมั่นใจในหน้าอื่น ๆ อีกมากมาย
rpayanm

@ RolandoPayánMosquedaฉันคิดว่ามันเป็นปัญหา Drupal, Drupal 8 เป็น beta3 ไม่ได้คาดหวังการทำงานทุกอย่างถูกต้องโดยเฉพาะคุณสมบัติใหม่และ API :)
Yusef

0

ใช้รหัสนี้ในฟังก์ชั่นของคุณและคุณจะได้รับชื่อของหน้าใด ๆ เช่นคำหน้าโหนด ...

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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.