Introduce
During the development of the web, we often focus on the difficult and large features first, then the “beard” parts like breadcrumb, favicon, … Breadcrumbs is one of the things we do not think until you need it. But creating the breadcrumb as you like and the right path is not always simple. Fortunately, the author davejamesmiller has brought to the Laravel community a very “useful” package: Laravel Breadcrumbs
Setting
Use the command through the composer, guys: composer require davejamesmiller/laravel-breadcrumbs:5.x
How to use?
Definition of Breadcrumbs
Suppose your website has navigation bar with elements:
- Home
- About
- Blog
- Blog> Category
- Blog> Category> Post
We need to create breadcrumbs.php
file in the routes
folder with content like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">// Home</span> Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'home'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'Home'</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'home'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Home > About</span> Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'about'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token keyword">parent</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'home'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'About'</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'about'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Home > Blog</span> Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'blog'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token keyword">parent</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'home'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'Blog'</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'blog'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Home > Blog > [Category]</span> Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'category'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">,</span> <span class="token variable">$category</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token keyword">parent</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'blog'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token variable">$category</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'category'</span> <span class="token punctuation">,</span> <span class="token variable">$category</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Home > Blog > [Category] > [Post]</span> Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'post'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">,</span> <span class="token variable">$post</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token keyword">parent</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'category'</span> <span class="token punctuation">,</span> <span class="token variable">$post</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">category</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token variable">$post</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'post'</span> <span class="token punctuation">,</span> <span class="token variable">$post</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> </span> |
Explain
From the above code, you can also understand that: We use the Breadcrumbs
facade to define a breadcrumbs, assign the parent, assign the URL.
- To define a breadcrumbs component:
1 2 3 4 | Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'home'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'Home'</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'home'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In that push
will assign the URL to breadcrumbs through the router or with the case
1 2 3 4 5 6 | <span class="token comment">// Home > Blog > [Category]</span> Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'category'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">,</span> <span class="token variable">$category</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token keyword">parent</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'blog'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token variable">$category</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'category'</span> <span class="token punctuation">,</span> <span class="token variable">$category</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Note We have many ways to generate URLs, not necessarily using route()
url('path/to/route')
(URL::to()
)secure_url('path/to/route')
route('routename')
orroute('routename', 'param')
orroute('routename', ['param1', 'param2'])
(URL::route()
)action(' [email protected] ')
(URL::action()
)- Or maybe set the hard URL (
'http://www.example.com/'
)
Render
To render out of view you just need to use {{ Breadcrumbs::render('tên_breadcrumbs_đã_định_nghĩa') }}
inside the Blade
For example, you want to render outside of the 'home'
component view:
1 2 | {{ Breadcrumbs::render('home') }} |
Out put:
Home
Or an ingredient that includes a father
1 2 | {{ Breadcrumbs::render('blog') }} |
Output:
Home / Blog
In case the parameter needs to pass: This is a dynamically generated page pulled from the database:
1 2 3 4 5 | Breadcrumbs <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'post'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$trail</span> <span class="token punctuation">,</span> <span class="token variable">$post</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token keyword">parent</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'blog'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$trail</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token variable">$post</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">,</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'post'</span> <span class="token punctuation">,</span> <span class="token variable">$post</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 | {{ Breadcrumbs::render('post', $post) }} |
Output:
Home / Blog / Post Title
Some note
- By default the package will use the style of Bootstrap 4, we can change the style for breadcrumbs by: First run the command:
1 2 | php artisan vendor:publish --provider <span class="token operator">=</span> <span class="token string">"DaveJamesMillerBreadcrumbsBreadcrumbsServiceProvider"</span> |
Then open the config/breadcrumbs.php
file and edit the line:
1 2 | <span class="token single-quoted-string string">'view'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'breadcrumbs::bootstrap4'</span> <span class="token punctuation">,</span> |
breadcrumbs::bootstrap4
– Bootstrap 4breadcrumbs::bootstrap3
– Bootstrap 3breadcrumbs::bootstrap2
– Bootstrap 2breadcrumbs::bulma
– Bulmabreadcrumbs::foundation6
– Foundation 6breadcrumbs::materialize
– Materializebreadcrumbs::uikit
– UIkitbreadcrumbs::json-ld
– JSON-LD Structured Data- Or use your own style:
partials.breadcrumbs
- By default, the final element will not be assigned a link, you can customize it by adding a bit of logic outside the Blade
- Create a blade file with the content:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @ <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">count</span> <span class="token punctuation">(</span> <span class="token variable">$breadcrumbs</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator"><</span> ol <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"breadcrumb"</span> <span class="token operator">></span> @ <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$breadcrumbs</span> <span class="token keyword">as</span> <span class="token variable">$breadcrumb</span> <span class="token punctuation">)</span> @ <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$breadcrumb</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">url</span> <span class="token operator">&&</span> <span class="token operator">!</span> <span class="token variable">$loop</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">last</span> <span class="token punctuation">)</span> <span class="token operator"><</span> li <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"breadcrumb-item"</span> <span class="token operator">></span> <span class="token operator"><</span> a href <span class="token operator">=</span> <span class="token double-quoted-string string">"{{ <span class="token interpolation"><span class="token variable">$breadcrumb</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">url</span></span> }}"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token variable">$breadcrumb</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> a <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> li <span class="token operator">></span> @ <span class="token keyword">else</span> <span class="token operator"><</span> li <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"breadcrumb-item active"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token variable">$breadcrumb</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> li <span class="token operator">></span> @ <span class="token keyword">endif</span> @ <span class="token keyword">endforeach</span> <span class="token operator"><</span> <span class="token operator">/</span> ol <span class="token operator">></span> @ <span class="token keyword">endif</span> |
Then change to the value of
1 2 | <span class="token single-quoted-string string">'view'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'breadcrumbs::path.to.custom_breadcrumb'</span> <span class="token punctuation">,</span> |
Conclusion
Laravel Breadcrumbs is an extremely useful package, we can reduce a lot of logic outside the Blade by using it, above are some basic features, if you want to understand and customize stronger than you can refer here