Skip to content

code4interactive/menu-old

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Usage

Obiekt Menu:: pozwala na dodawanie pozycji i tworzenie dowolnej ilości kontenerów do ich przechowywania.

Aby utworzyć kontener wystarczy wywołać jego nazwę na obiekcie Menu:

Menu::topMenu()->add($items);
Menu::wlasnyKontener()->add($items);

Jeśli chcemy skorzystać z własnego szablonu należy przekazać podczas pierwszego tworzenia kontenera ustawienia:

$settings = array(
    'layout_template' => 'menu::topMenu.layout',
    'item_template' => 'menu::topMenu.item'
)
Menu::wlasnyKontener($settings)->add($items);

Możliwe jest także załadowanie kilku kontenerów z konfiguracji. Aby to wykonać należy przekazać obiekt typu Illuminate\Config\Repository lub zwykły array następującej struktury:

$config = array(

    'menus' => array(

        'nazwaKontenera' => array(
            'settings' => array(
                'layout_template' => 'menu::topMenu.layout',
                'item_template' => 'menu::topMenu.item'
            ),
            'items' => array(
                0 => array(
                    'id' => 'main',
                    'name' => 'Strona główna',
                    'type' => 'default',  //or null
                    'url' => '#',
                    'icon' => Icons::$icon_home,
                    'class' => 'purple',
                    'children' => null,
                    'childrenClass' => null
                ),
                100 => array (
                    'id' => 'admin',
                    'name' => 'Administracja',
                    'type' => null,
                    'url' => '#',
                    'icon' => Icons::$icon_cog,
                    'class' => 'grey',
                    'childrenClass' => null,
                    'children' => array(
                        1 => array(
                            'id' => 'head',
                            'name' => 'Header',
                            'type' => 'subHeader',
                        ),
                        10 => array(
                            'id' => 'userManagment',
                            'name' => 'Użytkownicy',
                            'url' => '#',
                            'icon' => Icons::$icon_user
                        )
                    )
                )
            )
        ),
        'nazwaDrugiegoKontenera' => array(
            ...
        )
    )
)

Menu::loadMenuFromConfig($config);

Pole settings jest opcjonalne.

Params:

  • id: unikalny identyfikator
  • name: wyświetlana nazwa
  • type: typ - dowolny - do zaimplementowania w widokach modułu - typ wbudowany w domyślny template to: subHeader
  • url: link lub named route - jeżeli podano named route system sam sprawdzi czy istnieje i oznaczy pozycję jako active
  • icon: klasa css ikony np: icon_home. Można używać gotowej klasy wbudowanej w platformę Icons->$icon_home;
  • class: dodatkowe klasy css do stylizacji
  • childrenClass: klasy do stylizacji submenu jeśli występuje

Dodanie pojedynczej pozycji menu poprzez array()

$item = array(

    'id' => 'id',               //required
    'name' => 'name',           //required
    'type' => 'type',
    'url' => 'url',
    'icon' => 'icon',
    'class' => 'class',
    'childrenClass' => 'childrenClass'

    //Jeśli chcesz dodać od razu submenu można to zrobić tak:
    'children' => array(
        1 => array(
            'id' => 'submenu',
            'name' => 'Submenu'
        ),
        100 => array(
            'id' => 'submenu2',
            'name' => 'Submenu2'
        )
    )

);

$position = 10;

Menu::topMenu()->add($item)->at($position);

W przypadku dodawania pozycji z metodą at() można przekazać do niej drugi parametr który decyduje o ty czy dodawana pozycja ma nadpisać istniejącą jeśli mają ten sam index

Menu::topMenu()->add($item)->at($position, true);

Dodawanie wielu pozycji z własnego configu lub tablicy odbywa się analogicznie z pominięciem at().

$array = array(
     0 => array(
         'id' => 'main',
         'name' => 'Strona główna',
         'url' => '#',
         'icon' => Icons::$icon_home,
         'class' => 'purple',
         'children' => null,
         'childrenClass' => null
     ),
     100 => array (
         'id' => 'admin',
         'name' => 'Administracja',
         'type' => null,
         'url' => '#',
         'icon' => Icons::$icon_cog,
         'class' => 'grey',
         'childrenClass' => null,
         'children' => array(
             1 => array(
                 'id' => 'head',
                 'name' => 'Header',
                 'type' => 'subHeader',
             ),
             10 => array(
                 'id' => 'userManagment',
                 'name' => 'Użytkownicy',
                 'url' => '#',
                 'icon' => Icons::$icon_user
             )
         )
     )
)

Menu::topMenu()->add($array);

Dodanie pozycji menu poprzez Closure:

Menu::topMenu()->add(function($menuItem){

    $menuItem->setId = 'id';
    $menuItem->setName = 'name';
    $menuItem->setType = 'type';
    $menuItem->setUrl = 'url';
    $menuItem->setIcon = 'icon';
    $menuItem->setClass = 'class';
    $menuItem->setChildrenClass = 'childrenClass';

    //Jeśli chcesz dodać submenu można to zrobić od razu także przez closure:
    $menuItem->getChildren()->add(function($submenu) {

        $submenu->setId = 'id';
        $submenu->setName = 'name';
        //....

    })->at(0);

    //Albo arrayem
    $menuItem->getChildren()->add(array(

          'id' => 'id',               //required
          'name' => 'name',           //required
          'type' => 'type',
          'url' => 'url',
          'icon' => 'icon',
          'class' => 'class',
          'childrenClass' => 'childrenClass',
          'children' => null | array()

    ))->at(1);

})->at($position);

Operowanie na istniejących pozycjach


//Zmiana pojedynczych pozycji menu
Menu::topMenu()->at(1)->setName('Test');
Menu::topMenu()->at('main')->setName('Test');

//Dodawanie submenu do istniejącej pozycji
Menu::topMenu()->at(1)->getChildren()->add($item)->at(0);
Menu::topMenu()->at('main')->getChildren()->add($item)->at(0);

//Zmiana danych a pozycjach submenu
Menu::topMenu()->at(1)->getChildren()->at(0)->setUrl('http://www.code4.pl/');
Menu::topMenu()->at(1)->getChildren()->at('userManagment')->setUrl('http://www.code4.pl/');

//Wyszukiwanie po Id. Rekurencyjne więc dotyczy także submenu
Menu::find('main')->setName('Test');
Menu::topMenu()->find('main')->setName('Test');
Menu::topMenu()->find('main')->getChildren()->find('submenuItem')->setName('Submenu Item');

Operacje na kolekcjach


//Zmiana ustawien kolekcji
//UWAGA - nie działa jeszcze dziedziczenie ustawień więc nadanie innych widoków zadziała tylko dla elementu któremy ten widok ustawimy.
//W tym przypadku tylko dla kolekcji topMenu (mimo ustawienia itemu)

Menu::topMenu()->loadSettings(
    array(
        'layout_template' => 'menu::topMenu.layout',
        'item_template' => 'menu::topMenu.item'
    )
)


//Aby zadziałało dla itemów należy nadac wszystkim ...
foreach (Menu::topMenu()->all() as $index => $item) {

    Menu::topMenu()->at($index)->setTemplate("menu::topMenu.item");

}

Ustawianie aktywnej / otwartej pozycji


Wywołanie setActivePath powoduje przeszukanie rekurencyjne wszystkich pozycji i ich potomków i zaznaczenie wszystkich znalezionych w ścieżce na active / open Działa poprawnie tylko jeśli ID wszystkich pozycji są unikalne.

Menu::leftMenu()->setActivePath('idPozycji');

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages