Temat: Doctrine, KnpMenuBundle => automatyczne menu

Witam serdecznie.

Piszę tutaj po raz pierwszy. Zaczynam zabawę w Symfony 2 (w zasadzie 2.4). ;) Nurtuje mnie jedna sprawa, do której sam nie mogę dojść a zapewne jest to jakiś banał ... Chcę zbudować porządne automatyczne menu. W książce W. Gajdy opisane jest automatyczne menu, ale jest to proste menu, połączone z widokiem gdzie pętlą wyświetlane są pobrane dane z bazy (menu pierwszego poziomu). Mnie chodzi o wybranie z bazy i przed wyświetleniem w widoku chciałbym te dane przerzucać do KnpMenu, gdzie tworzone byłoby drzewo. Menu w bazie zbudowane jest w taki sposób, że posiada poszczególne "levele". Chciałbym, żebym po wybraniu z bazy, miał możliwość sprawdzenia jaki ma numer levelu i jeżeli np. mamy level 1,2,2,2,1,1,2,3,3,3 to podczas np. wyświetlania poszczególnych (pojedynczych) danych operuję tylko addChild i atrybutem dropdown.

Builder.php

...

$em = $this->container->get('doctrine.orm.entity_manager');
$repository = $em->getRepository('MyKursBundle:menu');
$menuItems = $repository->findAll();

...

$menu = $factory->createItem('root');
$menu->addChild('User', array('uri' => '#'))->setAttribute('dropdown', true);
$menu['User']->addChild('Profile', array('uri' => '#'))->setAttribute('divider_append', true);
$menu['User']->addChild('Logout', array('uri' => '#'));


Pierwsza część to zapytanie, druga to statyczne menu, gdzie zamiast niego chciałbym np. w pętli sprawdzać odpowiednie dane z tablicy $menuItems. Np. Sprawdzam ile elementów zawiera tablica $menuItems a potem pętlą for wyświetlam po indeksie $element[$i]->link. Wtedy miałbym kontrolę nad tymi danymi.

Jeżeli będzie trzeba coś wyjaśnić, czy jakoś nieskładnie się wyraziłem, to proszę pytać. :) Dziękuję za wszelkie podpowiedzi. Pewnie to pierdoła, ale jeszcze nie jestem w tym frameworku biegły.
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Bartłomiej G.:
Piszę tutaj po raz pierwszy. Zaczynam zabawę w Symfony 2 (w zasadzie 2.4). ;) Nurtuje mnie jedna sprawa, do której sam nie mogę dojść a zapewne jest to jakiś banał ... Chcę zbudować porządne automatyczne menu. W książce W. Gajdy opisane jest automatyczne menu, ale jest to proste menu, połączone z widokiem gdzie pętlą wyświetlane są pobrane dane z bazy (menu pierwszego poziomu). Mnie chodzi o wybranie z bazy i przed wyświetleniem w widoku chciałbym te dane przerzucać do KnpMenu, gdzie tworzone byłoby drzewo. Menu w bazie zbudowane jest w taki sposób, że posiada poszczególne "levele". Chciałbym, żebym po wybraniu z bazy, miał możliwość sprawdzenia jaki ma numer levelu i jeżeli np. mamy level 1,2,2,2,1,1,2,3,3,3 to podczas np. wyświetlania poszczególnych (pojedynczych) danych operuję tylko addChild i atrybutem dropdown.

Builder.php

...

$em = $this->container->get('doctrine.orm.entity_manager');
$repository = $em->getRepository('MyKursBundle:menu');
$menuItems = $repository->findAll();

...

$menu = $factory->createItem('root');
$menu->addChild('User', array('uri' => '#'))->setAttribute('dropdown', true);
$menu['User']->addChild('Profile', array('uri' => '#'))->setAttribute('divider_append', true);
$menu['User']->addChild('Logout', array('uri' => '#'));


Pierwsza część to zapytanie, druga to statyczne menu, gdzie zamiast niego chciałbym np. w pętli sprawdzać odpowiednie dane z tablicy $menuItems. Np. Sprawdzam ile elementów zawiera tablica $menuItems a potem pętlą for wyświetlam po indeksie $element[$i]->link. Wtedy miałbym kontrolę nad tymi danymi.

Jeżeli będzie trzeba coś wyjaśnić, czy jakoś nieskładnie się wyraziłem, to proszę pytać. :) Dziękuję za wszelkie podpowiedzi. Pewnie to pierdoła, ale jeszcze nie jestem w tym frameworku biegły.
Z tego co piszesz wynika, że stworzenie własnego renderera powinno rozwiązać Twój problem: KnpMenuBundle: Registering your own renderer.

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Inaczej zadam pytanie.


$em = $this->container->get('doctrine.orm.entity_manager');
$repository = $em->getRepository('MyKursBundle:menu');
$menuItems = $repository->findAll();


Ten kod pobiera mi całe menu z bazy. Chciałbym z $menuItem wyciągnąć tylko jedną daną. Jak to zrobić?
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Bartłomiej G.:

$em = $this->container->get('doctrine.orm.entity_manager');
$repository = $em->getRepository('MyKursBundle:menu');
$menuItems = $repository->findAll();


Ten kod pobiera mi całe menu z bazy. Chciałbym z $menuItem wyciągnąć tylko jedną daną. Jak to zrobić?
Zamiast
$menuItems = $repository->findAll();
użyj np.:
$menuItem = $repository->findOneById(1234);
i następnie
$value = $menuItem->getWlasciwoscKtoraPotrzebujesz();

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Źle zadane pytanie albo mało precyzyjne. Nie znając IDa nie wyciągnę czegokolwiek w taki sposób. Mam w bazie kolejne wiersze:


