Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][SF2][Symfony2]Jak do głównego szablonu pobrać dane z bazy danych?
Forum PHP.pl > Forum > PHP > Frameworki
Crash89
Chciałbym w Symfony pobrać dane z bazy danych i wstawić je do głównego szablonu (layoutu),
przeczytałem dokumentację na ten temat, ale tam nie ma nic o pobraniu danych z bazy, spotkał się już ktoś z czymś takim?
http://symfony.com/doc/current/templating/..._variables.html
kpt_lucek
Co to za dane i dlaczego chcesz je wstawić bezpośrednio w templatkę?
ohm
https://symfony.com/doc/current/templating/..._extension.html - tworzysz nową funkcje dla twiga i wrzucasz w dowolnym miejscu w szablonie.
Crash89
Cytat(kpt_lucek @ 16.10.2016, 17:39:51 ) *
Co to za dane i dlaczego chcesz je wstawić bezpośrednio w templatkę?



W layoucie mam menu rozwijane, i tam chcę wstawić wszystkie kategorie, żeby po wybraniu kategorii przenosiło użytkownika na wszystkie elementy w danej, wybranej przez niego kategorii.
Ręcznie tego wstawiać, nie ma sensu, bo w panelu admina ktoś może sobie usunąć lub wstawić nową kategorię i się wszystko wysypie.
kpt_lucek
A może TO?
Crash89
Cytat(kpt_lucek @ 16.10.2016, 19:55:42 ) *
A może TO?


Nie, tutaj raczej ciężko zrobić menu rozwijalne, a takie chcę zrobić.
Mam już gotowy kod do tego w javascripcie, tylko chcę podstawić tam linki.
kpt_lucek
Czy ciężko, to nie wiem

W praktyce możesz coś takiego osiągnąć poprzez wstrzyknięcie serwisu do globali i potem odwoływać się do niego po dane, tak jak tutaj
  1. {% set param = mojSerwis.pobierzLink(jakisParametr) %}
  2. <a href="{{ param.url }}">{{ param.label }}</a>
Pilsener
1. Czemu nie zrobisz menu we frameworku/jakimś bundlu do tego?
2. Podejście z postu wyżej jest dobre, ale wtedy gdy chcemy wyświetlić jakiś statyczny parametr (typu środowisko czy nazwę bazy danych).
3. Zazwyczaj w aplikacjach symfonowych kontroler zwraca tablicę parametrów, które są przekazywane do warstwy widoku. Trzeba przechwycić zdarzenie "onKernelView" i podpiąć się pod obiekt "GetResponseForControllerResultEvent", modyfikując wysyłaną do widoku tablicę (w tym wypadku dodać do niej odpowiednie parametry). Oczywiście trzeba to dobrze okodować, żeby nie było problemów z konfliktem parametrów globalnych z lokalnymi. Szczegóły implementacji zależą od wersji frameworka.
Crash89
Jednak spróbuję z tym KnpMenuBundle, może być jednak problem z umieszczeniem odpowiednich klas w html.
Ten cały kod menu jaki mam, jest napisany pod bootstrapa i musi mieć odpowiednią hierarchę klas do cssa.
kpt_lucek
Cytat(Crash89 @ 17.10.2016, 21:47:55 ) *
Jednak spróbuję z tym KnpMenuBundle, może być jednak problem z umieszczeniem odpowiednich klas w html.
Ten cały kod menu jaki mam, jest napisany pod bootstrapa i musi mieć odpowiednią hierarchę klas do cssa.

Też się kiedyś z tym męczyłem i powiem Ci... da się i to bez modyfikacji templatki, tylko budując to odpowiednio przez załączony factory wink.gif
Pilsener
Co za problem podmienić templatkę menu np. na taką:
https://gist.github.com/nateevans/9958390
?
Albo znaleźć odpowiednie menu (bundli do symfony jest obfitość), albo samemu zrobić templatkę (godzina albo dwie pracy).
Można też nic nie zmieniać tylko dodać pare reguł CSS.
Crash89


