Temat z wieloma odpowiedziami

tt_news i komentarze ve_guestbook


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 ?



Certified Level 2 TYPO3 Night Crew Member.

http://typo3blog.pl
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 icon_frown.gif [']
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 icon_frown.gif [']
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

Certyfikowany Integrator Systemu TYPO3
http://www.cms-partner.pl
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 icon_frown.gif [']
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 icon_smile.gif

Mój Muminek, moja Ula odeszła icon_frown.gif [']
Napisane: 18.03.2010 [17:14]
dpacholczyk
zarejestrowany: 17.09.2008
Posty: 1072
naprawdę super sprawa !! icon_smile.gif

Certified Level 2 TYPO3 Night Crew Member.

http://typo3blog.pl
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 icon_frown.gif [']