odmazaní mezery na začátku vstupu form

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

Čau chtěl bych se zeptat jestli je možné že kdyz do form text vložím text " 12, 12 " – jako ze začíná mezerou
tak že nette tu mezeru odmaže?

A jak můžu udělat aby to tu mezeru neodmazalo?

Díky

Editoval Domki (21. 9. 2012 15:30)

Majkl578
Moderator | 1364
+
0
-

Pravděpodobně budeš muset podědit TextInput a překrýt metodu sanitize tak, aby nepoužívala Strings::trim.

Domki
Člen | 310
+
0
-

A to musim v presenteru? Pred tím nez to pouziju takze pred createComponentfldfdForm
?

ViPEr*CZ*
Člen | 813
+
0
-

Domki napsal(a):

A to musim v presenteru? Pred tím nez to pouziju takze pred createComponentfldfdForm
?

Co? Majkl o koze a otázka o voze? Co musíte v presenteru? Vždyť to majkl jasně napsal, podědit, přepsat jednu metodu, tak aby nemazala mezeru a použít? Možná tomu nerozumím, ale ptáte se kde máte dědit… jestli v presenteru?

Domki
Člen | 310
+
0
-

Ano kde mám dědit jestli v tom preseteru kde to budu pouziat udelat novu tridu a du zdedit
A nebo to udelat ve slozce libs

ViPEr*CZ*
Člen | 813
+
0
-

Domki napsal(a):

Ano kde mám dědit jestli v tom preseteru kde to budu pouziat udelat novu tridu a du zdedit
A nebo to udelat ve slozce libs

No v tom případě bych se mrknul na nějaký základy OOP.

Domki
Člen | 310
+
0
-

No ne mě de jen o to jestli v presenteru jako v tom souboru.
A nebo nekdě odděleně

ViPEr*CZ*
Člen | 813
+
0
-

Domki napsal(a):

No ne mě de jen o to jestli v presenteru jako v tom souboru.
A nebo nekdě odděleně

No ne a mně jde o to, aby jste si to přečetl!
Na to se snad ani nemůžete ptát! Budete dělat novou třídu, která bude potomkem jiné třídy. Slovo presenter tu nemá vůbec co dělat. Tam tu třídu můžete tak maximálně použít.

Domki
Člen | 310
+
0
-

Vy mě asi nechápete zkusím to jinak.
Když chci zdědit třídu z libs/nette/forms/control/TextInput
tak musím nekde vytvorit tu novou tridu TextInputMuj kde bude extends TextInput…překrytí tý metody…

Ale nevím kam mám tu novou třídu umístit jako do jakyho souboru, a pak jak docílím toho aby se pouzila ta prekryta metoda ze zdedeny tridy TextInputMuj v presenteru kde ted pouzivam tu metodu z TextInput, kdyz ten formular vytvarim new Form()

A OOP mám nastudovany. Ale když v javě dedím překryju tak proste mam jednu slozku v tom soubory trídy, a to chapu

Ale tady nevím kam ten kod mam napsat

jtousek
Člen | 951
+
0
-

Každá třída by měla být v samostatném souboru – až na velmi specifické případy.

Jo a nebudeš moct přidávat prvek pomocí addText, ale budeš muset použít addComponent(new MujTextInput).

Editoval jtousek (21. 9. 2012 18:33)

Domki
Člen | 310
+
0
-

JO o to mi přesně šlo Díky
A ještě ten nový soubor by měl být hned ve složce libs a nebo ho muzu dat do libs/nette/forms/control/zdenovysoubor

?

jtousek
Člen | 951
+
0
-

Přímo do Nette rozhodně ne. Lepší je vymyslet si vlastní namespace (třeba Domki), v libs si udělat složku s tímto názvem a tam si dávat vlastní knihovny.

EDIT: Pokud vlastní NS nechceš tak prostě do libs.

Editoval jtousek (21. 9. 2012 18:43)

Domki
Člen | 310
+
0
-

Tak v libs mam
Aaa
– TextInputMuj.php
V tom tu tridu
a v presenteru

use Aaa\TextInputMuj;

a vytvoreni prvku:

$form->addComponent(new TextInputMuj('varianty', 'Varianty:', 60))->setDefaultValue($infZb->varianty)->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100);

A vypisuje to chybu

Class 'Aaa\TextInputMuj' not found search►
na řádku kde pridavam tu komponentu

Co s tím?

jtousek
Člen | 951
+
0
-

Do toho souboru přidej namespace Aaa;.

Domki
Člen | 310
+
0
-

Ano děkuji, a ted to ještě píše chybu
Missing argument 2 for Nette\Forms\Container::addComponent(),
na tom samém řádku:

