změna class name pro input ve formu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

Zdravim,

$form->addText('sklad', 'Skladem kusů:')
			->addRule(Form::FILLED, 'Vyplňte sklad.')
			->addRule(Form::NUMERIC, 'Sklad musí být číslo.')
		  ->getControlPrototype()
      ->class('w60');
<input gtbfieldid="70" **class="w60 text"** name="sklad" id="frmaddgoodsForm-sklad" value="" type="text">

Potřebuji přehodit na class=„text w60“ nebo jen class=„w60“, ale nevim jak na to, jak to mam udelat?Thx

westrem
Člen | 398
+
+1
-

Aky je (z tvojho pohladu) rozdiel medzi?

class="w60 text"
a
class="text w60"

Podla mna ziadny.

Ak by si vsak potreboval tu druhu variantu tak pouzi:

// pouzivam pristup cez pole aby som skratil zapis tu na fore, kludne to nahrad v tvojej definicii
$form['sklad']->getControlPrototype()->setClass('w60');
masterr
Začátečník | 141
+
0
-

No jde mi o dědičnost, když mám class=„w60 text“ tak nejprve dědí od w60 a pak od text, jenže já to potřebuji naopak, takle se mi přepíše hodnota width.

Nebo tam dát jen to w60.

To tvoje mi nefunguje pořád je to stejný. Dá se nějak nastavit aby tam nebyla ta třída text?

redhead
Člen | 1313
+
0
-

Já si nejdřív taky myslel, že pořadí ovlivňuje dědičnost. Ovšem když jsem to zkoušel, stejně si na pořadí nezáleželo.. Tak nevím.

westrem
Člen | 398
+
0
-

No jde mi o dědičnost, když mám class=„w60 text“ tak nejprve dědí od w60 a pak od text

Prepac, ale odkial mas taku blbost? Trosku studovania ako funguju kaskadove styly: http://www.smashingmagazine.com/…should-know/http://www.smashingmagazine.com/…inheritance/

Ak sa ti prepisuje nieco z vlastnosti w60 tak ju mas uvedenu v CSSku

  1. skorej ako .text triedu
  2. s mensou konecnou kaskadou ako .text a preto ju prepisuje

Pouzi FireBug a budes vidiet co odkial sa taha.

Mozes ukazat aj kod ako mas s tym nastavovanim tried? Mam za to, ze Nette\Html to ma pekne pretazene a malo by to fungovat ..

Editoval westrem (12. 9. 2010 23:10)

MIKI
Člen | 34
+
0
-

Zdravim,
pridam sa aj ja do diskusie, pretoze prave aj ja mam podobny problem :)
Potrebujem zrusit pre controls, aby mi pridavalo triedu „text“, lebo tu uz pouzivam. Samozrejme, nebol by pre mna problem to zmenit, ale rad by som, ak by formular zbytocne nevypisoval, co tam nepotrebujem ;)

$form = new AppForm;
$form->addText('name', 'Name:', 60, 100)
     ->addRule(Form::FILLED, 'Musite vyplnit text!')
     ->getControlPrototype()->setClass('Ftext');

Ak to vykresli, stale tam je class=„Ftext text“

BTW k CSS, westrem ma pravdu, poriade velmi nezalezi na dedicnosti :)
Ak chces, aby pri triede w60 si mal sirku, ktoru nechces prepisat, napis to v css takto:

.w60
{
	width: 60px !important;
}

Toto Ti zabezpeci aby element s triedou w60 mal sirku stale 60px :)

Editoval MIKI (13. 9. 2010 9:36)

MIKI
Člen | 34
+
0
-

Super, nasiel som, ako sa to robi :) [metodou Pokus-Omyl]

$form = new AppForm;
$renderer = $form->getRenderer();
$renderer->wrappers['control']['.text'] = 'Ftext';
$renderer->wrappers['control']['.password'] = 'Ftext';

Toto nastavi class pre input, typu „text“ alebo „password“ na hodnotu ‚Ftext‘ :)

Editoval MIKI (13. 9. 2010 9:59)

westrem
Člen | 398
+
0
-

MIKI napsal

Ano ak len chces zmenit default triedu vo vypisovani, tak sa to robi cez wrapper, to ale ak spravne chapem nie je problem kolegu.

napis to v css takto:

Ehm, to je sice pekne ale ani toto ti vzdy nezaruci ze ta dlzka bude 60px. Proste vsetko zalezi od kaskady a od skore, ktore sa danemu pravidlu priradi.

MIKI
Člen | 34
+
0
-

westrem napsal(a):

MIKI napsal

Ano ak len chces zmenit default triedu vo vypisovani, tak sa to robi cez wrapper, to ale ak spravne chapem nie je problem kolegu.

Ak tam zada prazdny retazec, nebude mat ziadnu default triedu.
Ak ale chce len pre jeden element zmenit triedu, tak to netusim ako. Skusal som rozne varianty setClass(‚test‘, TRUE) [ako som to videl v zdrojaku k renderovaniu formularu], ale nic som nenasiel.
Bud je to bug, alebo je na to featura, ktora nikde nie je napisana :)

Pouzivam verziu Nette 0.9.5 (revision 5eb03f5 released on 2010–07–01)

westrem
Člen | 398
+
0
-

Vsak ale tu nie je o com diskutovat :). On chce aby sa mu korektne zobrazovala dlzka inputu. Classa sa pridava napr pomocou

$form['sklad']->getControlPrototype()->addClass('w60');

To moje prvotne uvedene setClass funguje tiez, avsak conventional renderer tie classy appenduje takze to nebude fungovat v tom zmysle, ze to nastavi iba tu jednu triedu, ale tiez len ako pridanie.

masterr ma ocividne chybu v CSS nie v PHP.

MIKI
Člen | 34
+
0
-

Suhlasim, ze sa to da riesit zmenou CSS, ale spominal aj moznost, aby tam mal class=„w60“, teda bez toho „text“ ktore tam renderer pridava.

Osobni si myslim, ze ak je to funkcia setClass(‚nieco‘), tak by sa to malo aj takto spravat, t.j. nastavit nie pridat (na to je tam predsa addClass()).
Ohlasim to ako chybu, ak je to teda spravanie v rendereri. (Mal som pocit, ze to nefunguje len mne, ale vidim, ze je to u viacerych)

BTW Aj tak diky, trochu som si pozrel tie wrappers ;)

westrem
Člen | 398
+
0
-

MIKI napsal
Ohlasim to ako chybu, ak je to teda spravanie v rendereri.

Ale aku chybu prosim ta? Vsak setClass funguje uplne korektne, ja som vravel, ze renderer (dufam, ze zo zjavnych dovodov) vyuziva addClass nie setClass, kedze sa vykonava po vytvaranu v tovarnicke a bolo by nepekne aby ti prepisoval tvoje nadefinovane triedy.