Najnowsze wpisy

Zaawansowana subskrypcja, nasze nowe rozszerzenie

W repozytorium CMS TYPO3 jest już kilka pluginów za pomocą których można...
09 styczeń 2012

Convenient In/Out animation using expressions

We recently had an opportunity to make a set of instructional animations...
07 listopad 2011

Wdrożenie Sphinx Search

W ostatnim czasie potrzebowaliśmy wydajnego i rozbudowanego mechanizmu...
26 lipiec 2011

Tagi

HOW TO: Tytuł rekordu single w ścieżce rootline

Na pewno nie raz spotkaliście się z potrzebą połączenia ścieżki rootline z dodatkowymi elementami np.:  nazwą rekordu w trybie single view.

Menu w przykładowym sklepie wygląda następująco:

Strona główna > Produkty > Notebooki

ale zdecydowanie lepiej zrobić tak:

Strona główna > Produkty > Notebooki > Macbook Pro 17 cali 

Jak zwykle w TYPO3 rozwiązań jest więcej niż jedno. Można zrobić to z poziomu wtyczki ale można również za pomocą Typoscript. Poniżej przedstawiam przykład takiego rozwiązania.

zaznacz
  1.  
  2. ######## ROOTLINE###### # This is our default rootline menu #######################
  3. temp.navi = HMENU
  4. temp.navi.entryLevel = 0
  5. #temp.navi.wrap = |
  6. # dont use wrap here, use it below
  7. temp.navi.special = rootline
  8. temp.navi.special.range = 0|-1
  9. temp.navi.1 = TMENU
  10. temp.navi.1 {
  11.  NO {
  12.  allWrap = |  /  |*||*| |
  13.  }
  14. }
  15. ######GETTING PRODUCT NAME ######## ###############################
  16. temp.tvname = CONTENT
  17. temp.tvname {
  18. table = tx_myshop_items
  19. pidInList = 56
  20. #pid of tv storage folder
  21. selectFields = title
  22. #get uid of single record
  23. andWhere.data = GPvar:tx_myshop_pi1|product
  24. andWhere.wrap = uid=|
  25. andWhere.intval = 1
  26. }
  27. renderObj = COA
  28.  renderObj {
  29.  10 = TEXT
  30.  10{
  31.  field = title wrap =  / |
  32.  }
  33. }
  34. }
  35. ######GENERATE PATH########
  36. # Combining default menu with single record title ###############################
  37. temp.combinedMenu = COA
  38. #wrap for whole menu
  39. temp.combinedMenu.wrap = <div class="all"> | </div>
  40. temp.combinedMenu {
  41.  5 < temp.navi
  42.  15 < temp.tvname
  43. }
  44. # print new rootline
  45. lib.myPathway < temp.COApath
  46.  

Gravatar: Krystian Krystian, 03.05.2009 12:46
Stosując realurl, jako GPvar:tx_myshop_pi1|product otrzymasz zapewne wartość typu integer, ale zawsze można przesłać parametry GET z pominięciem realurl używając standardowego &amp;tx_myshop_pi1[product]=1.
A to otwiera możliwość ataku. Być może przepuszasz GET/POST przez jakieś wykrywacze sql injection, ale dla pewności, bo może wykrywacze zawiodą, zawsze warto dać:

andWhere.data = GPvar:tx_myshop_pi1|product
andWhere.data.intval = 1
Gravatar: Bartosz Aninowski Bartosz Aninowski, 03.05.2009 13:08
Krystian dzieki za komentarz.
Tak uzywam dodatkowych mechanizmow ale warto zaznaczyc jak to jest istotne.
Problem jest wiekszy kiedy GPvar jest stringiem a nie integer. Oczywiscie warto tego unikac ale czasem trzeba poprostu uzyc stringa. Rozwiazanie jakie uzywamy to wlasna fukcja userFunc to przetworzenia stringa.
Gravatar: Krystian Krystian, 12.05.2009 09:52
Wrzucił mnie tu google na frazę "andWhere.data" i dobrze, bo widzę teraz, co przeoczyłem pisząc, błąd w swoim tipsie : )

Powinno być:
andWhere.data = GPvar:tx_myshop_pi1|product
andWhere.intval = 1


pzdr
Gravatar: Krystian Krystian, 12.05.2009 10:10
Który to błąd, btw, poprawiłeś modyfikując temp.tvname. Mogłeś napisać, że się pomyliłem :)
Gravatar: Bartosz Aninowski Bartosz Aninowski, 12.05.2009 10:12
nie zauwazylem ze sie pomyliles :)
dopisalem linie z glowy sugerujac sie Twoja podpowiedzia
dopiero teraz zauwazylem ze rzeczywiscie miales typo ;)
Dodaj swój komentarz:

* Tylko oznaczone pola są wymagane