J'ai essayé de définir un nouveau remplacement de fil d'Ariane, mais j'obtiens toujours le site par défaut.
J'ai créé un module personnalisé, foo_breadcrumb:
- modules/custom/foo_breadcrumb
- foo_breadcrumb.info.yml
- foo_breadcrumb.services.yml
- src/
- BreadcrumbBuild.php
Voici le foo_breadcrumb.services.yml
:
services:
foo_breadcrumb.breadcrumb:
class: Drupal\foo_breadcrumb\BreadcrumbBuild
tags:
- { name: breadcrumb_builder, priority: 100 }
A l'intérieur src/BreadcrumbBuild.php
, j'ai:
<?php
namespace Drupal\foo_breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderBase;
class BreadcrumbBuild implements BreadcrumbManager {
/**
* {@inheritdoc}
*/
public function applies(array $attributes) {
return true;
}
/**
* {@inheritdoc}
*/
public function build(array $attributes) {
$breadcrumb[] = $this->l($this->t('Test'), NULL);
$breadcrumb[] = $this->l($this->t('Test2'), 'test');
return $breadcrumb;
}
}
?>
J'ai commencé à travailler sur le seul document que je pouvais trouver sur le fil d'Ariane Drupal 8 , mais le problème est qu'il semble utiliser une ancienne version de l'autochargement PSR-4 qui n'est plus en place (pour mémoire, je suis sur 8.0.0 -dev-beta3), et donc je suis passé par la façon dont tous les autres modules fonctionnent dans la base de code.
Maintenant, je suis assez certain que cela est correct pour charger le module; mais je ne sais pas si
class BreadcrumbBuild extends BreadcrumbBuilderBase
est correct. Le problème est que l'ancien tutoriel que j'ai lié aux mentions s'étendait BreadcrumbBuilderBase
, mais les documents les plus récents ne semblent pas le mentionner et je me demande s'il est obsolète - et comment je dois le faire.
De même, je ne comprends pas vraiment ce que fait le services.yml
fichier à cet égard, il n'y a aucune documentation pour cela.
la source
On y va encore une fois. Ces réponses sont généralement correctes. Une chose que vous ne pouvez pas oublier est les "balises de cache" et les "contextes de cache".
J'établissais un terme de taxonomie sur un nœud comme fil d'Ariane.
Je l'ai fait fonctionner avec les conseils de ce post, mais j'ai cliqué et j'ai remarqué les mêmes chapelures sur chaque page.
Pour faire court, assurez-vous de définir certains contextes de cache et balises.
Voici mon service dans un résumé: https://gist.github.com/jonpugh/ccaeb01e173abbc6c88f7a332d271e4a
Voici ma méthode build ():
la source
Mise à jour 2016 Drupal 8
La documentation indique que vous devez renvoyer une instance de la classe de fil d'Ariane. Si vous avez du mal à le faire fonctionner. voici la solution qui a fonctionné pour moi.
Ensuite, le fichier yml
PS: si vous utilisez le bootstrap, allez sur votre
/admin/appearance/settings
page de paramètres et regardez les paramètres du fil d'Ariane.Show 'Home' breadcrumb link
doit être vérifié. EtShow current page title at end
devrait être cochée.Après tout cela, videz votre cache. Chaque fois que vous modifiez un fichier YML, même en mode débogage, vous devez vider votre cache. vous pouvez y aller
/core/rebuild.php
si vous êtes coincé et ne pouvez pas reconstruire.la source
N'oubliez pas la mise en cache
Le cache de rendu a été modifié assez tard dans le cycle de développement D8, et il n'est donc pas mentionné dans la série d8ftw, ni dans les autres réponses à cette question.
La documentation de l'API Cache se réfère spécifiquement aux tableaux de rendu, mais toutes ces instructions s'appliquent également à Breadcrumbs. Les miettes de pain ont une
toRenderable()
méthode, Drupal essaiera de les mettre en cache dans le cache de rendu, et cela signifie que vous devez spécifier suffisamment d'informations pour permettre à Drupal de le faire correctement.Les détails sont dans la documentation, mais la version courte est celle qui
Breadcrumb
implémente leRefinableCachableDependencyInterface
. Dans votre classe de générateur, vous souhaiterez appeleraddCachableDependency()
avec toutes les entités ou tous les objets de configuration utilisés pour créer le fil d'Ariane. La documentation de 'CacheableDependencyInterface & friends' explique plus en détail comment et pourquoi.S'il existe d'autres contextes où le fil d'Ariane peut changer, vous devrez également utiliser manuellement
addCacheContexts()
pour vous assurer que le bloc varie,addCacheTags()
pour vous assurer que l'entrée de cache peut être correctement invalidée, etmergeCacheMaxAge()
si le cache est sensible au temps et doit expirer.Si cela n'est pas fait correctement, l'un de vos services de création de fil d'Ariane personnalisé «gagnera» et le fil d'Ariane pour cette page spécifique sera servi sur chaque page, à tous les visiteurs, pour toujours.
la source
Il existe un autre moyen d'y parvenir.
Et puis créez un autre fichier dans le dossier de modèle de votre thème nommé "breadcrumb.html.twig" et mettez le code ci-dessous dans ce fichier:
C'est ça. Maintenant, videz le cache et vous obtiendrez le fil d'Ariane avec le titre de la page actuelle comme Accueil / Titre de la page actuelle. Vous pouvez changer le séparateur en remplaçant "/" par celui souhaité.
la source
Vous devez utiliser un module contrib pour ajouter le titre de la page actuelle au fil d'Ariane tel que Current Page Crumb: https://www.drupal.org/project/current_page_crumb
Si vous souhaitez le coder manuellement, vous pouvez extraire le code du dossier src de ce module. Vous pouvez trouver plus de détails sur le fil d'Ariane Drupal 8 ici: http://www.gregboggs.com/drupal8-breadcrumbs/
la source
drush en current_page_crumb
n'est pas si mal.J'avais utilisé un fil d'Ariane personnalisé en utilisant un jeton dans Drupal 7 et lorsque ce module n'était pas disponible pour Drupal 8, j'ai fini par créer des vues pour mes types de contenu individuels en utilisant les champs qui étaient à l'origine les champs du jeton. L'utiliser comme un bloc et désactiver le fil d'Ariane normal. C'était un peu plus de travail que le fil d'Ariane personnalisé, mais cela fonctionne.
la source