chybové hlášky u polí zkrácených {input..}
- ondraLE
- Člen | 23
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="[{"op":":filled","msg":"Položka je povinná"},{"op":":minLength","msg":"název musí mít min. 5 znaků","arg":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 | 871
@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 | 871
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 | 23
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 | 871
@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 | 23
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!