Cytat(Pilsener @ 18.10.2016, 09:12:28 ) *
Co za problem podmienić templatkę menu np. na taką:
https://gist.github.com/nateevans/9958390
?
Albo znaleźć odpowiednie menu (bundli do symfony jest obfitość), albo samemu zrobić templatkę (godzina albo dwie pracy).
Można też nic nie zmieniać tylko dodać pare reguł CSS.


Mam już klasy css do tego, ogólnie to wygląda tak w htmlu:
  1. <div class="col-sm-8 h_menu4">
  2. <ul class="memenu skyblue">
  3. <li class=" grid"><a href="{{ path('homepage') }}">Home</a></li>
  4. <li><a href="{{ path('product_show_category', { 'category' : 1 }) }}">Wool</a>
  5. <div class="mepanel">
  6. <div class="row">
  7. <div class="col1">
  8. <div class="h_nav">
  9. <h4>All Clothing</h4>
  10. <ul>
  11. <li><a href="products.html">Shirts</a></li>
  12. <li><a href="products.html">Sports Wear</a></li>
  13. </ul>
  14. </div>
  15. </div>
  16. <div class="col1">
  17. <div class="h_nav">
  18. <h4>Footwear</h4>
  19. <ul>
  20. <li><a href="products.html">Formal Shoes</a></li>
  21. <li><a href="products.html">Boots</a></li>
  22.  
  23.  
  24. </ul>
  25. </div>
  26. </div>
  27. <div class="col1">
  28. <div class="h_nav">
  29. <h4>Popular Brands</h4>
  30. <ul>
  31. <li><a href="products.html">Levis</a></li>
  32. <li><a href="products.html">Persol</a></li>
  33. </ul>
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. </li>
  39. <li class="grid"><a href="#">Accesories</a>
  40. <div class="mepanel">
  41. <div class="row">
  42. <div class="col1">
  43. <div class="h_nav">
  44. <h4>All Clothing</h4>
  45. <ul>
  46. <li><a href="products.html">Shirts & Tops</a></li>
  47. <li><a href="products.html">Sports Wear</a></li>
  48. </ul>
  49. </div>
  50. </div>
  51. <div class="col1">
  52. <div class="h_nav">
  53. <h4>Footwear</h4>
  54. <ul>
  55. <li><a href="products.html">Heels</a></li>
  56. <li><a href="products.html">Flats</a></li>
  57. </ul>
  58. </div>
  59. </div>
  60. <div class="col1">
  61. <div class="h_nav">
  62. <h4>Popular Brands</h4>
  63. <ul>
  64. <li><a href="products.html">Levis</a></li>
  65. <li><a href="products.html">Persol</a></li>
  66. </ul>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. </li>
  72. <li><a href="typo.html">Blog</a></li>
  73. <li><a class="color6" href="contact.html">Contact</a></li>
  74. {% if is_granted('ROLE_ADMIN') %}
  75. <li><a class="color6" href="{{ path('sonata_admin_dashboard') }}" >Admin panel</a></li>
  76. {% endif %}
  77. </ul>
  78. </div>


Tak wygląda kod w htmlu, i taki muszę zbudować w knpMenu. Nie ruszając szablonu (Bo jest bardzo skomplikowana) Da się wstawić divy w takiej hierarchii w Builderze, czy to już tylko w KnpMenuBuilder.html.twig?
kpt_lucek
Możesz to jak najbardziej zrobić przez KNP, pewnie będzie to wymagało lekkiej zmiany templatki, ale mimo wszystko ograsz to "gotowcem" i bez nadmiernego kombinowania.
Crash89
To będzie moje ostatnie chyba pytanie.
Co zrobić żeby dodane divy otaczały tylko listę wygenerowaną przez tą linijkę w Builderze:
  1. $menu['Item']->addChild($item->getName(), array('uri' => '#'));


Przeszukałem cały plik Knp_menu.html.twig i udało mi się osiągnąć prawie zamierzony efekt, ale moje divy otaczały także linijki z buildera:
  1. $menu->addChild(...)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.