Крюк для изменения заголовка страницы

Крюк для изменения заголовка страницы

05.10.2017 12:13:22 Просмотров 67 Источник

Я хочу программно изменить заголовок страницы в Drupal 8, чтобы он был жестко закодирован в файле темы.

Я пытаюсь использовать функцию hook для preprocess_page_title, но, похоже, не понимаю, на какой странице изменить заголовок.

Вот что у меня есть до сих пор:

function test_preprocess_page_title(&$variables) {
  if (arg(0) == 'node/12') {
    $variables['title'] = 'New Title';
  }
}

Я решил, что единственный способ сделать это изменение на одной конкретной странице-установить аргумент узла. Кто-нибудь придумал способ переопределить заголовок страницы на Drupal?

У вопроса есть решение - Посмотреть?

Ответы - Крюк для изменения заголовка страницы / Hook to change page title

Jeffrey

06.10.2017 12:29:16

Вот способ предварительной обработки вашей страницы :

function yourthemename_preprocess_page(&$variables) {
  $node = \Drupal::routeMatch()->getParameter('node');
  if ($node) {
    $variables['title'] = $node->getTitle();
  }
}

и в вашем шаблоне страницы.формат html.прут

{{title}}
Debasish

06.12.2017 01:04:49

В шаблоне.файл темы добавьте препроцессор, а затем переопределите заголовок страницы.формат html.веточка в папке шаблона путем печати переменной, как показано ниже:

function theme_preprocess_page_title(&$variables) {
  $node = \Drupal::request()->attributes->get('node');
  $nid = $node->id();
  if($nid == '14') {
    $variables['subtitle'] = 'Subheading';
  }
}

затем {{ подзаголовок }}

Yusef

17.04.2019 04:25:09

Есть несколько решений для изменения заголовка страницы

На шаблонах

/**
 * Implements hook_preprocess_HOOK().
 */
     function MYMODULE_preprocess_page_title(&$variables) {

      if ($YOUR_LOGIC == TRUE) {
          $variables['title'] = 'New Title';
     }
     }

На странице просмотра узла

/**
* Implements hook_ENTITY_TYPE_view_alter().
*/
function mymodule_user_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
      if ($YOUR_LOGIC == TRUE) {
  $build['#title'] = $entity->get('field_display_name')->getString();
  }
}

для примера, если вы хотите изменить заголовок пользователя

function mymodule_user_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
    if ($entity->getEntityTypeId() == 'user') {  
  $build['#title'] = $entity->get('field_first_name')->getString();
  }
}

На контроллере или hook_form_alter

if ($YOUR_LOGIC == TRUE) {
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
  $route->setDefault('_title', 'New Title');
 }
}
https://stackoverflow.com/questions/46574280/hook-to-change-page-title/55728610#comment101806701_55728610
Это отличный ответ. Спасибо!
https://stackoverflow.com/questions/46574280/hook-to-change-page-title/55728610#comment101809468_55728610
@user151841 приятно слышать, что это сработало для вас :)
Tom Bisciglia

27.09.2019 01:57:52

Заголовок страницы-это блок в Drupal 8. Если вы можете найти plugin_idблока заголовка страницы (который, вероятно, будет page_title_block), то вы можете переопределить заголовок напрямую, без необходимости изменять существующий шаблон ветки, используя препроцессор блока. Ваш код может быть похож на следующий:

function vhs_preprocess_block(&$variables) {
  // This example restricts based on the actual URL; you can replace this with any other logic you wish.
  $request = \Drupal::request();
  $uri = $request->getRequestUri();
  if (
    isset($variables['elements']['#base_plugin_id']) &&
    $variables['elements']['#base_plugin_id'] == 'page_title_block' &&
    isset($variables['content']['#title']['#markup']) &&
    strpos($uri, '/url-to-match') === 0 // replace with logic that finds the correct page to override
  ) {
    $variables['content']['#title']['#markup'] = 'My Custom Title';
  }
}

В приведенном выше примере используется объект запроса Drupal для захвата и сравнения фактического URL-адреса. Начальный вопрос, заданный для сопоставления на основе пути узла; вы можете получить это с чем-то вроде:

$current_path = \Drupal::service('path.current')->getPath();

Затем, вместо условия strposвыше, вы можете использовать:

$current_path == 'node/12'
Matoeil

18.10.2019 06:02:28

я изменил блок page_title для user / uid на другое пользовательское имя поля учетной записи, например :

function hook_preprocess_block(&$variables) {  
  $path = \Drupal::request()->getpathInfo();
  $arg = explode('/', $path);
  if (isset($arg[2]) && $arg[2] == 'user' && isset($arg[3])) {
    if (isset($variables['elements']['content']['#type']) && $variables['elements']['content']['#type'] == 'page_title') {
      $account = \Drupal\user\Entity\User::load($arg[3]);
      if(isset($account) && isset($account->field_mycustomfield->value)){
        $variables['content']['#title']['#markup']=$account->field_mycustomfield->value;
      }
    }
  }
}
Помочь в развитии проекта:
Закрыть X