Formular v presentery a „vykreslenie“ v latte
- GoLaLa
- Člen | 13
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
- Uč se nejdřív PHP
- Pak se pořádně nauč principy OOP a návrhové vzory, best practices
- Pročti si dokumentaci Nette – netvrď, žes to za dva dny stihl
- Pracuj s Nette a ptej se na konkrétní problémy
Editoval Michal Vyšinský (25. 11. 2014 15:05)
- Mysteria
- Člen | 797
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
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.
- Predpokladám, že chceš, aby sa search zobrazoval na všetkých stránkach – createCompoentSearchForm v BasePresenter.
- Použi Nette\Forms\Form, nastav mu metódu odosielania get a akciu na link Search:default.
- Pridaj vyhľadávacie pole a submit button.
- Aby sa vykresloval na všetkých stránkach, pridaj si {control searchForm} do @layout.latte.
- Vyskúšaj, či sa ti vykreslí a či sa ti odosiela (po odoslaní by si mal mať v url ?niečo=hodnota).
- 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…
- GoLaLa
- Člen | 13
Ď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
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
mkoubik napsal(a):
@japiavaren: spíš bych použil
Nette\Application\UI\Form
klasicky POSTem, vonSuccess
přesměroval.
A ja by som zase nepresmerovaval… načo ;)
- GoLaLa
- Člen | 13
Ď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