Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ako riešiť menu vo vlastnom CMS?

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lava
Člen
Avatar
Lava:29.1.2018 22:38

Ako by ste vo vlastnom CMS riešili menu? Mám na mysli všetko, od uloženia do databázy, cez zobrazovanie v administrácií a zobrazovanie na stránke?
Najprv som myslel, že to bude gombička... Mám dačo v DB, tak to vyselectujem, sortnem a zobrazím. Lenže narazil som na niekoľko problémov

  • úprava poradia. Klasicky, šípka hore a šípka dole zmení poradie v administrácií, i na stránke. To by som, keby som sa fest posnažil, dokázal napísať nejaké brutálne query, ktoré by všetky položky updatovalo na jeden klik.
  • multilevelové menu je však tá horšia vec. Myslel som si, že každá položka menu bude mať v DB hodnotu parent_id. Lenže ako to potom vybrať z databázy, aby to korektne zobrazilo v administrácií i na stránke? Aby dané submenu boli len pod tými položkami, kde majú byť? A navyše aj toto mi úplne pokazí moju sortovaciu požiadavku :( Kto by vedel pomôcť, budem vďačný
Odpovědět
29.1.2018 22:38
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Dominik Gavrecký:29.1.2018 22:43

Na order používam niečo takéto v Nette možno ťa to inšpiruje

/**
     * Posune záznam dolů v pořadí
     * @param int $id
     * @param array $where
     * @return bool
     */
    public function moveDown($id, $where = [])
    {

        $row = $this->getOne($id);

        $where['position'] = $row->position + 1;

        $next = $this->getAll()->where($where);
        if ($next->count()) {
            $next->update([
                'position' => new SqlLiteral('position - 1')
            ]);

            $row->update([
                'position' => new SqlLiteral('position + 1')
            ]);

            return TRUE;
        }

        return FALSE;
    }

    /**
     * Posune záznam nahoru v pořadí
     * @param int $id
     * @param array $where
     * @return bool
     */
    public function moveUp($id, $where = [])
    {

        $row = $this->getOne($id);

        $where['position'] = $row->position - 1;

        $prev = $this->getAll()->where($where);
        if ($prev->count()) {
            $prev->update([
                'position' => new SqlLiteral('position + 1')
            ]);

            $row->update([
                'position' => new SqlLiteral('position - 1')
            ]);

            return TRUE;
        }

        return FALSE;
    }

A kde je presne problém v multilevel ? Cyklus v ktorom prebehne ďalší cyklus a selectuješ v závislosti od id prvého cyklusu...

Nahoru Odpovědět
29.1.2018 22:43
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Lava
Člen
Avatar
Lava:29.1.2018 22:49

V sorte v podstate mi stačí stále len vymeniť 2 položky. Tú na ktorú klikám aktuálne a vymeniť "position" v mojom prípade "order_number" buď s tou, ktorá je pred, alebo ktorá je za, v závislosti od toho, či kliknem move up, alebo move down. To by mi bolo jasné.

Jasné mi však nie je, čo s orderom v submenu? Tiež klasicky od 1 do iks? A rovnakým štýlom s nimi pohybujem, však?

Multilevel: Cyklus v cykle, to som si aj myslel, to nevidím ako problém. No možno by bolo lepšie, keby mi to už priamo prišlo ako 3D pole, nie?

$menu["prva_polozka"]
$menu["druha_polozka"]
$menu["nadradena_tretia_polozka"]
$menu["nadradena_tretia_polozka"]["prva_polozka_submenu"]

Keby to bolo tak, cyklus by som v pohode zrobil a bolo by všetko tak ako má byť. Lenže ako to vybrať z databázy tak, aby result vyzeral tak ako som uviedol vyššie? Navyše v laraveli?

Nahoru Odpovědět
29.1.2018 22:49
Aspartám, sacharín, to je môj vitamín
Avatar
Odpovídá na Lava
Dominik Gavrecký:29.1.2018 22:53

No sortovanie v submenu by už mohol byť problém aspoň teraz ma nenapadá ako by som to riešil možno by to šlo klasika order podľa int z jednej tabuľky len neviem či by tam nedošlo k nejakému logic-mindfuck neviem vyskúšaj a daj vedieť ale čisto teoreticky by to šlo ako v normálnom menu.

S tým multilevelom ti skrz SQL neporadím ja si to riešim v nette cez komponentu teda taký zložitejší foreach... Cez SQL by to bol asi zbytočný overkill

Nahoru Odpovědět
29.1.2018 22:53
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Lava
Člen
Avatar
Lava:29.1.2018 22:56

Možnože aj laravel má nejakú komponentu, určite niekde bude. Lenže jak dobre poznám laravelovské komponenty, buď nepojdu natiahnuť, alebo budú len pre starú verziu, alebo nebudú fungovať tak ako potrebujem :D

Nahoru Odpovědět
29.1.2018 22:56
Aspartám, sacharín, to je môj vitamín
Avatar
Nahoru Odpovědět
29.1.2018 23:05
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Lava
Člen
Avatar
Lava:29.1.2018 23:07

Zbežne som to pozrel... je to kravál... Laravelisti sú naozaj experti na písanie brutálne zložitých vecí, ktoré snáď nikto normálny nevyužije. Pokiaľ nekódi pre NASA :D

Nahoru Odpovědět
29.1.2018 23:07
Aspartám, sacharín, to je môj vitamín
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.