prolix/breadcrumbs-bundle

针对 Symfony2 的小型面包屑组件

安装: 16

依赖者: 0

建议者: 0

安全性: 0

星星: 0

关注者: 1

分支: 68

类型:symfony-bundle

1.4.9 2019-12-17 13:08 UTC

This package is auto-updated.

Last update: 2024-09-17 23:42:44 UTC


README

该项目不再维护。如果您在使用 Symfony >= 4.3,您可能需要使用 此分支

安装

  1. 如果尚未配置,请配置您的应用程序模板。例如

    # app/config/config.yml (Symfony <=3)
    framework:
        templating:
            engines: ['twig']
    
    # config/packages/framework.yaml (Symfony 4)
    templating:
        engines: ['twig']
  2. 使用 Composer 安装此组件

    composer require whiteoctober/breadcrumbs-bundle
  3. 将此组件添加到您的应用程序内核

    // app/AppKernel.php
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle(),
            // ...
        );
    }

    如果您使用的是 Symfony 4,此步骤将由 Symfony Flex 自动完成。

  4. 在您的配置中配置组件

    # app/config/config.yml
    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()]);
}

对于 Symfony 4,不要通过 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.yml 或类似文件中覆盖

# app/config/config.yml
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:       'WhiteOctoberBreadcrumbsBundle::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 文件并将其放置在 app/Resources/WhiteOctoberBreadcrumbsBundle/views 中来覆盖组件使用的模板,然后按需自定义。有关更多信息,请参阅覆盖组件模板部分。

  2. 使用 viewTemplate 配置参数

    {{ wo_render_breadcrumbs({ viewTemplate: "YourOwnBundle::yourBreadcrumbs.html.twig" }) }}

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

贡献

我们欢迎对该项目的贡献,包括拉取请求和问题(以及现有问题的讨论)。

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

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