跳转到主要内容
你行网

Main navigation

  • 首页
  • Drupal
  • 编程与开发
  • 数据库
  • 操作系统与应用
  • 服务器与运维
  • 社区
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

评论

文章标签

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

相关文章

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

友情链接 网站地图 版权信息 联系我们 网址导航 社区

Copyright © 2019 - 2021 你行网 版权所有  粤ICP备19072650号