sandbox form.latte & bootstrap 5

MW
Člen | 615
+
0
-

Zdravím s prosím o nakopnutí :)

vycházím z posledního Sandboxu, kde se includuje v @layout.latte šablona form.latte:

{* for Bootstrap v3 *}
{define bootstrap-form $formName}
	<form n:name=$formName>
	<ul class=error n:ifcontent>
		<li n:foreach="$form->ownErrors as $error">{$error}</li>
	</ul>

	<div n:foreach="$form->controls as $name => $input"
		n:if="!$input->getOption(rendered) && $input->getOption(type) !== hidden"
		n:class="form-group, $input->required ? required, $input->error ? has-error">

		<div>{label $input class=>"form-label"}</div>

		<div class="mb-3">
			{if $input->getOption(type) in [text, select, textarea]}
				{input $input class => "form-control"}
			{elseif $input->getOption(type) === button}
				{input $input class => "btn btn-primary"}
			{elseif $input->getOption(type) === checkbox}
				<div class="form-check">
				    {input $input class => "form-check-input"}
				    {label $input class => "form-check-label"}
				</div>
			{elseif $input->getOption(type) === radio}
				<div class="radio">{input $input}</div>
			{else}
				{input $input}
			{/if}

			<span class=help-block n:ifcontent>{$input->error ?: $input->getOption(description)}</span>
		</div>
	</div>
	</form>
{/define}

a sekce pro checkbox mě neaplikuje class.. a ani nevykresluje samosatně ten label.

{elseif $input->getOption(type) === checkbox}
				<div class="form-check">
				    {input $input class => "form-check-input"}
				    {label $input class => "form-check-label"}
				</div>

Poradíte prosím, jak to tam dostat? Upravuji to pro Bootstrap ver 5

Díky moc!

MW
Člen | 615
+
0
-

Ještě dodám výstup:

<label for="frm-signInForm-remember"><input type="checkbox" name="remember" id="frm-signInForm-remember" autocomplete="off">Zapamatovat</label>

Asi bych potřeboval docílit

<label>Zapamatovat</label>
<input type="checkbox" name="remember" id="frm-signInForm-remember" autocomplete="off">

Díky!

dakur
Člen | 493
+
0
-

@MW Ahoj, podle mě se to do té větve vůbec nedostane, ale všechno skončí v else. Řekl bych, že proto, že zapomínáš, že Latte je de facto PHP, takže všechny stringy musí být správně uvozené. Takže nemá být:

{if $input->getOption(type) in [text, select, textarea]}

ale:

{if $input->getOption('type') in ['text', 'select', 'textarea']}

Pokud to takhle změníš všude, mělo by to podle mého názoru fungovat. Divné je, že to nekřičelo undefined constant, možná máš nějakou starší verzi PHP.

Editoval dakur (26. 3. 2021 9:44)

David Grudl
Nette Core | 8110
+
0
-

Latte je rozšířené PHP a například alfanumerické stringy nemusí být v uvozovkách.

dakur
Člen | 493
+
0
-

Potom to bude něčím jiným, ale jisté, že to spadne do else větve, protože to odpovídá výstupu – {input $input} generuje <label><input></label>.

MW
Člen | 615
+
0
-

Ahoj, díky za reakci.

Když do toho else dám cokoliv, tak se to tam propíše… takže to bude ještě někde jinde :/

dakur
Člen | 493
+
0
-

Zkus si třeba do té else větve dumpnout typ: {dump $input->getOption(type)} a uvidíš, co ti to napíše.

MW
Člen | 615
+
0
-

Je to tam správně.. checkbox.

Je to čistý nette\sandbox .

dakur
Člen | 493
+
0
-

A datový typ sedí? Máš tam trojité rovnítko, tedy i datové typy musí sedět.