Intenté definir una nueva anulación de la ruta de exploración, pero todavía obtengo el sitio predeterminado.
He creado un módulo personalizado, foo_breadcrumb:
- modules/custom/foo_breadcrumb
- foo_breadcrumb.info.yml
- foo_breadcrumb.services.yml
- src/
- BreadcrumbBuild.php
Aquí está el foo_breadcrumb.services.yml
:
services:
foo_breadcrumb.breadcrumb:
class: Drupal\foo_breadcrumb\BreadcrumbBuild
tags:
- { name: breadcrumb_builder, priority: 100 }
En el interior src/BreadcrumbBuild.php
, tengo:
<?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;
}
}
?>
Comencé a trabajar en la única escritura que pude encontrar en Drupal 8 breadcrumbs , pero la cuestión es que parece estar usando una versión anterior de la carga automática de PSR-4 que ya no está en su lugar (para el registro estoy en 8.0.0 -dev-beta3), y entonces analicé cómo funcionan todos los demás módulos en la base de código.
Ahora estoy bastante seguro de que esto es correcto para cargar el módulo; sin embargo no estoy seguro si
class BreadcrumbBuild extends BreadcrumbBuilderBase
es correcto. El problema es que el antiguo tutorial al que me vinculé menciona que se extiende BreadcrumbBuilderBase
, pero los documentos más actuales no parecen mencionarlo y me pregunto si está desactualizado y cómo debería hacerlo.
Del mismo modo, realmente no entiendo lo services.yml
que está haciendo el archivo a este respecto, no hay documentación en este lugar.
fuente
Aquí vamos de nuevo. Estas respuestas son en su mayoría correctas. Una cosa que no puede olvidar son las "etiquetas de caché" y los "contextos de caché".
Estaba configurando un término de taxonomía en un nodo como una ruta de exploración.
Lo hice funcionar con el consejo de esta publicación, pero luego hice clic y noté las mismas migas de pan en cada página.
En pocas palabras, asegúrese de establecer algunos contextos de caché y etiquetas.
Aquí está mi servicio en una esencia: https://gist.github.com/jonpugh/ccaeb01e173abbc6c88f7a332d271e4a
Aquí está mi método build ():
fuente
Actualización 2016 Drupal 8
La documentación indica que debe devolver una instancia de la clase de ruta de exploración. Si tiene problemas para que funcione. Aquí está la solución que funcionó para mí.
Luego el archivo yml
PD: si está utilizando bootstrap, vaya a la
/admin/appearance/settings
página de configuración y mire la configuración de migas de pan.Show 'Home' breadcrumb link
debe ser verificado YShow current page title at end
debe ser marcado.Después de todo esto, borre su caché. Cada vez que cambia un archivo YML, incluso en modo de depuración, necesita borrar su caché. puedes ir
/core/rebuild.php
si te quedas atascado y no puedes reconstruir.fuente
No olvides el almacenamiento en caché
El caché de renderizado se cambió bastante tarde en el ciclo de desarrollo de D8, por lo que no se menciona en la serie d8ftw ni en las otras respuestas a esta pregunta.
La documentación de la API de caché se refiere específicamente a las matrices de renderizado, pero todas esas instrucciones se aplican igualmente a Breadcrumbs. Las migas de pan tienen un
toRenderable()
método, Drupal intentará almacenarlas en la memoria caché de representación, y eso significa que debe especificar suficiente información para permitir que Drupal lo haga correctamente.Los detalles están en los documentos, pero la versión corta es la que
Breadcrumb
implementa elRefinableCachableDependencyInterface
. En su clase de constructor, querrá llamaraddCachableDependency()
con todas y cada una de las entidades u objetos de configuración que se utilizan para construir la ruta de navegación. La documentación de 'CacheableDependencyInterface & friends' detalla cómo y por qué.Si hay otros contextos en los que la ruta de exploración podría cambiar, también deberá usarla manualmente
addCacheContexts()
para asegurarse de que el bloque varía,addCacheTags()
para asegurarse de que la entrada de la memoria caché se pueda invalidar correctamente ymergeCacheMaxAge()
si la memoria caché es urgente y debe caducar.Si esto no se hace correctamente, uno de sus servicios personalizados de creación de migas de pan 'ganará', y las migas de pan para esa página específica se servirán en cada página, a todos los visitantes, para siempre.
fuente
Hay otra forma de lograr esto.
Y luego cree otro archivo en la carpeta de plantillas de su tema llamado "breadcrumb.html.twig" y coloque el siguiente código en este archivo:
Eso es. Ahora vacíe el caché y obtendrá una ruta de exploración con el título de la página actual como Inicio / Título de la página actual. Puede cambiar el separador reemplazando "/" con el deseado.
fuente
Debe usar un módulo contrib para agregar el título de la página actual a la ruta de exploración, como Migración de página actual: https://www.drupal.org/project/current_page_crumb
Si desea codificarlo manualmente, puede extraer el código de la carpeta src de ese módulo. Puede encontrar más detalles sobre las migas de pan Drupal 8 aquí: http://www.gregboggs.com/drupal8-breadcrumbs/
fuente
drush en current_page_crumb
no es tan malo.Había usado migas de pan personalizadas usando token en Drupal 7 y cuando ese módulo no estaba disponible para Drupal 8 terminé creando vistas para mis tipos de contenido individual usando los campos que originalmente eran los campos de token. Usándolo como un bloque e inhabilitando la ruta de exploración normal. Fue un poco más de trabajo que Custom Breadcrumbs pero funciona.
fuente