
| Autor | Wiadomość |
|---|---|
|
Napisane: 18.03.2010 [12:38]
|
|
|
soee
Twórca tematu
zarejestrowany: 02.03.2010
Posty: 32
|
Tak jak w temacie do systemu komentarzy pod tekstami (tt_news) na stronie użyłem ve_guestbook. Wszystko działa bez zarzutu, jednak chciałbym wyeliminowć jedną rzecz, tj. po otworzeniu strony wyświetlającej pojedynczy tekst gdy nie został podany / został podany nieparawidłowy ID tekstu pojawia się komunikat o tym, że nie podano ID newsa jednak formularz do zamieszczania komentarzy cały czas jest wyświetlany. Jak w takim przypadku zapobiec wyświetlaniu formularza gdy podano błędny/nie podano ID tekstu? |
|
Napisane: 18.03.2010 [13:09]
|
|
|
dpacholczyk
zarejestrowany: 17.09.2008
Posty: 1072
|
zacznijmy od tego dlaczego generujesz linki do nieistniejących news`ów ? |
|
Napisane: 18.03.2010 [13:18]
|
|
|
biesior
admin
zarejestrowany: 20.03.2008
Posty: 1354
|
Poskładaj sobie ten widok za pomocą TypoScriptu, użyj warunku: TYPOSCRIPT [globalVar = GP:tx_ttnews|tt_news > 0] lib.singleViewWithComments = COA lib.singleViewWithComments { 10 < plugin.tt_news 20 < plugin.tx_veguestbook_pi1 //tej drugiej nazwy nie jestem pewien, sprawdź w manualu albo w narzędziach szablonów // jak dokładnie VE guestbook się dopina } page.10.marks.MAINCONTENT < lib.singleViewWithComments [global] edit: plugin.tx_veguestbook_pi1 powinno być OK Mój Muminek, moja Ula odeszła
|
|
Napisane: 18.03.2010 [13:25]
|
|
|
soee
Twórca tematu
zarejestrowany: 02.03.2010
Posty: 32
|
dpacholczyk nie generuję linków do nieistniejących newsów. Miałem na myśli sytuację gdy osoba odwiedzająca stronę zmieni sobie numer newsa w adresie ręcznie i okaże się, że on nie istnieje. biesior ale czy w ten sposób uniemożliwimy wyświetlenie zawartości gdy podany zostanie ID newsa, który nie istnieje w bazie? [Ten temat był edytowany 1 razy. Ostatnio 18.03.2010 o 13:27.] |
|
Napisane: 18.03.2010 [13:43]
|
|
|
biesior
admin
zarejestrowany: 20.03.2008
Posty: 1354
|
Ooops sorry, przyłapałeś mnie, oczywiście nie sprawdza to poprawności danych, jedynie to, czy id newsa został podany. Hm no to gorszy dylemat... szczerze powiem, że nic nie przychodzi mi na szybko do głowy. Mój Muminek, moja Ula odeszła
|
|
Napisane: 18.03.2010 [15:29]
|
|
|
kss
admin
zarejestrowany: 19.07.2007
Posty: 829
|
Możesz zastosować własne conditions. szczegóły na samym dole tej strony: http://typo3.org/documentation/document-library/references/doc_core_tsref/4.3.0/view/1/4/#id2345482 |
|
Napisane: 18.03.2010 [16:35]
|
|
|
biesior
admin
zarejestrowany: 20.03.2008
Posty: 1354
|
Z całego wątku wyciągam dwie lekcje: po pierwsze, człowiek się uczy, męczy, ślęczy a potem przychodzi KSS i pstryk z palca ;> Po drugie rewelacyjna rzecz, że ja na to nie wpadłem... w localconf.php dodaj najlepiej na końcu pliku: PHP function user_match($cmd){
switch($cmd){
case 'checkSingleNews':
if (intval($_GET['tx_ttnews']['tt_news']) > 0) {
$res = mysql_query("SELECT uid FROM tt_news WHERE deleted=0 AND hidden=0 AND uid=".intval($_GET['tx_ttnews']['tt_news']));
if (mysql_num_rows($res) == 1) {
return TRUE;
}
}
break;
}
}potem tylko zamień mój wcześniejszy warunek w pierwszej linii: TYPOSCRIPT [userFunc = user_match(checkSingleNews)] lib.singleViewWithComments = COA lib.singleViewWithComments { 10 < plugin.tt_news 20 < plugin.tx_veguestbook_pi1 } page.10.marks.MAINCONTENT < lib.singleViewWithComments [global] Tu kilka słów komentarza, dla osób które chciałyby wykorzystać do innych celów/zmodyfikować. Z szybkich testów wynika, że musi to być funkcja user_match() - tak jak jest napisane w dokumentacji, dlatego, żeby użyć kilku różnych warunków dodany jest parametr $cmd wykorzystany później w switch'u. Przed połączeniem z DB warto sprawdzić, czy w ogóle jest co sprawdzać... no i oczywiście przed wysłaniem danych do bazy, warto zwalidować wynik dla zabezpieczenia przed różnymi świństwami typu SQL injection. Dla mnie działo! Mój Muminek, moja Ula odeszła
|
|
Napisane: 18.03.2010 [17:05]
|
|
|
biesior
admin
zarejestrowany: 20.03.2008
Posty: 1354
|
Autopoprawka... no prawie... funkcja nie musi się nazywać user_match(), ale musi być prefixowana z użyciem user_ lub tx_ czyli można sobie odpuścić powyższego switcha. Dopuszczalne będzie zatem użycie np: user_checkSingleNews() lub tx_checkSingleNews() credits jak zwykle goes to KSS Mój Muminek, moja Ula odeszła
|
|
Napisane: 18.03.2010 [17:14]
|
|
|
dpacholczyk
zarejestrowany: 17.09.2008
Posty: 1072
|
naprawdę super sprawa !! |
|
Napisane: 18.03.2010 [17:23]
|
|
|
biesior
admin
zarejestrowany: 20.03.2008
Posty: 1354
|
phi i jeszcze jedna sprawa... z powyższego przykładu usunąłem wywołanie połączenia z MySQL, T3 już wcześniej inicjuje połączenie, poza tym w takiej postaci nie miało prawa zadziałać (brak danych), byłoby to widoczne gdyby był włączony debug... Mój Muminek, moja Ula odeszła
|