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: wyświetalnie rekordów tt_news montowanych w różnych podstronach

Wiele stron i wiele kategorii.

Bardzo często podczas integracji wtyczki tt_news w CMS TYPO3 spotykamy się z pewnym ograniczeniem, które póki co nie ma prostego rozwiązania. Wyobraźmy sobie witrynę opartą o wiele kategorii i dużą ilość aktualności. Z racji konstrukcji serwisu nasz klient chce aby rekordy tt_news zostały zamontowane bezpośrednio do konkretnej kategorii w drzewie stron. Cały serwis ma wiele sekcji i różne newsy są pokazywane w różnych miejscach. Dużym problemem jest określanie tzw single view dla każdej kategorii. Musimy pamiętać, żeby każda instancja wtyczki posiadała określony "single view". Kolejny problem pojawi się podczas globalnego wyszukiwania we wszystkich kategoriach. Wtyczka wyświetlająca wyniki wyszukiwania powinna linkować każdy rekord do właściwej strony single view. Utworzenie wspólnej strony nie jest rozwiązaniem ponieważ dla przykładu news:

"Taniec z gwiazdami"  powinien być pokazany w sekcji Strona głowna > Gwiazdy > Wydarzenia

a news

"Wywiad z Piaskiem" w Strona głowna > Gwiazdy > Wywiady

PID jako single view.

Rozwiązanie jest pozornie proste, choć wymaga xclass'owania klasy class.tx_ttnews.pi1.php. W funkcji getListContent() pod linią

zaznacz
  1.  
  2. #class.ux_tx_ttnews.php
  3. $singlePid = $catSPid['single_pid']?$catSPid['single_pid']:$this->config['singlePid'];

należy dodać poniższy zmianę

zaznacz
  1.  
  2. if ($this->conf['useSPidFromMountPage']) {
  3. $singlePid = $row['pid']?$row['pid']:$this->config['singlePid'];
  4. }

Następnie w konfiguracji typoscript dla tt_news należy ustawić

zaznacz
  1.  
  2. plugin.tt_news.useSPidFromMountPage =1

Od tej pory wszystkie rekordy tt_news będą linkowane do strony w której rekord jest zamontowany.

Single View i List na jednej stronie

Następne wyzwanie to obsłużenie w ramach jednej strony wyświetlania listy np. LATEST i podglądu rekordu SINGLE VIEW. Użytkownik otwiera stronę Strona główna > Gwiazdy > Wywiady i widzi listę ostatnich wywiadów, które są zamontowane w danej stronie. Jeśli kliknie na dowolny rekord renderujemy widok SINGLE VIEW. Poniższy typoscript demonstruje jak to wykonać.

zaznacz
  1.  
  2. #Ustawiamy code na LATEST jeśli użytkownik otwiera stronę bez żadnych parametrów
  3. plugin.tt_news.code >
  4. plugin.tt_news.code = LATEST
  5. #Budujemy dowolne zapytanie do bazy danych w celu pobrania rekordów.
  6. temp.ttnewsrec = COA temp.ttnewsrec {
  7. 10 = CONTENT 10.table = tt_news
  8. 10.select {
  9. pidInList = this
  10. where = deleted=0 AND hidden=0
  11. orderBy = datetime desc max = 5
  12. }
  13. }
  14. #Sprawdzamy czy istnieje parametr tx_ttnews[tt_news] i jeśli tak zmieniamy code na SINGLE i renderujemy rekord.
  15. [globalVar = GP:tx_ttnews|tt_news > 0]
  16. plugin.tt_news{
  17. code = SINGLE
  18. }
  19. lib.myNewsLast < plugin.tt_news
  20. #W innym przypadku pokazujemy listę.
  21. [else] lib.myNewsLast< temp.ttnewsrec
  22. [global]

Jeśli ktoś z Was zna inny sposób to czekam na uwagi. Zastanawiam się również czy wersja tt_news 3.0 będzie miała jakieś wbudowane rozwiązanie powyższego przypadku.

Gravatar: the christ hospital nursing sc the christ hospital nursing sc, 22.04.2009 18:30
http://05.a21a24.free-bsd.org/... nurse anesthesia school loans
Gravatar: Dmitry Dmitry, 26.06.2009 13:07
Thanks guys for this sollution!
But singlePid also has strWrap function. What about to replace it with current pid when it is not set?
Gravatar: Bartosz Aninowski Bartosz Aninowski, 26.06.2009 13:15
That's good point. I will check this out and add comments.
Thanks for hint.
Dodaj swój komentarz:

* Tylko oznaczone pola są wymagane