Navigation Links
Admin → Settings → Client Portal → Navigation Links
The nav link builder lets you add custom links to the portal's top navigation bar. Links are stored as JSON in the portal_nav_links setting and rendered server-side on every portal page.
Each Link Has
| Property | Description |
|---|---|
| Label | The visible text shown in the nav bar |
| URL | Absolute URL (https://...) or relative path (/contact) |
| Open in new tab | If checked, the link opens with target="_blank" rel="noopener" |
Adding a Link
- Click Add Link in the nav link builder.
- A new row appears with empty Label and URL fields (powered by Alpine.js — no page reload).
- Enter the label and URL.
- Check "Open in new tab" if the link points to an external site.
- Click Save Links.
Reordering Links
Drag the handle icon (≡) on the left of any row to reorder. The order in this list is the order links appear in the nav bar. Save after reordering.
[!TIP] Keep the nav concise — more than 6 custom links will overflow on mobile viewports. Use a footer link or a "More" dropdown for secondary links.
Auto-Injected Links
The following nav links are automatically injected by Commerce when the corresponding section is enabled. Do not add them manually:
| Section setting | Auto-injected nav label |
|---|---|
portal_show_kb |
Knowledge Base |
portal_show_faq |
FAQ |
portal_show_announcements |
Announcements |
portal_show_status |
Status |
If a section is disabled, its auto-injected link is also hidden. Custom nav links are always shown regardless of section settings.
[!IMPORTANT] Adding a manual nav link for "Knowledge Base" while
portal_show_kbis also enabled causes the link to appear twice. Use the section toggle for auto-injected links — don't duplicate them.
Portal Footer
The same custom nav links also render in the portal footer alongside the company contact details. There is no separate footer link configuration — the nav link list is shared.
Storage Format
Links are stored as a JSON array in the portal_nav_links key of the settings table:
[
{ "label": "Blog", "url": "https://blog.example.com", "new_tab": true },
{ "label": "Contact", "url": "/contact", "new_tab": false }
]
If you need to bulk-import links (e.g. during a migration), you can write directly to this setting via:
php artisan tinker
Setting::set('portal_nav_links', json_encode([...]));