$form->addComponent(new TextInputMuj('varianty', 'Varianty:', 60))->setDefaultValue($infZb->varianty)->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100);
jtousek
Člen | 951
+
0
-

To byl samozřejmě pseudokód, podívej se do API co to má za parametry.

Domki
Člen | 310
+
0
-

Aha.
Zkoušel jsem to nak najít a upravit tak sem zjistil ze by tam mělo být ještě jméno Tak jsem to upravil takhle:

$form->addComponent(new TextInputMuj('varianty', 'Varianty:', 60), "varianty")->setDefaultValue($infZb->varianty)->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100);

Ale takto to asi nema byt kyz tam mam dvakrat stejnej nazev jak bych to mel presne upravit?
a jeste ted mi to pise Call to undefined method Nette\Application\UI\Form::setDefaultValue()
A pred tím mi to v pohode nastavovalo def hodnotu.

jtousek
Člen | 951
+
0
-

Když říkám API myslím i API toho TextInputu. Konstruktor to jméno nechce.

https://api.nette.org/…xtInput.html

EDIT: A když se podíváš sem zjistíš, že addComponent ti nevrací tu komponentu ale ten kontejner – v daném případě objekt třídy Form. Mohl bych ti ty dva řádky napsat, ale věřím že to vymyslíš sám. ;-)

Editoval jtousek (21. 9. 2012 19:16)

Domki
Člen | 310
+
0
-

Jo tak to s tím nazvem už chápu.

Akorat to druhy, to že vrací kontejner sem v api již našel, ale co z toho vychází že nemuzu pouzít tu metodu setDefaultsvalue?
Nebo jak nastavím def.hodnotu, a max delku inputu ted?

jtousek
Člen | 951
+
0
-

Takže nevymyslíš. No dobře. Metodu setDefault má ten input = komponenta. Máš tedy dvě možnosti:

$input = new \Aaa\TextInputMuj('Varianty:', 60);
$input->setDefaultValue($infZb->varianty)
	->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100);
$form->addComponent($input, 'varianty');

Nebo:

$form->addComponent(new \Aaa\TextInputMuj('Varianty:', 60), 'varianty');
$form['varianty']->setDefaultValue($infZb->varianty)
	->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100);

Nebo (PHP 5.4 only!):

$form->addComponent(
	(new \Aaa\TextInputMuj('Varianty:', 60))
		->setDefaultValue($infZb->varianty)
		->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100),
	'varianty');

Mimochodem když máš vlastní namespace Aaa (doporučuji přejmenovat) tak už ta třída může klidně být jen TextInput. Že to není ten z Nette ale ten tvůj je jasné z toho namespace.

Domki
Člen | 310
+
0
-

JO super už to funguje dík.
No já jsem zkoušel něco jako:

$form->addComponent(new TextInputMuj('Varianty:', 60)->setDefaultValue($infZb->varianty)->addRule(Form::MAX_LENGTH, 'Varianty nesmí mít vice jak 100 znaků.', 100), 'varianty');

Ale to mi blikal cervene už netBeans
A ted kdyz tadyna to koukám tak je asi spatne ta konstrukce new Aaa()->…, ze musím prvne vytvorit instanci a az pak na ni volad metody?

JInak to namespace mas pravdu, to si i vzpominam že sem četl ze kdyz jsou v jinem namespace tak muzou mit stejnej nazev.

Tak ještě jednou moc díky

jtousek
Člen | 951
+
0
-

new Trida()->… bohužel nefunguje no. V PHP 5.4 funguje ta varianta (new Trida())->… jak už jsem psal. V 5.3 musíš tu instanci mít v proměnné a pak můžeš teprve něco volat. Anebo by ti tu instanci musela vrátit nějaká funkce (ne operátor new).

Domki
Člen | 310
+
0
-

jj No vzhledem k tomu ze mam php 5.3 a sem rad ze mi tu 5,3 na hostingu vubec nahrali tak to s tou 5,4 nepude.
Ale kdyz uz vím ze tu musím mít instanci v promenné a az pak muzu nastavovat tak je to ok

Díky za pomoc a vysvětlení :-)

Domki
Člen | 310
+
0
-

Chjo tak ještě otázku i když nevím no.
Když jsem to nahrál na hosting tak mi to do logu ulozi chybu
Class ‚Aaa\TextInput‘ not found
na tomto radku:
$input = new \Aaa\TextInput(‚Varianty:‘, 60);
Jinak v libs/Aaa tam tu tridu mam

Jan Mikeš
Člen | 771
+
0
-

Vymaz obsah slozky temp. RobotLoader ma zacachovane pravdepodobne neaktualni informace o tridach.

Domki
Člen | 310
+
0
-

No vidíš, že mě taková věc nenapadla.
Díky.