Jak správně udělat filtr v NETTE

DETAIL
Člen | 33
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

@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
+
0
-

Jinak v dokumentaci to je, jen možná v jiné formě než jsi hledal:

Editoval dakur (1. 10. 2020 15:28)