166 lines
4.8 KiB
ReStructuredText
166 lines
4.8 KiB
ReStructuredText
################################################################################
|
|
Defining Breadcrumbs
|
|
################################################################################
|
|
|
|
Breadcrumbs will usually correspond to actions or types of page. For each breadcrumb you specify a name, the breadcrumb title and the URL to link it to. Since these are likely to change dynamically, you do this in a closure, and you pass any variables you need into the closure.
|
|
|
|
The following examples should make it clear:
|
|
|
|
.. only:: html
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
|
|
================================================================================
|
|
Static pages
|
|
================================================================================
|
|
|
|
The most simple breadcrumb is probably going to be your homepage, which will look something like this:
|
|
|
|
.. code-block:: php
|
|
|
|
Breadcrumbs::register('home', function($breadcrumbs) {
|
|
$breadcrumbs->push('Home', route('home'));
|
|
});
|
|
|
|
As you can see, you simply call ``$breadcrumbs->push($title, $url)`` inside the closure.
|
|
|
|
For generating the URL, you can use any of the standard Laravel URL-generation methods, including:
|
|
|
|
- ``url('path/to/route')`` (``URL::to()``)
|
|
- ``secure_url('path/to/route')``
|
|
- ``route('routename')`` or ``route('routename', 'param')`` or ``route('routename', ['param1', 'param2'])`` (``URL::route()``)
|
|
- ``action('controller@action')`` (``URL::action()``)
|
|
- Or just pass a string URL (``'http://www.example.com/'``)
|
|
|
|
This example would be rendered like this:
|
|
|
|
.. raw:: html
|
|
|
|
<div class="highlight"><pre>
|
|
Home
|
|
</pre></div>
|
|
|
|
.. only:: not html
|
|
|
|
::
|
|
|
|
Home
|
|
|
|
|
|
.. _defining-parents:
|
|
|
|
================================================================================
|
|
Parent links
|
|
================================================================================
|
|
|
|
This is another static page, but this has a parent link before it:
|
|
|
|
.. code-block:: php
|
|
|
|
Breadcrumbs::register('blog', function($breadcrumbs) {
|
|
$breadcrumbs->parent('home');
|
|
$breadcrumbs->push('Blog', route('blog'));
|
|
});
|
|
|
|
It works by calling the closure for the ``home`` breadcrumb defined above.
|
|
|
|
It would be rendered like this:
|
|
|
|
.. raw:: html
|
|
|
|
<div class="highlight"><pre>
|
|
<a href="#">Home</a> / Blog
|
|
</pre></div>
|
|
|
|
.. only:: not html
|
|
|
|
::
|
|
|
|
Home > Blog
|
|
|
|
Note that the default template does not create a link for the last breadcrumb (the one for the current page), even when a URL is specified. You can override this by creating your own template - see :doc:`templates` for more details.
|
|
|
|
|
|
================================================================================
|
|
Dynamic titles and links
|
|
================================================================================
|
|
|
|
This is a dynamically generated page pulled from the database:
|
|
|
|
.. code-block:: php
|
|
|
|
Breadcrumbs::register('page', function($breadcrumbs, $page) {
|
|
$breadcrumbs->parent('blog');
|
|
$breadcrumbs->push($page->title, route('page', $page->id));
|
|
});
|
|
|
|
The ``$page`` variable would simply be passed in from the view:
|
|
|
|
.. code-block:: html+php
|
|
|
|
{!! Breadcrumbs::render('page', $page) !!}
|
|
|
|
It would be rendered like this:
|
|
|
|
.. raw:: html
|
|
|
|
<div class="highlight"><pre>
|
|
<a href="#">Home</a> / <a href="#">Blog</a> / Page Title
|
|
</pre></div>
|
|
|
|
.. only:: not html
|
|
|
|
::
|
|
|
|
Home > Blog > Page Title
|
|
|
|
**Tip:** You can pass multiple parameters if necessary.
|
|
|
|
|
|
================================================================================
|
|
Nested categories
|
|
================================================================================
|
|
|
|
Finally if you have nested categories or other special requirements, you can call ``$breadcrumbs->push()`` multiple times:
|
|
|
|
.. code-block:: php
|
|
|
|
Breadcrumbs::register('category', function($breadcrumbs, $category) {
|
|
$breadcrumbs->parent('blog');
|
|
|
|
foreach ($category->ancestors as $ancestor) {
|
|
$breadcrumbs->push($ancestor->title, route('category', $ancestor->id));
|
|
}
|
|
|
|
$breadcrumbs->push($category->title, route('category', $category->id));
|
|
});
|
|
|
|
Alternatively you could make a recursive function such as this:
|
|
|
|
.. code-block:: php
|
|
|
|
Breadcrumbs::register('category', function($breadcrumbs, $category) {
|
|
if ($category->parent)
|
|
$breadcrumbs->parent('category', $category->parent);
|
|
else
|
|
$breadcrumbs->parent('blog');
|
|
|
|
$breadcrumbs->push($category->title, route('category', $category->slug));
|
|
});
|
|
|
|
Both would be rendered like this:
|
|
|
|
.. raw:: html
|
|
|
|
<div class="highlight"><pre>
|
|
<a href="#">Home</a> / <a href="#">Blog</a> / <a href="#">Grandparent Category</a> / <a href="#">Parent Category</a> / Category Title
|
|
</pre></div>
|
|
|
|
.. only:: not html
|
|
|
|
::
|
|
|
|
Home > Blog > Grandparent Category > Parent Category > Category Title
|