mhujer/breadcrumbs-bundle

Symfony 的面包屑组件

安装次数: 1,262,581

依赖: 4

建议者: 2

安全: 0

星标: 65

关注者: 1

分支: 68

开放问题: 6

类型:symfony-bundle

1.5.10 2024-09-16 08:21 UTC

This package is auto-updated.

Last update: 2024-09-16 08:22:26 UTC


README

这是针对较新 Symfony 版本的 whiteoctober/BreadcrumbsBundle 的分支。请参阅 whiteoctober/BreadcrumbsBundle#106

安装

  1. 使用 Composer 安装此组件

    composer require mhujer/breadcrumbs-bundle

如果你使用 Symfony Flex,以下步骤将自动执行。

  1. 通过将组件添加到项目 config/bundles.php 文件中注册的组件列表中,启用组件
// config/bundles.php

return [
    // ...
    WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle::class => ['all' => true],
];
  1. config/packages/white_october_breadcrumbs.yaml 中配置组件

    # config/packages/white_october_breadcrumbs.yaml
    white_october_breadcrumbs: ~

这是基本配置的全部内容。对于更多选项,请查看 配置 部分。

用法

在你的应用程序控制器方法中

public function yourAction(User $user)
{
    $breadcrumbs = $this->get("white_october_breadcrumbs");
    
    // Simple example
    $breadcrumbs->addItem("Home", $this->get("router")->generate("index"));

    // Example without URL
    $breadcrumbs->addItem("Some text without link");

    // Example with parameter injected into translation "user.profile"
    $breadcrumbs->addItem($txt, $url, ["%user%" => $user->getName()]);
}

最好不通过 get 获取服务。相反,请使用 依赖注入

use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;

class YourController extends AbstractController
{
    public function yourAction(Breadcrumbs $breadcrumbs)
    {
      // ...
    }
}

然后,在你的模板中

{{ wo_render_breadcrumbs() }}

面包屑集合中的最后一个项目将自动以纯文本形式渲染,而不是 <a>...</a> 标签。

addItem() 方法将项目添加到面包屑集合的 末尾。您可以使用 prependItem() 方法将项目添加到面包屑集合的 开头。当与层次化数据(例如 Doctrine Nested-Set)一起使用时,这非常有用。此示例使用产品目录中的类别

public function yourAction(Category $category)
{
    $breadcrumbs = $this->get("white_october_breadcrumbs");

    $node = $category;

    while ($node) {
        $breadcrumbs->prependItem($node->getName(), "<category URL>");

        $node = $node->getParent();
    }
}

如果您不想手动生成 URL,您可以通过使用 addRouteItem()prependRouteItem() 方法仅传递路由名称和任何所需的参数来轻松添加面包屑项

public function yourAction()
{
    $breadcrumbs = $this->get("white_october_breadcrumbs");
    
    // Pass "_demo" route name without any parameters
    $breadcrumbs->addRouteItem("Demo", "_demo");

    // Pass "_demo_hello" route name with route parameters
    $breadcrumbs->addRouteItem("Hello Breadcrumbs", "_demo_hello", [
        'name' => 'Breadcrumbs',
    ]);

    // Add "homepage" route link at the start of the breadcrumbs
    $breadcrumbs->prependRouteItem("Home", "homepage");
}

配置

以下 默认 参数可以在您的 config/packages/white_october_breadcrumbs.yaml 中覆盖

# config/packages/white_october_breadcrumbs.yaml
white_october_breadcrumbs:
    separator:          '/'
    separatorClass:     'separator'
    listId:             'wo-breadcrumbs'
    listClass:          'breadcrumb'
    itemClass:          ''
    linkRel:            ''
    locale:             ~ # defaults to null, so the default locale is used
    translation_domain: ~ # defaults to null, so the default domain is used
    viewTemplate:       '@WhiteOctoberBreadcrumbs/microdata.html.twig'

这些也可以在渲染面包屑时作为参数传递给视图 - 例如

{{ wo_render_breadcrumbs({separator: '>', listId: 'breadcrumbs'}) }}

注意: 如果您需要在同一页面上使用多个面包屑集合,您可以使用命名空间。默认情况下,面包屑使用 default 命名空间,但您可以添加更多。要向您的自定义命名空间添加面包屑,请使用 addNamespaceItem / prependNamespaceItemaddNamespaceRouteItem / prependNamespaceRouteItem 方法,例如

public function yourAction(User $user)
{
    $breadcrumbs = $this->get("white_october_breadcrumbs");

    // Simple example
    $breadcrumbs->prependNamespaceItem("subsection", "Home", $this->get("router")->generate("index"));

    // Example without URL
    $breadcrumbs->addNamespaceItem("subsection", "Some text without link");

    // Example with parameter injected into translation "user.profile"
    $breadcrumbs->addNamespaceItem("subsection", $txt, $url, ["%user%" => $user->getName()]);
    
    // Example with route name with required parameters
    $breadcrumbs->addNamespaceRouteItem("subsection", $user->getName(), "user_show", ["id" => $user->getId()]);
}

然后,为了在模板中渲染 subsection 面包屑,请在选项中指定此命名空间

{{ wo_render_breadcrumbs({namespace: "subsection"}) }}

高级用法

您可以一次添加整个对象数组

$breadcrumbs->addObjectArray(array $objects, $text, $url, $translationParameters);
objects:            array of objects
text:               name of object property or closure
url:                name of URL property or closure

示例

$that = $this;
$breadcrumbs->addObjectArray($selectedPath, "name", function($object) use ($that) {
    return $that->generateUrl('_object_index', ['slug' => $object->getSlug()]);
});

您还可以添加树路径

$breadcrumbs->addObjectTree($object, $text, $url = "", $parent = 'parent', array $translationParameters = [], $firstPosition = -1)
object:             object to start with
text:               name of object property or closure
url:                name of URL property or closure
parent:             name of parent property or closure
firstPosition:      position to start inserting items (-1 = determine automatically)

注意: 您可以使用 addNamespaceObjectArrayaddNamespaceObjectTree 分别处理同一页面上多个面包屑。

覆盖模板

有三种方法可以做到这一点。

  1. 您可以通过复制 Resources/views/microdata.html.twig 文件并将其放置到 <your-project>/templates/bundles/WhiteOctoberBreadcrumbsBundle 中来覆盖组件使用的模板,然后根据需要进行自定义。有关更多信息,请参阅 覆盖组件模板 文档部分。

  2. 使用 viewTemplate 配置参数

    {{ wo_render_breadcrumbs({ viewTemplate: "@WhiteOctoberBreadcrumbs/yourBreadcrumbs.html.twig" }) }}

注意:如果您想使用 JSON-LD 格式,已存在一个模板在 @WhiteOctoberBreadcrumbs/json-ld.html.twig。只需将此模板设置为 viewTemplate 的值,无论是在您的 Twig 函数调用中(参见上面的步骤 2)还是在您的包 配置 中。

贡献

我们欢迎对这个项目做出贡献,包括拉取请求、问题和(对现有问题的讨论)。

如果您想贡献代码但不确定从哪里开始,可以查看 问题列表。如果您是首次作为代码贡献者,GitHub 的关于 项目分叉 的指南可能会有所帮助。

所有贡献者(无论是贡献代码、参与问题讨论还是以其他方式参与)都必须遵守我们的 行为准则