prolix / breadcrumbs-bundle
针对 Symfony2 的小型面包屑组件
Requires
- php: >=5.3.2
- symfony/framework-bundle: ~2.0|~3.0|^4.0|^5.0
- symfony/templating: ~2.7|~3.0|^4.0|^5.0
Requires (Dev)
- phpunit/phpunit: ^8.5
- symfony/browser-kit: ~2.7|~3.0|^4.0|^5.0
README
该项目不再维护。如果您在使用 Symfony >= 4.3,您可能需要使用 此分支。
安装
-
如果尚未配置,请配置您的应用程序模板。例如
# app/config/config.yml (Symfony <=3) framework: templating: engines: ['twig'] # config/packages/framework.yaml (Symfony 4) templating: engines: ['twig']
-
使用 Composer 安装此组件
composer require whiteoctober/breadcrumbs-bundle
-
将此组件添加到您的应用程序内核
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle(), // ... ); }
如果您使用的是 Symfony 4,此步骤将由 Symfony Flex 自动完成。
-
在您的配置中配置组件
# 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
/prependNamespaceItem
或addNamespaceRouteItem
/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)
注意: 您可以使用
addNamespaceObjectArray
和addNamespaceObjectTree
分别处理同一页面上多个面包屑。
覆盖模板
有两种方法可以做到这一点。
-
您可以通过复制组件中的
Resources/views/microdata.html.twig
文件并将其放置在app/Resources/WhiteOctoberBreadcrumbsBundle/views
中来覆盖组件使用的模板,然后按需自定义。有关更多信息,请参阅覆盖组件模板部分。 -
使用
viewTemplate
配置参数{{ wo_render_breadcrumbs({ viewTemplate: "YourOwnBundle::yourBreadcrumbs.html.twig" }) }}
注意:如果您想使用JSON-LD格式,已经在
WhiteOctoberBreadcrumbsBundle::json-ld.html.twig
中有一个现有的模板。只需将此模板设置为viewTemplate
的值,无论是在您的Twig函数调用中(见上方的步骤2)还是在您的包配置中。
贡献
我们欢迎对该项目的贡献,包括拉取请求和问题(以及现有问题的讨论)。
如果您想贡献代码但不确定从哪里开始,请查看问题列表。如果您是首次贡献代码,Github关于分叉项目的指南可能会有所帮助。
所有贡献者(无论是贡献代码、参与问题讨论还是以其他方式参与)都必须遵守我们的行为准则。