Tematy bez nowych odpowiedzi

Dynamiczne podstawianie wartości do TS


Autor Wiadomość
Napisane: 24.02.2009 [17:41]
dpacholczyk
Twórca tematu
zarejestrowany: 17.09.2008
Posty: 1073
Witam,
chciałbym się Was spytać czy istnieje możliwość wyciągnięcia zmiennej z adresu url i wepchnięcia go do TS ?
Coś jakby zmienna $_GET['nazwa'] w php.

Załóżmy, że na stronie mam dwa markery ###TYTUL### ###NEWS###
I teraz...do markera ###NEWS### przypisany jest tt_news. Wyświetla się tu np. single view jakiegoś artykułu. Skoro mamy signel view to mamy też w linku masę zmiennych. I teraz
Chciałbym do markera przypisać tytuł tego news`a który sobie właśnie czytam...wyciągnąłbym go z bazy np. ale potrzebuje mieć uid które znajduje się w linku.
Czyli...czy mogę do skryptu TS dynamicznie wstawiać zmienne...jeśli tak to jak ?

p.s. Przykład ten jest tylko do zobrazowania problemu dlatego nie chodzi mi o inne rozwiązania, ale o to konkretne icon_wink.gif

Certified Level 2 TYPO3 Night Crew Member.

http://typo3blog.pl
Napisane: 25.02.2009 [20:59]
kss
admin
zarejestrowany: 19.07.2007
Posty: 829
Wejdź na tę stronę:
http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/2/2/


Zjedź do -> getText

i zobacz co on potrafi. Gettext można używać w stdWrap.data, a ponieważ obiekt TEXT jest już stdWrap to przykład najprostszego wykorzystania wygląda tak:

TYPOSCRIPT
temp.10 = TEXT
temp.10.data = GPvar:stuff


GPvar można odszyfrować jako GetPostVar.

Na forum było już o wyciąganiu tytułu z tt_newsa z wykorzystaniem parametru GET.



Certyfikowany Integrator Systemu TYPO3
http://www.cms-partner.pl
Napisane: 27.02.2009 [16:42]
dpacholczyk
Twórca tematu
zarejestrowany: 17.09.2008
Posty: 1073
Hmm kss niestety nie mogę znaleźć topic`u o którym wspominasz.

załóżmy, że link wygląda tak:
http://xxxxxxxx/index.php?id=18&tx_ttnews[tt_news]=19&tx_ttnews[backPid]=12&cHash=a32e835d56

teraz tak...to jest strona z single view...jednak mimo tego potrzebuje zupełnie poza szablonem templatki tt_news wyświetlić drugi raz tytuł. Chciałem to zrobić w ten sposób

TYPOSCRIPT
lib.news_id = TEXT
lib.news_id.data = GPvar:tx_ttnews|tt_news
temp.marker = TEXT
temp.marker.data = DB:tt_news:lib.news_id:title


zrobiłem to tak jakbym programował każdą aplikację. stworzyłem zmienną trzymającą id news`a i chciałem podstawić do temp.marker...ale zonk. W jaki sposób mogę osiągnąć taki efekt ?

Certified Level 2 TYPO3 Night Crew Member.

http://typo3blog.pl
Napisane: 28.02.2009 [14:14]
raczek
zarejestrowany: 04.08.2007
Posty: 32
Może poniższy przykład trochę Cię naprowadzi:

TYPOSCRIPT
lib.code = COA_INT
lib.code {
  10 = CONTENT
  10.table = tt_news
  10.select.pidInList = #Insert Id of page where you store your records
  10.select.andWhere.data = GPvar:tx_ttnews|tt_news
  10.select.andWhere.wrap = uid=|
  10.select.fields = title
 
}


Więcej info o select znajdziesz tutaj:
select

pozdrawiam
raczek

Certified Level 2 TYPO3 Night Crew Member.
Napisane: 28.02.2009 [14:28]
dpacholczyk
Twórca tematu
zarejestrowany: 17.09.2008
Posty: 1073
genialne w swojej prostocie icon_smile.gif
O tym nie pomyślałem, ale chyba znalazłem jeszcze prostsze rozwiązanie icon_smile.gif

dam znać

Certified Level 2 TYPO3 Night Crew Member.

http://typo3blog.pl
Napisane: 05.03.2009 [22:50]
kss
admin
zarejestrowany: 19.07.2007
Posty: 829
Oczywiście przy pobieraniu danych od użytkownika powinniśmy je, ze względów bezpieczeństwa (sql injection), przed wykorzystaniem w zapytaniu SQL sprawdzić.

W ostatnim przykładzie, trzeba by było wymusić wartość integer dla GPvar:tx_ttnews|tt_news. Ponieważ andWhere jest typu stdWrap to możemy użyć wszytkich możliwych funkcji stdWrap. Jedną z nich jest intval.

Otrzymujemy:
TYPOSCRIPT
10.select.andWhere.intval = 1


a cały przykład:
TYPOSCRIPT
lib.code = COA
lib.code {
  10 = CONTENT
  10.table = tt_news
  10.select.pidInList = #Insert Id of page where you store your records
  10.select.andWhere.data = GPvar:tx_ttnews|tt_news
  10.select.andWhere.intval = 1
  10.select.andWhere.wrap = uid=|
  10.select.fields = title
 
}



Natomiast niedziałający przykład Dawida:
TYPOSCRIPT
lib.news_id = TEXT
lib.news_id.data = GPvar:tx_ttnews|tt_news
temp.marker = TEXT
temp.marker.data = DB:tt_news:lib.news_id:title


dał mi troszkę do myślenia i po chwili testów na mojej lokalnej instalacji przybrał formę:
TYPOSCRIPT
temp.newsTitle = TEXT
temp.newsTitle {
   stdWrap.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:title
   stdWrap.outerWrap = {|}
   insertData = 1
}


Co ciekawe jest on już "bezpieczny", ponieważ (co sprawdziłem w źródłach TYPO3) trzecia wartość w rozbiciu na dwukropki jest poddawana funkcji intval()

Warto więc zapamiętać, że w elemencie treści CONTENT to co znajduje się w "where" i "andWhere" nie jest w żaden sposób sprawdzane przez TYPO3 pod względem bezpieczeństwa.
Musimy o to zadbać sami.

Certyfikowany Integrator Systemu TYPO3
http://www.cms-partner.pl