Tutoriál – triviální blog

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

Když jsem ve čtvrtek pozoroval, jak se na celé aplské údolí snáší první srpnový sníh (nekecám!) a přemítal nad férovou roamingovou cenou 24Kč/100Kb, padla na mě velká nuda. A tak jsem se rozhodl obohatit Nette o něco, co má snad každý framework: tutoriál na blog, pokud možno za 20 minut. (to jen tak na okraj)

Chtěl bych se zeptat, jak to tady chodí. Můžu někde ve wiki vytvořit koncept, kam to přehodím, naformátuju a kde se o tom můžeme pobavit?

Aby jste věděli o co jde, http://www.clipboard.cz/8ef, ve skutečnosti tam jsou navíc i screenshoty atd…

22
Člen | 1478
+
0
-

kazdej tutorial se hodi :-)
navstevni kniha od Pandy: https://pla.nette.org/…ivajici-ajax

Honza Kuchař
Člen | 1662
+
0
-

zadáš do prohlížeče URL na kterou chceš něco napsat a začneš psát. :)

https://wiki.nette.org/…ablabladdfgd

Honza Kuchař
Člen | 1662
+
0
-

Link prozatím hoď na fórum, link na rozcestník přidáme, až to bude hotové. ;)

PJK
Člen | 70
+
0
-

Honza Kuchař napsal(a):

Link prozatím hoď na fórum, link na rozcestník přidáme, až to bude hotové. ;)

Jasne, očekávám, že to předtím zkoukne pár lidí a vyladíme to.

22
Člen | 1478
+
0
-

mně se to líbí → https://pla.nette.org/…tvarime-blog?…, těším se na další…

Patrik Votoček
Člen | 2221
+
0
-

Cool jen bych měl pár připomínek…

  • Nebylo by od věci dodržovat Nette Coding Standard a místo mezer pro odsazování používat TABulátory.
  • obecně je preferováno pro formuláře používat druhou variantu továrničky
  • $f jako název proměné pro formulář mě nepřipadá jako šťastná volba
  • není použit cizí klíč
  • chválím použití {plink} místo {link}
  • napopak nechválím {widget} místo {cotrol} (Můžete se také místo makra widget setkat s jeho starším aliasem control. – je lež je to přesně naopak)
  • pokud odeslu komentar nedostanu informaci ze je to OK… (chtelo by to flashMessage)

Preferovanější továrnička pro formuláře.

protected function createComponentMyForm($name)
{
	$form = new AppForm($this, $name);
	//...
}
Majkl578
Moderator | 1364
+
0
-

Stručně jsem to prošel, ale i tak sem hodím nějaké mé výhrady:

  • Nelíbí se mi coding standard (odsazování, zapomínání mezer, nepoužití public u statických metod).
  • Callbacky je vhodnější vytvářet pomocí callback() (ne array()).
  • Místo extenze mysql bych doporučil použití mysqli.
  • U tabulek bych raději viděl InnoDB a cizí klíče.
  • V šablonách presenterů mi přijde vhodnější link namísto plink.
  • Hodil by se odkaz na funkční aplikaci – výsledek tutoriálu (nebo této části v případě vícedílného).
  • „Sám se těmto úlohám budu věnovat v budoucích tutoriálech (tedy doufám, moje lenost je nevyzpytatelná mrcha).“ Tohle bych vyhodil, sebekritika se do tutoriálu nehodí.
PJK
Člen | 70
+
0
-

vrtak-cz napsal(a):

Cool jen bych měl pár připomínek…

  • Nebylo by od věci dodržovat Nette Coding Standard a místo mezer pro odsazování používat TABulátory.

Pan Grudl je mi vzorem ve všem kromě formátování kódu :). Ale máš pravdu, přdělám. taby se zprasily kopírováním…

  • obecně je preferováno pro formuláře používat druhou variantu továrničky

předělám

  • $f jako název proměné pro formulář mě nepřipadá jako šťastná volba

předělám

  • není použit cizí klíč

omlouvám se, učil mě bastlič :)

  • chválím použití {plink} místo {link}

děkuju.

  • napopak nechválím {widget} místo {cotrol} (Můžete se také místo makra widget setkat s jeho starším aliasem control. – je lež je to přesně naopak)

opravím, jak stárnu tak blbnu

  • pokud odeslu komentar nedostanu informaci ze je to OK… (chtelo by to flashMessage)

to je otázka… na jednu stranu možná stojí za to flash zprávy předvést, na straně druhé je to u takové ukázky skoro zbytečné a dělá to příklad už tak extrémně složitý ještě složitějším
>

