Mam stworzony własny moduł, który wyświetla mi zapisy na szkolenia. Chciałbym jednak, aby w backendzie wyświetlały się jedynie zapisy szkoleń, które jeszcze się nie odbyły. W tabeli są wszystkie zapisy, zarówno na szkolenia w przyszłości jak i na szkolenia, które się już odbyły. Czy można to zrobić za pomocą jakieś funkcji onload_callback i wstawić tam odpowiednie zapytanie. Czy może modyfikować trzeba konstruktor klasy.
Obecnie w funkcji konstruktora mam coś takiego
public function __construct()
{
parent::__construct();
}
i wyświetlają mi się wszystkie rekordy z tabeli. A chciałbym, aby wyświetlały się tylko wybrane za pomocą zapytania. Jak zrobić taki domyślny filtr??
Używam Typolight 2.8.1.
Z góry dziękuję za podpowiedź.
Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!

Jak wyświetlić w backend wybrane rekordy za pomocą zapytania MYSQL.?
Rozpoczęty przez Jaro_27, cze 21 2011 20:13
#2
Napisano 21 czerwca 2011 - 20:51

Domyślny filtr można ustawić za pomocą kodu:
Właśnie za pomocą onload_callback. Musisz to sobie jakoś dopasować... w zasadzie nie wiem czy w TYPOlight 2.8.1 coś takiego jest możliwe...
Ja w jednym ze swoich potrzebowałem rozwiązania takie jak jest np. w strukturze stron, gdzie masz odnośnik do artykułów danej podstrony. I w tym celu użyłem sobie takiego kodu:
$session = $this->Session->getData(); $session['filter']['tl_tabela']['published'] = 1; $this->Session->setData($session);
Właśnie za pomocą onload_callback. Musisz to sobie jakoś dopasować... w zasadzie nie wiem czy w TYPOlight 2.8.1 coś takiego jest możliwe...
Ja w jednym ze swoich potrzebowałem rozwiązania takie jak jest np. w strukturze stron, gdzie masz odnośnik do artykułów danej podstrony. I w tym celu użyłem sobie takiego kodu:
if ($this->Input->get('pid')) { $session = $this->Session->getData(); $session['filter']['tl_topic']['pid'] = $this->Input->get('pid'); $this->Session->setData($session); $this->redirect(preg_replace('/&pid=[^&]*/', '', $this->Environment->request)); }
Codefog - Contao web development
#3
Napisano 21 czerwca 2011 - 21:20

Prawie działa. Ale pojawił się jeszcze jeden problem.
Zrobiłem tak w funkcji onload_callback.
$session = $this->Session->getData();
$session['filter']['tl_training_write_in']['begining_date'] =time();
$this->Session->setData($session);
I teraz wyświetlają mi się szkolenia, które rozpoczynają się dzisiaj. A chciałbym jeszcze, aby wyświetlały się szkolenia, które dopiero się odbędą. Próbowałem ze znakiem większości, ale wtedy nie działa i znowu pokazuje wszystkie rekordy.
Zrobiłem tak w funkcji onload_callback.
$session = $this->Session->getData();
$session['filter']['tl_training_write_in']['begining_date'] =time();
$this->Session->setData($session);
I teraz wyświetlają mi się szkolenia, które rozpoczynają się dzisiaj. A chciałbym jeszcze, aby wyświetlały się szkolenia, które dopiero się odbędą. Próbowałem ze znakiem większości, ale wtedy nie działa i znowu pokazuje wszystkie rekordy.
#4
Napisano 21 czerwca 2011 - 22:21

Hmm wiesz co, może zrobimy to inaczej:
$time = time(); $objItems = $this->Database->execute("SELECT id FROM tl_training_write_in WHERE begining_date>=$time"); $GLOBALS['TL_DCA']['tl_training_write_in']['list']['sorting']['root'] = $objItems->fetchEach('id');Nie wiem czy zadziała na wersji 2.8.1. Tylko wtedy wyświetli ci szkolenia przyszłe, a przeszłych już nie zobaczysz. Ale można to obejść dodając jakiś warunek, np.
if (isset($_SESSION['filter']['tl_training_write_in']['begining_date'])) { // i tu powyższy kod... }Pokombinuj coś z tym

Codefog - Contao web development
#5
Napisano 21 czerwca 2011 - 23:15

Działa elegancko. Dzięki bardzo.
Może podpowiesz mi jeszcze w czym takim. Chciałbym teraz w Zawartości w lewej strony dodać link Zapisy-Archiwum i tam prezentować zapisy na szkolenia, które się już odbyły. Czy muszę budować analogiczną klasę z inną nazwą i innym zapytaniem w funkcji onload_callback, czy mogę wykorzystać istniejącą klasę (tę reprezentującą zapisy na szkolenia przyszłe)i zmienić tylko zapytanie w funkcji onload_callback. Zanaczam, że wszystkie szkolenia są w tej samej tabeli i tylko poprzez funkcją onload_callback, której przepis mi podałeś wyświetlam sobie zapisy na przyszłe szkolenia.
Może podpowiesz mi jeszcze w czym takim. Chciałbym teraz w Zawartości w lewej strony dodać link Zapisy-Archiwum i tam prezentować zapisy na szkolenia, które się już odbyły. Czy muszę budować analogiczną klasę z inną nazwą i innym zapytaniem w funkcji onload_callback, czy mogę wykorzystać istniejącą klasę (tę reprezentującą zapisy na szkolenia przyszłe)i zmienić tylko zapytanie w funkcji onload_callback. Zanaczam, że wszystkie szkolenia są w tej samej tabeli i tylko poprzez funkcją onload_callback, której przepis mi podałeś wyświetlam sobie zapisy na przyszłe szkolenia.
#6
Napisano 22 czerwca 2011 - 10:54

Teraz przychodzi mi tylko do głowy użycie tego rozszerzenia http://www.contao.or...s.20007.en.html. Zrobisz sobie nowy link, który będzie prowadził do tej samej tabeli ale np. z dodatkowym parametrem:
do=twoj_modul&table=tl_training_write_in&filter=future
do=twoj_modul&table=tl_training_write_in&filter=past
Wtedy w kodzie onload_callback dasz:
do=twoj_modul&table=tl_training_write_in&filter=future
do=twoj_modul&table=tl_training_write_in&filter=past
Wtedy w kodzie onload_callback dasz:
if ($this->Input->get('filter') != '') { $time = time(); switch ($this->Input->get('filter')) { case 'future': $objItems = $this->Database->execute("SELECT id FROM tl_training_write_in WHERE begining_date>=$time"); break; case 'past': $objItems = $this->Database->execute("SELECT id FROM tl_training_write_in WHERE begining_date<$time"); break; default: $objItems = $this->Database->execute("SELECT id FROM tl_training_write_in"); break; } $GLOBALS['TL_DCA']['tl_training_write_in']['list']['sorting']['root'] = $objItems->fetchEach('id'); }
Codefog - Contao web development
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych użytkowników