Craft CMS: Breadcrumb Macro
Grad mal Abstract aufgemacht und das Design angeschaut… Breadcrumb, meh! Ist im Design immer schnell gemacht aber aus Erfahrung kann ich nur sagen, dass es eher Pain ist und schnell recht komplex werden kann um alle Anforderungen abzudecken. Also kurz das Kleinhirn angestrengt was man da so machen könnte. Macro, YO!
Das Macro
Ob es die letzte Ausbaustufe ist würde ich jetzt nicht mit Ja beantworten aber ich werde den Post hier hoffentlich updaten falls es was zum updaten gibt.
{# @var craft \craft\web\twig\variables\CraftVariable #}
{# @var entry \craft\elements\Entry #}
{#
Breadcrumb Macro
------------------------------------------------------------
{% import '_partials/macros/_macro-breadcrumb.html' as macroBreadcrumb %}
{{ macroBreadcrumb.breadcrumb([{}]) }}
#}
{% macro breadcrumb(breadCrumbLinks, separator) %}
{% set listItems = [] %}
{# -- Check if breadCrumbLink is an Array -- #}
{% if breadCrumbLinks is iterable %}
{# -- Loop over the breadCrumbLinks -- #}
{% for item in breadCrumbLinks %}
{# -- Set link var -- #}
{% set link = '' %}
{# -- Check if item Title is existing -- #}
{% if item.title ?? null %}
{# -- Set Separator -- #}
{% set separator = separator | default(' · ') %}
{% if loop.last %}
{# -- If loop last we need no separator -- #}
{% set separator = '' %}
{% endif %}
{# -- Check if item Link is existing and item linked is true -- #}
{% if item.link ?? null and item.linked %}
{# -- Set Link Markup -- #}
{% set link %}
{% spaceless %}
<li class="m-breadcrumb__item">
<a href="{{ item.link }}" class="m-breadcrumb__link">
{{- item.title -}}
</a>{{- separator | raw -}}
</li>
{% endspaceless %}
{% endset %}
{% else %}
{# -- Set Plain Text Markup -- #}
{% set link = '<li>' ~ item.title ~ separator ~ '</li>' %}
{% endif %}
{% endif %}
{# -- Merge all Items into listItems -- #}
{% set listItems = listItems | merge([link]) %}
{% endfor %}
{% endif %}
{# -- Set Output Markup -- #}
{% set output %}
<ul>
{% for item in listItems %}
{{ item | raw }}
{% endfor %}
</ul>
{% endset %}
{# -- Output -- #}
{% return output %}
{% endmacro %}
Macro aufrufen
Das ganze müssen wir jetzt nur noch da aufrufen wo wir es brauchen. Am Ende müssen wir da natürlich dynamischen Content reinpacken wo es gebraucht wird aber das würde das hier nur unnötig verkomplizieren. Deswegen mal mit Dummy Content.
{# -- Macros -- #}
{% import '_partials/macros/_macro-breadcrumb.html' as macroBreadcrumb %}
{% set breadCrumbLinks = [
{
title: 'Home',
link: 'http://google.com',
linked: true
},
{
title: 'Blog',
link: 'http://google.com',
linked: true
},
{
title: 'Category',
link: 'http://google.com',
linked: true },
{
title: 'Title',
linked: false
}
] %}
{{ macroBreadcrumb.breadcrumb(breadCrumbLinks) }}
Im Grunde include wir zuerst einmal unser Macro. Im nächsten Schritt legen wir eine Variable an mit den Breadcrumb Einträgen. Es gibt drei Option:
- link: Einfach die Url wo das ganze hinlinken soll
- title: Das was dann als Text erscheinen wird für den jeweiligen Link
- linked: Ob es verlinkt werden soll oder einfach als Plaintext ausgegeben werden soll
Jetzt müssen wir nur noch das Macro aufrufen mit unserer Variable und schon gehts. CSS schreibt ihr selber!
Requirements
Das ganze sollte nahe zu identisch für Craft CMS 2 auch gehen aber wir machen hier den neuen Scheiß!
- prev article Craft CMS: Control your tracking codes from the control panel
- next article Nichts los hier…
Maybe interesting…
-
Web Apps für die ich zahle I — Strava
- P. 2013/01/12
- C. Reviews
-
Make Better Apps – die make it better Familia bekommt zuwachs!
- P. 2010/07/01
- C. Blogging
-
Stylespion sucht den Superschreibtisch
- P. 2009/03/23
- C. Blogging
-
Apple iPad – Es zu nutzen ist einfach toll!
- P. 2011/03/04
- C. Reviews
-
Frohe Weihnachten und nen guten Rutsch ins Neue…
- P. 2009/12/18
- C. Blogging
-
MacBook Pro la(t/m)e 2016
- P. 2016/10/28
- C. Gadgets