vainproject / vain-cms

Basic implementation of vain.
https://vain.rocks
Apache License 2.0
3 stars 0 forks source link

Modul: Menü-Manager #16

Closed fgreinus closed 9 years ago

fgreinus commented 9 years ago

Es muss die Möglichkeit im Backend geben, das Menü für das Frontend zu pflegen. Es wird auf ein simples Schema hinauslaufen, in dem ein Menüeintrag einen Parent haben kann (also in einem Dropdown ist) oder halt ein Haupteintrag ist, der direkt in der obersten Ebene ist. Dazu gibt's eine Positions-Zahl, die für die Sortierung sorgt. Außerdem kann eine URL angegeben werden (ggf. Vorauswahl aus den vorhandenen Content-Pages).

Zusätzlich gäbe es noch Optionen wie eine Auswahl an Icons oder soetwas wie "Öffnen im neuen Tab?", das ist aber wie erwähnt nur Nice-To-Have.

voydz commented 9 years ago

Hab mal rumgesucht. Ideal wäre natürlich wenn man mit derselben komponente das Backend und das Frontend Menu abhändeln könnte. Ich bin dabei auf dieses Projekt gestoßen:

https://github.com/vespakoen/menu

(neben https://github.com/lavary/laravel-menu , scheinbar nur Laravel 4 Support)

ottowayne commented 9 years ago

Was muss im Backend Menü denn dynamisch sein? Oder gehts dir nur um die active states?

fgreinus commented 9 years ago

Das war auch meine Argumentation. Active States kann man ja auch problemlos ohne hinbekommen. Muss man sich halt ne Convention für überlegen

voydz commented 9 years ago

nix, ich mag das template nur nicht so zustopfen (an allen ecken und enden @ifs mit Request::is():

 <li class="@if (Request::is('*users*') || Request::is('*role*') || Request::is('*perm*')) active @endif treeview">
        <a href="#">
            <i class="fa fa-users"></i> <span>@lang('user::user.title')</span> <i class="fa fa-angle-left pull-right"></i>
        </a>

        <ul class="treeview-menu">
            <li @if (Request::is('*users*')) class="active" @endif><a href="{{ route('user.admin.users.index') }}"><i class="fa fa-circle-o"></i> @lang('user::user.title')</a></li>
            <li @if (Request::is('*role*')) class="active" @endif><a href="{{ route('user.admin.roles.index') }}"><i class="fa fa-circle-o"></i> @lang('user::role.title')</a></li>
            <li @if (Request::is('*perm*')) class="active" @endif><a href="{{ route('user.admin.permissions.index') }}"><i class="fa fa-circle-o"></i> @lang('user::permission.title')</a></li>
        </ul>
    </li>

    <li class="@if (Request::is('*site*')) active @endif treeview">
        <a href="{{ route('site.admin.pages.index') }}">
            <i class="fa fa-file-text-o"></i> <span>@lang('site::admin.title')</span>
        </a>
    </li>

Da die Komponente Active-Flags unterstüzt fällt das weg. Da es zudem als Singleton arbeitet kann jedes Modul seine Menustruktur in einem Serviceprovider adden. (Würde gleichzeitig das Menü nach ´order´ im module.json aufbauen, ein netter side benefit) und im Layout steht an der stelle dann nur noch der render befehl.

Weiterhin ist das matching über Request::is() nicht immer ideal (wenn routen geändert werden, wenn ein pattern auf 2 requests matcht usw.)

fgreinus commented 9 years ago

Denkt denn niemand an die Kinder?

ottowayne commented 9 years ago

Na da ist ja nu bissl übertrieben. Da kann man ja mit Makros arbeiten.

Aber jo, kann man machen.

voydz commented 9 years ago

whops, sorry

voydz commented 9 years ago

Menü integration fürs erste abgeschlossen, inwiefern eine extra komponente zum managen des menus benötigt wird kann zum ende des projektes, im finalen review, entscheiden und umgesetzt werden,

closes with commit 22aaf9563cad8c331c6b5892dd82d5ad61cdbf31