Jak správně udělat filtr v NETTE
- DETAIL
- Člen | 33
Ahoj
Už chvilku používám Nette ale pořád nevím kdy použít render, action či
hendler.
Uvedu příklad
Uživatel má nějaké oblasti kde jsou zařízení. Zatím mám myšlenku že všechno bude uložené v session. No a jak to správně udělat abych mohl vygenerovat tabulku pomocí query (Tak aby se to dalo i uživatelem editovat).
Dále pak nevím jak moc dobré je někde ukazovat ID zařízení, /?zařízení=10&date_from=xy&…, Ale zároveň to chci mít i pro administrátora že by si mohl zobrazít přímo to co vidí uživatel.
Moc děkuji za pomoc
Mozna jsem to blbě popsal a pokud bude třeba tak to klidně víc rozepisu
i s kódem.
- dakur
- Člen | 493
@DETAIL Ahoj, myslím, že mixuješ více věcí dohromady. Například session je něco jiného než databáze, která má tabulky a vytahují se z ní data pomocí „query“. Session se hodí pro ukládání dočasných věcí (třeba data při přechodu mezi dvěma stránkami v nákupním košíku) a mizí po každém zavření prohlížeče, kdežto databáze/tabulky se hodí pro ukládání dat, která mají zůstat. Technicky je session zjednodušeně řečeno součástí PHP, kdežto databáze je samostatná aplikace/služba na serveru, se kterou se komunikuje pomocí SQL jazyka (to je to „query“).
Z toho, co píšeš, se mi zdá, že myslíš spíš databázi, protože chceš mít nějaká zařízení a oblasti, která jdou editovat a zobrazovat různým uživatelům.
action, handle a render jsou potom určité chvíle při vykreslování stránky v Nette frameworku, ve kterých můžeš něco dělat. Obecně řečeno se action používá pro vytahování dat z databáze, render pro předávání dat do šablony a handle pro zpracování požadavků od uživatele, které nejsou implementovány pomocí formulářů.
Editoval dakur (30. 9. 2020 9:50)
- DETAIL
- Člen | 33
Díky za vysvětlení action, …, i když stále to moc nechápu :D :(
Zbytek jsem asi blbě popsal. Samozřejmě, že mám data uložené
v DB.
Ten session jsem tam rozepsal z toho důvodu, abych popsal co vlastně
potřebuji, čili vzít ID zařízení které bude v poli a podle toho
vypisovat tabulku. V session budu mít i proměnnou která určuje vybrané
místo a pak array( $misto ⇒ array(id_zarizeni,…))
S tím ukazováním ID jsem teďka vymyslel to, že to budu zobrazovat jako zařízení 1, zařízení 2, atd., ale nevím jak vyřešit to, aby si mohl i admin nechat zobrazit ty data, ale to zatím není tak důležité.
No a nevím jakým způsobem to mám udělat. Nejspíš bude potřebovat to
kombinovat s routou, ale ty jsem stále ještě nepochopil.
A klidně by takový návod mohl být i na blogu, protože toto musí řešit
skoro každý.
- dakur
- Člen | 493
@DETAIL Pokud chceš mít ID čehokoliv v routě, definuješ ho tam
jako tzv. parametr (což není de facto nic jiného než proměnná). Např.
new Route('detail-zarizeni/<deviceId>', 'Device:default')
. V
DevicePresenter
pak budeš mít actionDefault()
methodu, jejíž první parametr bude právě ten deviceId
.
Stránka bude přístupná na adrese např. /detail-zarizeni/3
.
class DevicePresenter extends Presenter
{
private array $results = [];
public function actionDefault($deviceId)
{
// dotaz do databáze s $deviceId
// výsledek si uložíš např. do $this->results
$this->results = $this->db->...
}
public function renderDefault($deviceId) // i tady máš k dispozici $deviceId, kdybys ho potřeboval např. pro šablonu
{
$this->template->rows = $this->results;
}
}
Editoval dakur (1. 10. 2020 15:33)
- dakur
- Člen | 493
Jinak v dokumentaci to je, jen možná v jiné formě než jsi hledal:
- ukázka toho, co píšu výše: https://doc.nette.org/…rt/home-page#… (akorát do databáze se sahá až v render metodě – to jde taky, ale není to úplně praktické)
- životní cyklus presenteru: https://doc.nette.org/…n/presenters#… (vysvětlené, k čemu jsou jednotlivé metody v presenteru)
- routy: https://doc.nette.org/…tion/routing#…
Editoval dakur (1. 10. 2020 15:28)