Formular v presentery a „vykreslenie“ v latte

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
GoLaLa
Člen | 13
+
-4
-

Dobrý večer, chcel by som si spraviť vyhladávanie na webe tak aby bolo hore (tak ako je tu hore na pravo). Poradil by mi prosím niekto, ako pomenovať funkcie v presentery a následne ako to vykresliť v modely (template)? S nette robím asi 2 dni a stále toho dosť nechápem. Ďakujem za všetky rady a odpovede

Michal Vyšinský
Člen | 608
+
+4
-
  1. Uč se nejdřív PHP
  2. Pak se pořádně nauč principy OOP a návrhové vzory, best practices
  3. Pročti si dokumentaci Nette – netvrď, žes to za dva dny stihl
  4. Pracuj s Nette a ptej se na konkrétní problémy

Editoval Michal Vyšinský (25. 11. 2014 15:05)

Mysteria
Člen | 797
+
+1
-

Na vyhledávání prakticky nic není. V nejjednodušší formě prostě formulář o jednom poli, kdy po jeho odeslání si předáš do render metody jako parametr jeho obsah. No a pak prostě místo výběru všech dat z databáze vybereš jenom ty, který obsahují daný výraz.

Ale pokud neumíš práci s presenterama, formulářema, nevíš jakou mají návaznost šablony na akce presenterů, tak to prostě neuděláš. A web za tebe nikdo programovat celej nebude, takže začni tím, co je zmíněno výše.

japlavaren
Člen | 404
+
0
-

Ahoj,

pamatám si, že keď som z Nette začínal, nad search formom som strávil 2 dni, kým som dosiahol, čo chcem.

  1. Predpokladám, že chceš, aby sa search zobrazoval na všetkých stránkach – createCompoentSearchForm v BasePresenter.
  2. Použi Nette\Forms\Form, nastav mu metódu odosielania get a akciu na link Search:default.
  3. Pridaj vyhľadávacie pole a submit button.
  4. Aby sa vykresloval na všetkých stránkach, pridaj si {control searchForm} do @layout.latte.
  5. Vyskúšaj, či sa ti vykreslí a či sa ti odosiela (po odoslaní by si mal mať v url ?niečo=hodnota).
  6. V SearchPresenter si vytvor renderDefault, s parametrom podľa názvu tvojeho text buttonu. Vo vnútri funkcie si ho „dump($parameter)“-ni a ak tu máš hodnotu, ktoú si hľadal, máš vyhraté…

Skúšaj, ideálne sa regni na github a tam daj, čo si stvoril, nech vidíme kód a pýtaj sa čo nechápeš/ti nefunguje…

mkoubik
Člen | 728
+
+3
-

@japiavaren: spíš bych použil Nette\Application\UI\Form klasicky POSTem, v onSuccess přesměroval.

Editoval mkoubik (26. 11. 2014 0:08)

GoLaLa
Člen | 13
+
0
-

Ďakujem za rady, spavil som to takto:
BasePresenter.php

<?php

namespace App\Presenters;

use Nette,
	App\Model;



class BasePresenter extends Nette\Application\UI\Presenter
{
	protected function createComponentSearchForm()
	{
		$form = new Nette\Forms\Form;
		$form->addText('cohlada', '...');
		$form->addSubmit('hladaj', 'Vyhladať');
		$form->onSuccess[] = array($this, 'SearchFormSubmitted');
		return $form;
	}
}

a potom som do @layout.latte dal {control SearchForm}
formulár ani nevykreslilo ale hnev vyhodilo:
Component with name ‚SearchForm‘ does not exist

Editoval GoLaLa (26. 11. 2014 0:32)

David Matějka
Moderator | 6445
+
0
-

https://doc.nette.org/…n/presenters#…

Názvy komponent začínají vždy malým písmenem, přestože se v názvu továrničky píší s velkým.

japlavaren
Člen | 404
+
0
-

mkoubik napsal(a):

@japiavaren: spíš bych použil Nette\Application\UI\Form klasicky POSTem, v onSuccess přesměroval.

A ja by som zase nepresmerovaval… načo ;)

GoLaLa
Člen | 13
+
0
-

Ďakujem za upozornenie prerobil som to na

protected function createComponentsearchForm()

a v šablone mam {control SearchForm} no aj tak to nejde a stále mi ukazuje „Component with name ‚SearchForm‘ does not exist“

Škusal som formulár dať aj do HomepagePresenter.php no ani tak to nejde tak som to radšej nechal v BasePresenter.php ale nejde to tak ani tak

Etch
Člen | 403
+
0
-

@GoLaLa:

Na to už ti odpovídal @matej21. Použij první písmeno malé:

{control searchForm}
Mysteria
Člen | 797
+
0
-

@GoLaLa Špatně jsi to pochopil:

protected function createComponentSearchForm()

{control searchForm}
GoLaLa
Člen | 13
+
0
-

Ďakujem, funguje to