페이지 제목 가져 오기


8

일부 페이지에서 제목을 얻으면 Home 과 같은 빈 제목이 표시 됩니다. 구독자에서 사용중인 코드는 다음과 같습니다.

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 :: prepare ()에서 사용할 수 있습니다. 슬프게도 제목은 이벤트에 전달되지 않습니다. 나는이 사람에 대한 명확한 쓰임새는 우리가 ... 상황을 해결하기 위해 드루팔 코어에 대한 문제를 작성해야합니다 생각
다니엘 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 인지 확인한 다음 다른 제목을 표시 해야합니다.


"홈"페이지에서 해당 코드가 작동하지 않습니다 $ title is null
rpayanm

@ RolandoPayánMosqueda 문제가 집에만있는 경우, 첫 페이지를 감지 한 후 변경해보십시오. 내 답변을 업데이트합니다
Yusef

"홈"뿐만 아니라 "관리자 / 콘텐츠"에서도이 문제가 발생하며 다른 페이지에서도 더 확실합니다.
rpayanm

RolandoPayánMosqueda @ 나는 그것이 드루팔 문제라고 생각 드루팔 8 베타 3는 :), 정확하게 모든 작업을 기대 특별히 새로운 기능과 API를하지 않는 것입니다
유세프

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.