跳转到主要内容
你行网

Main navigation

  • 首页
  • 文章
  • 教程
  • 视频
  • 下载
  • 社区
  • 网站导航
User account menu
  • 登录

面包屑

  1. 首页

如何管理 Drupal 8 模块中的面包屑

由 hrs, 22 八月, 2023

概述
在本教程中,我们将介绍如何在 Drupal 8 模块中设置面包屑。在 Drupal 7 中,我们使用 drupal_set_breadcrumb()。在 Drupal 8 中,删除了 drupal_set_breadcrumb(),并使用 Breadcrumb 服务来管理面包屑。只需几个步骤即可做到这一点:

声明您的服务
定义一个实现 BreadcrumbBuilderInterface 的类
本教程假设您有一个可用的 Drupal 8 模块。

Drupal 核心面包屑
值得注意的是,Drupal 面包屑系统分析通过模块创建的每个路由,根据mymodule.routing.yml中建立的父子关系创建面包屑路径。因此,只需仔细分配mymodule.routing.yml文件的“path”条目中的关系,就可以对无限级别的 breabcrumb 进行排序。
以下代码与 Drupal 的自动面包屑管理交互。

声明您的服务
您的服务在名为mymodule.services.yml的文件中声明。该文件应立即放置在模块目录中,例如...modules/custom/mymodule/mymodule.services.yml。最低要求的内容包括:

文件:/mymodule/mymodule.services.yml

 

services:
mymodule.breadcrumb:
 # The namespace + classname from your BreadcrumbBuilderInterface class
  class: Drupal\mymodule\Breadcrumb\myBreadcrumbBuilder
  
 # Priority determines the order in which Breadcrumb services run.
 tags:
   - { name: breadcrumb_builder, priority: 100 }

 

定义一个类实现 BreadcrumbBuilderInterface

创建一个与您的类同名的 .php 文件,例如 myBreadcrumbBuilder.php

将文件放在 /src/Breadcrumb 下的模块中,例如 ...modules/custom/mymodule/src/Breadcrumb/myBreadcrumbBuilder.php

定义一个命名空间。此命名空间必须与您在mymodule.services.yml中用于类的命名空间相匹配。

使用命名空间。您至少需要:

使用 Drupal\Core\Breadcrumb\Breadcrumb;

使用 Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;

使用 Drupal\Core\Routing\RouteMatchInterface;

使用Drupal\Core\Link;

定义您的班级名称。该名称应与文件名匹配,并且必须与mymodule.services.yml中命名空间后面的内容匹配。例如:

 

class myBreadcrumbBuilder implements BreadcrumbBuilderInterface {

   

创建一个函数 apply() 方法来确定何时使用您的类。下面的例子。

创建一个函数 build() 方法来确定您的类将设置哪些面包屑。下面的例子。

文件:/mymodule/src/Breadcrumb/myBreadcrumbBuilder.php

 

<?php
// Define the namespace for your class
namespace Drupal\mymodule\Breadcrumb;

// Use namespaces of classes that you need
use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Link ;

// Define your class and implement BreadcrumbBuilderInterface 
class myBreadcrumbBuilder implements BreadcrumbBuilderInterface {
 /**
  * {@inheritdoc}
  */
 public function applies(RouteMatchInterface $route_match) {
   // You can put any logic here. You must return a BOOLEAN TRUE or FALSE.
   //-----[ BEGIN example ]-----
   // Determine if the current page is a node page 
   $node = $route_match->getParameter('node');
   if ($node) {
     // You can do additional checks here for the node type, etc...
     return TRUE;
   }
   //-----[ END example ]-----
   // Still here? This does not apply.
   return FALSE;
}

 /**
  * {@inheritdoc}
  */
 public function build(RouteMatchInterface $route_match) {
   // Define a new object of type Breadcrumb
   $breadcrumb = new Breadcrumb();
   // You can put any logic here to build out your breadcrumb.
   //-----[ BEGIN example ]-----
   // Add a link to the homepage as our first crumb.
   $breadcrumb->addLink(Link::createFromRoute('Home', '<front>'));

   // Get the node for the current page
   $node = $route_match->getParameter('node');
   // Special handling based on node type aka bundle.
   // NOTE use of the Link class.
   switch ($node->bundle()) {
     case 'project':
       $breadcrumb->addLink(Link::createFromRoute('Project List Page', 'view.article.page_1'));
       break;

     case 'article':
       $breadcrumb->addLink(Link::createFromRoute('Article List Page', 'view.articles.page_1'));
       break;
   }
   //-----[ END example ]-----

   // Don't forget to add cache control by a route.
   // Otherwise all pages will have the same breadcrumb.
   $breadcrumb->addCacheContexts(['route']);

   // Return object of type breadcrumb.
   return $breadcrumb;
 }

}

标签

  • breadcrumb
  • 登录或注册以发表评论

评论

相关文章

如何使用 Drupal 8 中的 Easy Breadcrumb 模块创建面包屑导航

文章标签

CSS
Excel
ubuntu
php
vim
五笔
Linux
HTML
command
drupal 7
composer
centos
Mysql
drupal 8
模块(module)
drush
VPN
JavaSrcipt
apache
drupal 9
英语
Drupal
SEO
nerdtree
network
果树种植
surround
drupal10
主题(theme)
phpmyadmin
ssh
yum
权限
二进制
声音
ssl
selinux
HTML5
用户
Dreamweaver
password
flameshot
颜色
翻译
uploadprogress
DDEV
视图(views)
firewalld
gzip
快捷键
kernel
xdebug
错误
ckeditor
mbstring
C语言
源地址
简介
电脑基础
certbot
php扩展
git
apt
压缩解压
表单
httpd
电子秤
邮件验证
breadcrumb
AI
superfish
WireGuard
diff
重定向
网站备份
tagclouds
摄影
docker
java
adsense
drupal9
csharp
短信验证
simple_adsense
电脑技巧
算法
RSS
youtube
版本号
JavaScript
badblocks
端口
cookie
VUE
网站运营
计算机基础
form
gimp
mod_expires 模块
zip
nginx
http验证
重定向,301
netstat
curl
赚钱
dns
RFID
input
maven
ip
drupal 11
标签优化
drupal11
npm
哈希值
字段
更多
RSS源
本站由阿里云强力驱动,幸运券优惠链接
Copyright © 2019 - 2021 你行网 版权所有  粤ICP备19072650号