Je sais que je pourrais changer le titre de la page avec drupal_set_title(t('Amy page title'))
, mais quand je l'essaye dans Drupal 8 j'obtiens Il n'y a pas une telle erreur de fonction .
Comment puis-je changer le titre de la page dans Drupal 8?
Comme vous pouvez le voir ici, cette fonction est obsolète dans Drupal 8.
Les titres sur les itinéraires peuvent désormais être définis de différentes manières, selon votre cas d'utilisation. Auparavant, juste
drupal_set_title()
était appelé dans n'importe quel endroit. Les cas d'utilisation suivants existent:Titre statique
Pour les titres statiques, vous définissez un '_title' sur la définition de routage:
block.admin_add: path: '/admin/structure/block/add/{plugin_id}/{theme}' defaults: _controller: '\Drupal\block\Controller\BlockAddController::blockAddConfigureForm' _title: 'Configure block' requirements: _permission: 'administer blocks'
Titre dynamique
Si vous écrivez un contrôleur et que vous avez besoin d'un titre dynamique, par exemple en fonction de la configuration du site, utilisez _title_callback dans les valeurs par défaut de l'itinéraire.
mymodule.test: path: '/mymodule/test' defaults: _controller: '\Drupal\mymodule\Controller\Test::getContent' _title_callback: '\Drupal\mymodule\Controller\Test::getTitle' <?php class Test { /** * Returns a page title. */ public function getTitle() { return 'Foo: ' . \Drupal::config()->get('system.site')->get('name'); } /** * Returns a page render array. */ public function getContent() { $build = array(); $build['#markup'] = 'Hello Drupal'; return $build; } } ?>
Remplacement du titre final
Si vous écrivez un contrôleur et que vous devez remplacer le titre de la route, vous pouvez renvoyer #title dans le tableau de rendu. Cela doit généralement être évité, car le titre de la page, une fois rendu, peut être différent du titre dans d'autres contextes (comme dans le fil d'Ariane).
<?php class Test { /** * Renders a page with a title. * * @return array * A render array as expected by drupal_render() */ public function getContentWithTitle() { $build = array(); $build['#markup'] = 'Hello Drupal'; $build['#title'] = 'Foo: ' . Drupal::config()->get('system.site')->get('name'); return $build; } } ?>
Drapeau de sortie de
drupal_set_title()
La validation de sortie dans Drupal 8 est opposée à Drupal 7. Nous devons spécifier explicitement PASS_THROUGH et CHECK_PLAIN est par défaut dans Drupal 7, alors que dans Drupal 8 la situation est différente. La sortie est échappée automatiquement sauf si elle est marquée comme sûre. Les deux
t()
etnew FormattableMarkup
retournent des objets qui ne seront pas échappés automatiquement.$form['#title'] = $this->t('Add new shortcut');
$form['#title'] = $this->t("'%name' block", array('%name' => $info[$block->delta]['info']));
Drupal 8.5+
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
$route->setDefault('_title', 'New Title');
}
et vous pouvez également l'utiliser hook_preprocess_HOOK()
pour le remplacer
/**
* Implements hook_preprocess_HOOK().
*/
function MYMODULE_preprocess_page_title(&$variables) {
// WRITE YOUR LOGIC HERE,
if ($YOUR_LOGICS === TRUE) {
$variables['title'] = 'New Title';
}
}
Modifiez la balise de titre dans la tête de votre document HTML.
Modifiez le titre qui apparaît dans le contenu de la page.
la source
drupal_set_title () dans Drupal 8
drupal_get_title () dans Drupal 8
la source
Cette fonction a été supprimée de Drupal 8.
Modification de l'enregistrement: drupal_set_title () et drupal_get_title () ont été supprimés .
Vous pouvez maintenant définir le titre lors de la définition des itinéraires dans
modulename.routing.yml
. Exemple de la façon dont cela pourrait être fait, est montré le lien d'enregistrement de changement ci-dessus.la source
J'ai trouvé dans D8 que si vous souhaitez modifier le titre d'une vue d'entité, vous pouvez utiliser hook_ENTITY_TYPE_view_alter (). Par exemple, voici comment vous pouvez modifier la vue d'une entité utilisateur avec un champ sur l'utilisateur "field_display_name", plutôt que l'ID utilisateur comme titre:
la source
J'ai trouvé un autre moyen, qui peut être plus simple si vous n'avez pas de contrôleur et que vous souhaitez modifier le titre sur votre site Web. Vous pouvez l'utiliser pour modifier le titre en fonction du nœud actuel.
Tout d'abord, supprimez la balise dans votre html.html.twig Ensuite, accrochez hook_page_attachments_alter
Vous pouvez obtenir le nœud actuel du terme de taxonomie avec
la source
Jetez un œil à Automatic Entity Label , un module de contribution très bien conçu pour définir les titres des nœuds, etc.
(Notez que `` titre de page '' est une manière plus familière de dire `` étiquette d'entité '', où `` page '' est une entité de contenu et `` étiquette '' englobe le titre et l'équivalent pour d'autres entités, par exemple les sujets de commentaire, les noms de termes de taxonomie.)
Bien que op semble demander des conseils sur l'écriture de code personnalisé, il n'est pas clair d'après les détails disponibles que le code personnalisé est la meilleure recommandation. Pour les lecteurs sans raison très spécifique de dupliquer une fonctionnalité disponible à partir du code contribué, la communauté Drupal conseille fortement (et les propriétaires de sites en tirent un grand avantage) d'adopter un module existant.
la source
drupal_set_title()
et lesdrupal_get_title()
deux sont supprimés de drupal 8 mais la meilleure partie est qu'il y a un bloc séparé pourpage_title
. L'utilisateur peut masquer ou ajouter ce bloc sur n'importe quelle page / région.Il y a 2 solutions pour cela.
title_block
sur une page particulière et ajoutez un nouveau bloc personnalisé avec un balisage pour le titre. Placez maintenant ce bloc juste après latitle_block
section du bloc in drupal.En utilisant la
hook_preprocess_block()
fonction dans votrecustom_theme.theme
fichier.Voici l'exemple de code:
Dans mon cas, j'ai utilisé la deuxième méthode ci-dessus, qui ne fonctionnera que pour la page de profil utilisateur.
la source
J'ai lutté avec cela et j'ai essayé toutes les solutions ci-dessus. La solution qui a finalement fonctionné était:
mais seulement après avoir mis à jour le poids de mon module personnalisé:
la source
Obtenir le titre de la page fonctionne très bien comme écrit dans la réponse de @ rpayanm. Mais la configuration s'est avérée assez compliquée. Nous avons finalement découvert que cela
hook_preprocess_HOOK()
pourrait simplement être utilisé pour prétraiter le titre de la page assez facilement.Et comme déjà mentionné dans d'autres réponses ici, vous pouvez également utiliser
hook_preprocess_html()
pour définir la balise de titre de tête HTML en conséquence.la source
j'ai changé le bloc page_title pour user / uid en un nom de champ de compte personnalisé différent comme ceci:
la source