Add blueprints and a navigation bar snippet for generating a primary navigation bar of pages.

This commit is contained in:
2026-04-17 04:07:28 +10:00
parent 525e5bfb64
commit e8c5e32768
4 changed files with 123 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
type: fields
fields:
linkLocation:
label: Link Location
type: select
options:
type: query
query: site.linkLocations.toStructure
text: "{{ item.description }}"
value: "{{ item.location }}"
linkIndex:
label: Link Position
type: number
min: 1
default: 10
linkText:
label: Link Text
help: Custom link text to use instead of the title.
type: text
linkIcon:
label: Link Icon
help: Font Awesome icon that is used for the link text.
type: text

View File

@@ -0,0 +1,15 @@
type: fields
fields:
linkLocations:
label: Link Locations
type: structure
fields:
description:
label: Location Description
type: text
help: A friendly description for selecting this location on pages.
location:
label: Location Key
type: text
help: This is what is used when finding links for this location.

View File

@@ -21,6 +21,13 @@ Kirby::plugin(
], ],
], ],
], ],
"blueprints" => [
"fields/link-locations" => __DIR__ . "/blueprints/fields/link-locations.yml",
"fields/link-location" => __DIR__ . "/blueprints/fields/link-location.yml",
],
"snippets" => [
"navbar/primary" => __DIR__ . "/snippets/navbar/primary.php",
],
"hooks" => [ "hooks" => [
/** /**
* To add this hook to a plugin, change the option() call to use the plugins name. * To add this hook to a plugin, change the option() call to use the plugins name.

View File

@@ -0,0 +1,77 @@
<ul class="navbar-nav me-auto">
<?php foreach ($site->getLinkList("primary") as $link) : ?>
<?php if (isset($link["dropdown"])) : ?>
<?php ksort($link["dropdown"], SORT_NUMERIC) ?>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle<?= (isset($link["active"]) and $link["active"]) ? " active" : "" ?><?= (isset($link["disabled"]) and $link["disabled"]) ? " disabled" : "" ?>"
href="#"
data-bs-toggle="dropdown"
title="<?= $link["aria"] ?>"
aria-label="<?= $link["aria"] ?>"
>
<?php if ($link["icon"]) : ?>
<?= $link["icon"] ?>
<span class="d-md-none">
<?php else : ?>
<span>
<?php endif ?>
<?= $link["text"] ?>
</span>
</a>
<ul class="dropdown-menu">
<?php foreach ($link["dropdown"] as $link) : ?>
<li>
<?php if (isset($link["divider"])) : ?>
<hr class="dropdown-divider">
<?php else : ?>
<a
class="dropdown-item<?= (isset($link["active"]) and $link["active"]) ? " active" : "" ?><?= (isset($link["disabled"]) and $link["disabled"]) ? " disabled" : "" ?>"
href="<?= $link["url"] ?>"
<?= isset($link["target"]) ? " target=\"{$link["target"]}\"" : "" ?>
title="<?= $link["aria"] ?>"
aria-label="<?= $link["aria"] ?>"
>
<?php if ($link["icon"]) : ?>
<?= $link["icon"] ?>
<span class="d-md-none">
<?php else : ?>
<span>
<?php endif ?>
<?= $link["text"] ?>
</span>
</a>
<?php endif ?>
</li>
<?php endforeach ?>
</ul>
</li>
<?php else : ?>
<li class="nav-item">
<a
class="nav-link<?= (isset($link["active"]) and $link["active"]) ? " active" : "" ?><?= (isset($link["disabled"]) and $link["disabled"]) ? " disabled" : "" ?>"
href="<?= $link["url"] ?>"
<?= isset($link["target"]) ? " target=\"{$link["target"]}\"" : "" ?>
title="<?= $link["aria"] ?>"
aria-label="<?= $link["aria"] ?>"
>
<?php if ($link["icon"]) : ?>
<?= $link["icon"] ?>
<span class="d-md-none">
<?php else : ?>
<span>
<?php endif ?>
<?= $link["text"] ?>
</span>
</a>
</li>
<?php endif ?>
<?php endforeach ?>
</ul>