ID: 1, Level: 1, Text: glowna
ID: 2, Level: 1, Text: podstrona1
ID: 5, Level: 1, Text: podstrona2 (ID 5 ponieważ 3 i 4 zostały usunięte)
ID: 6, Level: 2, Text: podstrona1 podstrony2
ID: 7, Level: 2, Text: podstrona2 podstrony2
ID: 8, Level: 1, Text: podstrona3


Już nawet zaczynam kobinować, żeby robić zapytania w iteracji i zapisaywać je do $zmienna .= $zmienna ... I potem przekazywać ją do widoku.

Muszę jednak dostosować się do tego:


$menu = $factory->createItem('root');
$menu->addChild('User', array('uri' => '#'))->setAttribute('dropdown', true);
$menu['User']->addChild('Profile', array('uri' => '#'))->setAttribute('divider_append', true);
$menu['User']->addChild('Logout', array('uri' => '#'));


I wtedy oprogramowałbym to w taki sposób, że sprawdzałbym czy Level > od poprzedniego Levelu, jeżeli tak to daję addChilda ... Może ja nie umiem tego wytłumaczyć ... :/ Chcę, aby pojedyncze dane pobrane z bazy wstawić do KnpMenuBundle.Ten post został edytowany przez Autora dnia 28.07.14 o godzinie 11:38
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Bartłomiej G.:
Źle zadane pytanie albo mało precyzyjne. Nie znając IDa nie wyciągnę czegokolwiek w taki sposób. Mam w bazie kolejne wiersze:


ID: 1, Level: 1, Text: glowna
ID: 2, Level: 1, Text: podstrona1
ID: 5, Level: 1, Text: podstrona2 (ID 5 ponieważ 3 i 4 zostały usunięte)
ID: 6, Level: 2, Text: podstrona1 podstrony2
ID: 7, Level: 2, Text: podstrona2 podstrony2
ID: 8, Level: 1, Text: podstrona3


Już nawet zaczynam kobinować, żeby robić zapytania w iteracji i zapisaywać je do $zmienna .= $zmienna ... I potem przekazywać ją do widoku.

Muszę jednak dostosować się do tego:


$menu = $factory->createItem('root');
$menu->addChild('User', array('uri' => '#'))->setAttribute('dropdown', true);
$menu['User']->addChild('Profile', array('uri' => '#'))->setAttribute('divider_append', true);
$menu['User']->addChild('Logout', array('uri' => '#'));


I wtedy oprogramowałbym to w taki sposób, że sprawdzałbym czy Level > od poprzedniego Levelu, jeżeli tak to daję addChilda ... Może ja nie umiem tego wytłumaczyć ... :/ Chcę, aby pojedyncze dane pobrane z bazy wstawić do KnpMenuBundle.
W takim razie pobierając dane za pomocą
$menuItems = $repository->findAll();
możesz w pętli odczytać właściwość "level":
foreach ($menuItems as $item) {
$level = $item->getLevel();
}
Domyślam się, że to wiesz i że oczekujesz innej informacji. Skłaniałbym się tutaj ku https://github.com/KnpLabs/KnpMenuBundle/blob/master/Re... oraz https://github.com/KnpLabs/KnpMenuBundle/blob/master/Re... (podałem wyżej).

Temat: Doctrine, KnpMenuBundle => automatyczne menu

O to chodziło. :) Dzięki wielkie. :) Nie wiedziałem jak się odnieść do konkretnego elementu, a to taki banał. :) Zaczynam się uczyć symfony, więc niby proste a niby nie a kluczem był ten zapis:


foreach ($menuItems as $item) {
$level = $item->getLevel();
}


gdzie getLevel to jedna z właściwości klasy Entity. I wszystko jasne. Gra muzyka. :)
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Bartłomiej G.:
O to chodziło. :) Dzięki wielkie. :) Nie wiedziałem jak się odnieść do konkretnego elementu, a to taki banał. :) Zaczynam się uczyć symfony, więc niby proste a niby nie a kluczem był ten zapis:


foreach ($menuItems as $item) {
$level = $item->getLevel();
}


gdzie getLevel to jedna z właściwości klasy Entity. I wszystko jasne. Gra muzyka. :)
Cieszę się, że mogłem pomóc. Powodzenia w nauce, a razie potrzeby pisz, pytaj i pochwal się co ciekawego zrobiłeś :]

Temat: Doctrine, KnpMenuBundle => automatyczne menu

Wszystko byłoby super gdyby nie jedna rzecz, której nie mogę przeskoczyć. Mam automatyczne menu pobierane z bazy, jednak mam problem z 3 poziomem menu. Nadpisuje mi mi część menu i w 3 poziomie wyświetla mi tylko ostatnią pozcyję.

if ($page_link[$i] <> '') {
if ($level[$i] == 1) {
$menu->addChild($page_menu[$i], array('uri' => $page_link[$i].'/'));
$menu_n = $page_menu[$i];
}
if ($level[$i] == 2) {
$menu[$menu_n]->addChild($page_menu[$i], array('uri' => $page_link[$i].'/'));
$menu_p = $page_menu[$i];
}
if ($level[$i] == 3) {
$menu[$menu_n]->addChild($menu_p, array('uri' => $menu_p.'/'))->addChild($page_menu[$i], array('uri' => $page_link[$i].'/'));
}
}


Czy ktoś orientuje się jak dodać menu 3 poziomu bez napisywania?Ten post został edytowany przez Autora dnia 30.07.14 o godzinie 10:13

Następna dyskusja:

Symfony 2 - Doctrine a [Pro...




Wyślij zaproszenie do