Preferovanější továrnička pro formuláře.

protected function createComponentMyForm(AppData $form)
{
	$form = new AppForm($this, $name);
	//...
}
PJK
Člen | 70
+
0
-

Majkl578 napsal(a):

Stručně jsem to prošel, ale i tak sem hodím nějaké mé výhrady:

  • Nelíbí se mi coding standard (odsazování, zapomínání mezer, nepoužití public u statických metod).

předělám

  • Callbacky je vhodnější vytvářet pomocí callback() (ne array()).

nevím jestli vyloženě vhodnější, ale asi názornější, předělám

  • Místo extenze mysql bych doporučil použití mysqli.

pravda, typo

  • U tabulek bych raději viděl InnoDB a cizí klíče.

v čem přesně je výhoda innodb oproti myisam v demoaplikaci s 4 příspěvky a pár komentáři?

  • V šablonách presenterů mi přijde vhodnější link namísto plink.

To si s vrtakem prosím vyjasněte mezi sebou :D. Ale vzhledem k tomu, že odkazuji na samostatnou akci presenteru, je plink to pravé, ne?

  • Hodil by se odkaz na funkční aplikaci – výsledek tutoriálu (nebo této části v případě vícedílného).

S tím počítám, jen otázka: Má tento web nějaký (nepovšimnutý) prostor pro dema, nebo to mám hodit k sobě (není to žádný problém, jen jestli by nebylo elegantnější a výhodnější mít ukázku na oficiálním serveru)?

  • „Sám se těmto úlohám budu věnovat v budoucích tutoriálech (tedy doufám, moje lenost je nevyzpytatelná mrcha).“ Tohle bych vyhodil, sebekritika se do tutoriálu nehodí.

+1

22
Člen | 1478
+
0
-
protected function createComponentMyForm(AppData $form)
{
      $form = new AppForm($this, $name);
      //...
}

nestačí to zapsat?

protected function createComponentMyForm()
{
      $form = new AppForm();
      //...
}
Patrik Votoček
Člen | 2221
+
0
-

PJK napsal(a):

  • U tabulek bych raději viděl InnoDB a cizí klíče.

v čem přesně je výhoda innodb oproti myisam v demoaplikaci s 4 příspěvky a pár komentáři?

Třeba právě v tom že MyISAM neumí cizí klíče

  • V šablonách presenterů mi přijde vhodnější link namísto plink.

To si s vrtakem prosím vyjasněte mezi sebou :D. Ale vzhledem k tomu, že odkazuji na samostatnou akci presenteru, je plink to pravé, ne?

Už jsme se kvuli tomu pohádali… A zjistili že se neshodneme

  • Hodil by se odkaz na funkční aplikaci – výsledek tutoriálu (nebo této části v případě vícedílného).

S tím počítám, jen otázka: Má tento web nějaký (nepovšimnutý) prostor pro dema, nebo to mám hodit k sobě (není to žádný problém, jen jestli by nebylo elegantnější a výhodnější mít ukázku na oficiálním serveru)?

Nemá (z bezpečnostních důvodů)

22 napsal(a):

...
nestačí to zapsat?
...

Ne! Jde o to aby se provedlo připojení do stromu komponent co nejdříve.

PJK
Člen | 70
+
0
-
  • V šablonách presenterů mi přijde vhodnější link namísto plink.

To si s vrtakem prosím vyjasněte mezi sebou :D. Ale vzhledem k tomu, že odkazuji na samostatnou akci presenteru, je plink to pravé, ne?

Už jsme se kvuli tomu pohádali… A zjistili že se neshodneme

Můžeš mi dát link? Zajímá mě to (vzhledem k tomu, že si celkem stojím za plink) a nemůžu to najít…

Jinak syntaxe opravena, tak to prosím zkoukni.
Ještě přidám:

  • demo
  • chybějící screen
  • zdroják
  • testovací data
  • opravím strukturu db (asi je čas naučit se sql :( )
  • je potřeba rozhodnout o té flash zprávě. mě to napadlo už když jsem to psal, jenomže pak jsem si vzpomněl, jak jsem byl v začátcích sám úplně vykulený z toho, jak to všechno samo od sebe funguje. Protože tohle je snad ještě jednodušší něž quickstart, nejsem si tím pořád jistý…
Ondřej Mirtes
Člen | 1536
+
0
-

Vrták: Tu tvojí továrničku jsem nějak nepochopil:

protected function createComponentMyForm(AppData $form)
{
      $form = new AppForm($this, $name);
      //...
}

Asi se ti tam něco smíchalo ;) Navíc fakt stačí ten jednodušší tvar, který víc oku a je míň WTF:

