Skocz do zawartości

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!
Zdjęcie

Jak wyświetlić w backend wybrane rekordy za pomocą zapytania MYSQL.?


  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
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ź.
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Domyślny filtr można ustawić za pomocą 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));
}

  • 0

Codefog - Contao web development


#3
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
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.
  • 0

#4
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
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 ;)
  • 0

Codefog - Contao web development


#5
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
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.
  • 0

#6
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
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:

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');
}

  • 0

Codefog - Contao web development





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych użytkowników