chybové hlášky u polí zkrácených {input..}

ondraLE
Člen | 13
+
0
-

Mám šablonu v BS5, která má předdefikované prvky pro chybové hlášky přímo u pole. , mám např. název min 5 znaky atd.

latte:

<div class="col-md-4">
			    {label name, class:"form-label" /}
			    {input name, class:"form-control"}
			    <span class=invalid-feedback n:ifcontent>{inputError name}</span>
</div>

potřebuji dostat ještě podmíněně do inputu další class, pokud má input inputError, jako to vypisuji níže,

tedy něco jako:

{input name, class:form-control {if input-má-error}is-invalid{/if}}

aby výsledkem byl v případě chyby vyrenderovaný kód:

<label for="frm-resourceForm-name" class="form-label">Název suroviny</label>
<input type="text" name="name" id="frm-resourceForm-name" required="" data-nette-rules="[{&quot;op&quot;:&quot;:filled&quot;,&quot;msg&quot;:&quot;Položka je povinná&quot;},{&quot;op&quot;:&quot;:minLength&quot;,&quot;msg&quot;:&quot;název musí mít min. 5 znaků&quot;,&quot;arg&quot;:5}]" value="2" class="form-control is-invalid">
<span class="invalid-feedback">název musí mít min. 5 znaků</span>

existuje cesta dát do zkráceného zápisu {input $name…} nějakou podmínku, právě pro atribut class?
Díky.

m.brecher
Generous Backer | 714
+
0
-

@ondraLE

Ahoj, v dokumentaci jsem našel odkaz na chyby ve formulářovém prvku:

https://doc.nette.org/…ms/rendering#…

je to ten kód:

<div n:class="$form[username]->hasErrors() ? 'error'">
	{input username}
	{inputError username}
</div>

Takže někudy tudy doporučuji jít ;)

m.brecher
Generous Backer | 714
+
+1
-

Psáno z hlavy:

<div class="col-md-4">
    {label name, class:"form-label" /}
    {var $errorClass = $form['name']->hasErrors() ? ' is-invalid'}
    {input name, class:"form-control$errorClass"}
    <span class=invalid-feedback n:ifcontent>{inputError name}</span>
</div>

Nette formuláře ale mají javascriptovou validaci vedle serverové, takže pokud se vyvolá chyba javascriptem Nette formulářů (což je běžný případ), tak latte žádnou chybovou třídu do inputu dokreslit nemůže. Tento způsob se hodí pro chyby vyvolané na serveru např. při validaci proti databázi, pak je potřeba chyby do formuláře ručně vložit – viz dokumentace.

Pokud by se třída is-invalid měla nastavovat již v javascriptu, tak tohle bych také chtěl někdy umět. Tam zřejmě bude potřeba přidat nějaký javascript k tomu frameworkovému, ale netuším jak :(

Editoval m.brecher (8. 3. 2023 21:16)

ondraLE
Člen | 13
+
0
-

m.brecher napsal(a):

Psáno z hlavy:

<div class="col-md-4">
    {label name, class:"form-label" /}
    {var $errorClass = $form['name']->hasErrors() ? ' is-invalid'}
    {input name, class:"form-control$errorClass"}
    <span class=invalid-feedback n:ifcontent>{inputError name}</span>
</div>

tohle jede, jen jsem to dal do jedné řádky, bez dalších nastavování proměnných:

{input name, class: $form['name']->hasErrors() ? 'form-control is-invalid' : 'form-control' }

jen poslední malý dotaz, rád bych třídy sloučil, resp. sloučil řetězec názvů, pokud dám:

 {input name, class:'form-control '.$form['name']->hasErrors() ? 'is-invalid'}

mám v případě chyby jen class is-invalid, to form-control není..

m.brecher
Generous Backer | 714
+
+2
-

@ondraLE

jen poslední malý dotaz, rád bych třídy sloučil, resp. sloučil řetězec názvů,

 {input name, class:'form-control '.$form['name']->hasErrors() ? 'is-invalid'}

Priority vyhodnocování php výrazů, vyhodnocují se zleva, tohle by mělo fungovat:

 {input name, class:'form-control '.($form['name']->hasErrors() ? 'is-invalid')}
ondraLE
Člen | 13
+
0
-

m.brecher napsal(a):

@ondraLE

jen poslední malý dotaz, rád bych třídy sloučil, resp. sloučil řetězec názvů,

 {input name, class:'form-control '.$form['name']->hasErrors() ? 'is-invalid'}

Priority vyhodnocování php výrazů, vyhodnocují se zleva, tohle by mělo fungovat:

 {input name, class:'form-control '.($form['name']->hasErrors() ? 'is-invalid')}

skvělé, funguje, díky!