protected function createComponentMyForm()
{
      $form = new AppForm;
      //...
}

setDefaults v továrničce jde už dělat i bez připojení k rodiči, jediné, na co je brzké připojení potřeba, je tuším setAction/getAction, kterou stejně v MVC v 99% nepoužíváš.

Majkl578
Moderator | 1364
+
0
-

Ondřej Mirtes napsal(a):

setDefaults v továrničce jde už dělat i bez připojení k rodiči, jediné, na co je brzké připojení potřeba, je tuším setAction/getAction, kterou stejně v MVC v 99% nepoužíváš.

Co naplnění daty pro potřebu vytváření formuláře (dynamický počet prvků)?

Honza Kuchař
Člen | 1662
+
0
-

Také jsem něco poopravoval. Mrni na to a případně vrať, co se ti nelíbí.

22
Člen | 1478
+
0
-

Může tedy někdo upřesnit, jak je to tedy s těmi formuláři:

protected function createComponentMyForm(AppData $form)
{
      $form = new AppForm($this, $name);
      //...
}

versus

protected function createComponentMyForm()
{
      $form = new AppForm;
      //...
}

… eventuelně uvést příklad, ve kterém ty parametry lze využít? Měl jsem za to, že je to pozůstatek z období, kdy formulář nešlo udělat přes továrničku. Sám to nikde nepoužívám a neměl jsem s tím ještě žádný problém.

Ondřej Mirtes
Člen | 1536
+
0
-

Továrnička

protected function createComponentMyForm(AppData $form)
{
      $form = new AppForm($this, $name);
      //...
}

je nesmysl. Třídu AppData neznám a ta továrnička předává parametr, který hned na prvním řádku přepíšu? He?

Co v Nette funguje, je:

protected function createComponentMyForm($name)
{
      $form = new AppForm($this, $name);
      //...
}

přičemž v $name se předá lcfirst(název metody za createComponent) (tedy myForm).

Ale nevidím v tom smysl, od úpravy formulářů, které to anchorování tak brzo už nepotřebují, není toto brzké připojování potřeba.

Majkl578: Co mi brání mít nějaký foreach v továrničce nebo v action* metodě, stále bez brzkého připojení k rodiči?

PJK
Člen | 70
+
0
-

Vážení, „last call“, pokud máte nějaké připomínky ještě před přidáním na stránku tutoriálů, rychle sem s nimi…

  • vrtakovy a majklovy připomínky jsem zohlednil
  • děkuji všem za opravy chib a peřlekpů

https://pla.nette.org/…tvarime-blog

http://nette-blogtut.pavelkalvoda.com/ -btw, neznáte nějaký takový hostmonster s php 5.3+ ?

Patrik Votoček
Člen | 2221
+
0
-

Ondřej Mirtes napsal(a):

Továrnička

je nesmysl. Třídu AppData neznám a ta továrnička předává parametr, který hned na prvním řádku přepíšu? He?

Sorry upsal jsem se…

Ale nevidím v tom smysl, od úpravy formulářů, které to anchorování tak brzo už nepotřebují, není toto brzké připojování potřeba.

Pokud je získání výchozích dat náročnější, například dotazem do databáze, můžeme jejich nastavení uzavřít do podmínky if ($form->isSubmitted()) { … }. Tato metoda bude ale fungovat pouze v případě, že formulář již je připojen k rodiči jako komponenta. ($form = new Nette\Application\AppForm($this, $name);)

Ondřej Mirtes
Člen | 1536
+
0
-

Ta poznamka o tovarnicce byla pro 22, ja poznal, ze je to preklep :)

isSubmitted – Ja jsem nesetrny a vychozi data nastavuju, i kdyz se jedna o odeslani formulare. Nepovazuju to za chybu, spis naopak – formular by mohl chtit s temi daty nejak pracovat.

Patrik Votoček
Člen | 2221
+
0
-

Jasný no… Já to dělám taky… Já to uvedl jenom jako příklad toho proč připojit formulář hned (je to méně náchylné na potencionální chyby).

Edit: tak jsem to prolít a už snad nemám co vytknout. Jenom snad aby jsi pro příště používal takové to zaškrtávátko „minor edit“ a nespamoval nám changes

PJK
Člen | 70
+
0
-

Tak jsem to ještě jednou prošel, zkusil jsem si tu aplikaci vytvořit podle instrukcí (chybělo pár drobností) a myslím, že je to hotové.

Vrták: sorry za tu historii, popisoval jsem si to tak pro sebe a neveděl jsem, že se to ještě promítně někam jinam…