License Key Required
No license key entered.
Enter or update your key with php artisan realestate:license <key>,
or purchase one at scriptgain.com.
Settings Tabs
components.settings-tabs
Compiled PHP
What Blade turns your template into. This is what the syntax check parses.
Loading…
Available Variables And Components
A guide to what this template can use, derived from the shipped source. Click any item to insert it at your cursor. It is a helpful reference, not a runtime guarantee.
Always Available
- Validation error bag. Always present. Pairs with @error('field').
In This Template
- Group Title.
- Icon.
- Label.
- Pattern.
- Route Name.
- The page title set by the controller.
Drop any of these in. Click to insert the opening tag at your cursor.
General
Admin Panel
Layouts
Records
Site (Public)
Common Blade
- Print a value, safely escaped. The default choice.
- Print raw HTML. Only for content you trust.
- Show something conditionally.
- Loop over a collection.
- Loop, with a fallback when the collection is empty.
- Show a validation message for a field.
- A small block of PHP. Never on line 1. Keep logic out of templates.
- A comment that never reaches the browser.
Civic Helpers
- Build a URL to a named route, e.g. a department page.
- Link to a single news post.
- Turn a stored upload path into a public URL.
- A cache-busted URL for a bundled asset.
- Read a config value, e.g. the site width class.
- Build an absolute URL to a path.
No History Yet
Every save, revert, and reset of this template is recorded here, with a one-click way back to any of them.
The Template That Shipped With The Product
Read only. This is what Reset To Default puts back.
@php
use Illuminate\Support\Facades\Route as RouteFacade;
$isAdmin = auth()->check() && auth()->user()->isAdmin();
// Logically grouped + ordered. Storage (BackupMGR) and Email (-MGR panels) both
// listed; each renders only where its route exists, so one component fits the
// whole fleet. [label, icon, route, active-pattern].
$groups = [
['Site', [
['Site Identity', 'building', 'settings.site.edit', 'settings.site.*'],
['SEO', 'search', 'settings.seo.edit', 'settings.seo.edit'],
['SEO Health', 'shield', 'settings.seo.health', 'settings.seo.health'],
]],
['Preferences', [
['General', 'settings', 'settings.general.edit', 'settings.general.*'],
['Branding', 'edit', 'settings.branding.edit', 'settings.branding.*'],
['Notifications', 'bell', 'settings.notifications.edit', 'settings.notifications.*'],
['Integrations', 'bolt', 'settings.integrations.edit', 'settings.integrations.*'],
['Email', 'envelope', 'settings.email.edit', 'settings.email.*'],
['Payments', 'database', 'settings.payments.edit', 'settings.payments.*'],
]],
['Security', [
['Spam Protection', 'shield', 'settings.captcha.edit', 'settings.captcha.*'],
['Password', 'lock', 'settings.password.edit', 'settings.password.*'],
['Two Factor', 'shield', 'settings.2fa.show', 'settings.2fa.*'],
['API Tokens', 'key', 'settings.tokens.index', 'settings.tokens.*'],
]],
['System', [
['License', 'shield', 'settings.license.edit', 'settings.license.*'],
['Updates', 'download', 'settings.updates.show', 'settings.updates.*'],
['Backup And Restore', 'archive', 'settings.backup.index', 'settings.backup.*'],
]],
];
if ($isAdmin) {
// Appearance is admin-only: a theme repaints the site for every
// visitor, and editing a template is equivalent to running code.
$groups[] = ['Appearance', [
['Theme Manager', 'star', 'settings.themes.index', 'settings.themes.*'],
['Template Manager', 'edit', 'settings.templates.index', 'settings.templates.*'],
]];
$groups[] = ['Administration', [
['Host And SSL', 'globe', 'settings.host.edit', 'settings.host.*'],
['Firewall', 'shield', 'settings.firewall.index', 'settings.firewall.*'],
['Users And Roles', 'users', 'settings.users.index', 'settings.users.*'],
['Audit Log', 'book', 'settings.audit.index', 'settings.audit.*'],
]];
}
$groups = array_values(array_filter(array_map(function ($g) {
[$title, $items] = $g;
$items = array_values(array_filter($items, fn ($t) => RouteFacade::has($t[2])));
return $items ? [$title, $items] : null;
}, $groups)));
@endphp
@if (count($groups))
{{-- Plain CSS (not Tailwind) so the purged build can't strip it. Vertical
grouped menu; the layout places this in a sticky left column. --}}
<style>
.settings-shell{display:grid;grid-template-columns:230px minmax(0,1fr);gap:1.5rem;align-items:start;}
.settings-aside{position:sticky;top:5rem;}
@media (max-width:768px){.settings-shell{grid-template-columns:1fr;}.settings-aside{position:static;}}
.st-menu{display:flex;flex-direction:column;gap:.15rem;background:#fff;border:1px solid #e2e8f0;border-radius:.75rem;padding:.5rem;box-shadow:0 1px 2px rgba(0,0,0,.05);}
.st-group{font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;padding:.65rem .6rem .25rem;}
.st-group:first-child{padding-top:.25rem;}
.st-item{display:flex;align-items:center;gap:.6rem;padding:.5rem .6rem;border-radius:.55rem;font-size:.875rem;font-weight:500;color:#475569;text-decoration:none;transition:background .15s,color .15s;}
.st-item:hover{background:#f1f5f9;color:#0f172a;}
.st-item.is-active{background:#1e293b;color:#fff;font-weight:600;}
.st-item svg{width:1.05rem;height:1.05rem;flex:0 0 auto;}
.st-badge{margin-left:auto;font-size:.625rem;font-weight:700;background:#f59e0b;color:#fff;border-radius:9999px;padding:.05rem .45rem;line-height:1.5;}
.st-item.is-active .st-badge{background:#fbbf24;color:#1e293b;}
</style>
<nav class="st-menu" aria-label="Settings sections">
@foreach ($groups as [$groupTitle, $items])
<p class="st-group">{{ $groupTitle }}</p>
@foreach ($items as [$label, $icon, $routeName, $pattern])
@php $active = request()->routeIs($pattern); @endphp
<a href="{{ route($routeName) }}" class="st-item {{ $active ? 'is-active' : '' }}" @if ($active) aria-current="page" @endif>
<x-icon :name="$icon" />
<span>{{ $label }}</span>
@if ($routeName === 'settings.updates.show' && class_exists(\App\Services\UpdateService::class) && \App\Services\UpdateService::available())
<span class="st-badge">New</span>
@endif
</a>
@endforeach
@endforeach
</nav>
@endif
Blade In One Screen
The directives you will use most.
- Print a value, escaped. Safe by default.
- Print raw HTML. Only for content you trust.
- Show something conditionally.
- Loop over a collection.
- Use a shared component. Every component in Shared Components is available.
- A comment that never reaches the browser.
{{ $variable }}
{!! $html !!}
@if / @else / @endif
@foreach / @endforeach
<x-card>
{{-- comment --}}
House Rules
Follow these and your edits will survive updates.
-
Never start line 1 with
@php. Blade mis-parses it and the page fails. The editor refuses to save it. - Keep logic out of templates. If you need a calculation, it belongs in a composer or component class, not here.
- The shipped file is never modified. Reset To Default always gets you back.
- Every save is versioned. You can revert to any earlier version in one click.
- Press Tab inside the editor to indent rather than jump to the next field.