Použití stejného formuláře ve více presenterech

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

Zdravím,

potřebuji použít formulář ve více presenterech a tak jsem šel tímto způsobem

.

Výsledkem je:

use Nette\Application\UI,
    Nette\ComponentModel\IContainer;

class PouzFiltrForm extends UI\Form
{
	private $db;

    public function __construct(IContainer $parent = NULL, $name = NULL)
    {

        parent::__construct($parent, $name);


		$this->setMethod('POST');

		$this->addText('pole_1', 'Pole 1:', 10, 10);
		$this->addText('Pole_2', 'Pole 2:', 10, 10);

		$this->addSubmit('ShowResult', 'Vyber');





}

Protože však potřebuji formulář vypsat a vystylovat ručně, potřeboval bych vědět, jak daný formulář spojit s daným souborem .latte, která je vedle třídy v adresáři app/forms se stejným názvem, ve které budu mít formulář ručně vystylován, a jak se na tento formulář odkazovat v této šabloně.

Ještě mi není jasné, jak se v rámci tohoto formuláře dostat k databázi, kterou mám zaregistrovanou v config.neon, jako service.

ViPEr*CZ*
Člen | 817
+
0
-
  1. formář se vykresluje v metodě render
  2. k databázi se dostane jednoduše… předejte si do této třídy ukazatel na onu službu
awsickness
Člen | 98
+
0
-

udelej si komponentu kde si do construct predas vsechno copotrebujes idealni uz vylsedek nejakeho db dotazu /pripadne db objekct a vyber potrebny vysledek/ v metode render jen pripoj template podle toho co potrebujes vykreslit a hotovo.
tovarnu na komponentu napis do nejakeho shared presenteru a pak ji muzes volat kdy potrebujes.

pernip01
Člen | 21
+
0
-

Ok, dobře, ale kde v komponentě mám vytvořit samotnou konstrukci toho formuláře. Dle mně mám tři možnosti:

  1. v funkci construct
  2. v funkci render
  3. vytvořit si samostatný formulář jako komponentu v daném presenteru a ten pak předat v konstruktorem komponentě ve které provedu její vystylování pomocí šablony.

nebo to jde nějak jednodušeji, lépe a čistěji?

díky

ViPEr*CZ*
Člen | 817
+
0
-

pernip01 napsal(a):

Ok, dobře, ale kde v komponentě mám vytvořit samotnou konstrukci toho formuláře. Dle mně mám tři možnosti:

  1. v funkci construct
  2. v funkci render
  3. vytvořit si samostatný formulář jako komponentu v daném presenteru a ten pak předat v konstruktorem komponentě ve které provedu její vystylování pomocí šablony.

nebo to jde nějak jednodušeji, lépe a čistěji?

díky

??? Podle návodu (examplu) si vytvořte komponentu. Samotné prvky formu pak můžete klidně iniciovat přes konstruktor komponenty. Ve funkci render komponenty jak jsme již zmiňovali nastavte šablonu ve které vykreslíte onen form jak potřebujete. A celou komponentu pak použijete v nějaké šabloně Presenteru.

Editoval ViPEr*CZ* (25. 3. 2012 16:51)

awsickness
Člen | 98
+
0
-
class Formular extends Control{

	public class _construct($db,$param1,$param2){
		parent::_construct()
		.....
	}

	public function CreateComponentNazevFormulare(){
		$form = new Form()
	......
	}

	public function render(){
	 $template = $this->getTemplate();
	/*zde se nasetuje pomoci nejakeho parametru latte*/
	$template->render();
	}
}

class BasePresenter extends Presenter{

	public function CreateComponentFormular(){
		return new Formular($db,$param1,$param2);
	}

}
pak jen staci dat nekde v latte
{control 'formular'}
nebo
{control 'formular-nazevFormulare}'}

psal jsem to z patra ale nejak tak bych to delal ja osobne mam vsechno v configu a taham si je pak jednotlive.

pernip01
Člen | 21
+
0
-

bomba, díky