Widgety

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

Zdravím. Mohl by mi někdo vysvětlit, jaký je rozdíl ve funkcionalitě mezi tímto:

v presenteru

<?php

public function createComponentLoginForm() { ... }

?>

v šabloně

{control loginForm}

a tímto:

v presenteru

<?php

public function createComponentLoginForm() { ... }

public function renderLogin() {
  $this->template->form = $this['loginForm']
}

?>

v šabloně

{!$form}

? Děkuji mnohokrát.

redhead
Člen | 1313
+
0
-

Prakticky žádný, možná tak více psaní u 2. způsobu a 1. je hezčí (a makro widget má i pár fajn featurek). 1. způsob je v Nette novější (a je to takové best practice)

hurvajs
Člen | 86
+
0
-

No jestli se nemyslim (uz je relativne pozdni hodina), tak pomoci toho noveho zpusobu, tj. pres widget se formular vytvari az tehdy, kdyz je treba.

Lopata
Člen | 139
+
0
-

Jestliže chceš vykreslovat form pomocí conventional rendereru, tak varianta s {control loginForm} je elegantnější. Má však svá omezení. V praxi je mnohdy potřeba formulář vykreslit rozmanitěji. Ta první varianta je omezená pouze na

{control form errors}
{control form begin}
{control form end}

zatímco u té druhé lze vykreslovat formulář postupně:

<?php
{$form['jmeno_prvku']->label} <jakekolivHtml> {$form['jmeno_prvku']->control}
?>

To ale lze udělat i pomocí první variany pomocí šablonové proměnné $control:

<?php
{$control['loginForm']['jmeno_prvku']->label} <jakekolivHtml> {$control['loginForm']['jmeno_prvku']->control}
?>

Je s tím ale spousta psaní, které by mé nervy nevydržely po dobu vykreslování celého formu.
Pak ještě lze vytvořit Vlastní renderer