Formular render zmena nebo vlastni
- turbo80
- Člen | 50
Zdravim,
chtel bych se zeptat zdali jde zmenit html?
$form->addGroup(‚neco‘);
se mi vygeneruje
<fieldset>
<legend>neco</legend>
.....
</fildset>
a ja bych potreboval aby se me vygenerovalo
<div class=„neco“>
<div class=„neco1“>
.....
</div>
Jestli to nsatvit v rendru, nebo jakym zpusobem, manualni render formu
nepripada v uvahu… Je to cca 40 formu a 20 polozkach… Diky vse
za radu.
- turbo80
- Člen | 50
Ondřej Kubíček napsal(a):
https://doc.nette.org/…ms/rendering#… mrkni na wrappers
Dekuji za radu, ale vubec nevim jak dal… mam toto
<?php
$renderer->wrappers[‚group‘][‚container‘] = ‚section class=„card
card-featured card-featured-primary mb-4“‘;
$renderer->wrappers[‚group‘][‚label‘] = ‚header
class=„card-header“‘;
$renderer->wrappers[‚group‘][‚tady nevim co‘] = ‚h2
class=„card-title“‘;
a pak pridat <div class=„card-body“>
$renderer->wrappers[‚pair‘][‚container‘] = ‚div class=„form-group
row“‘;
$renderer->wrappers[‚pair‘][‚.error‘] = ‚has-danger‘;
$renderer->wrappers[‚control‘][‚container‘] = ‚div
class=col-sm-9‘;
$renderer->wrappers[‚label‘][‚container‘] = ‚div
class=„col-lg-3 control-label text-lg-right pt-2“‘;
$renderer->wrappers[‚control‘][‚description‘] = ‚span
class=form-text‘;
$renderer->wrappers[‚control‘][‚errorcontainer‘] = ‚span
class=form-control-feedback‘;
$renderer->wrappers[‚control‘][‚.error‘] = ‚is-invalid‘;
?>
vygeberuje se mi to to
<form method="post" id="frm-addMenuForm">
<section class="card card-featured card-featured-primary mb-4">
<header class="card-header" div="" id="form" asd="">**<h2 class="card-title">**Základní nastaveni**</h2>**</header>
**<div class="card-body">**
<div class="form-group row">
<div class="col-lg-3 control-label text-lg-right pt-2"><label for="frm-addMenuForm-poradi">Pořadí zobrazení:</label></div>
<div class="col-sm-9"><input type="text" name="poradi" id="frm-addMenuForm-poradi" class="text"></div>
</div>
**</div>**
<table>
</table>
</section>
</form>
** jsem oznacil jak bych to potreboval generovat a nechapu proc tam je table.
Editoval turbo80 (3. 6. 2020 22:36)
- lookass
- Člen | 54
<table> odstraníš takto: $renderer->wrappers[‚controls‘][‚container‘] = null
<header …><h2>…</h2></header> tam přes wrappers
nedostaneš, protože tím neobaluješ žádný input.
Napadají mě dvě řešení:
- vykreslovat form ‚ručně‘ v šabloně (pakliže ten form potřebuješ jen na jednom místě)
- vytvořit komponentu s připravenou latte šablonou a předávat jí form (pakliže chceš takto generovát více formů)
- lookass
- Člen | 54
turbo80 napsal(a):
Jde oto ze tech forrmu je vice, ale vetsina obsahuje jine polozky nebo jine poradi ve formu tak jsem si chtel udelat render, a kdybych zadal do formu ->addGroup, aby se me to takto rendrovalo, ale jak zjistuji tak to tak nepujde.
A co to teda řešit tou variantou č. 2?
Tato komponenta by vstupem přijímala form a postarala by se
o vykreslení.
Presenter:
<?php
final class HomepagePresenter extends Presenter
{
private FormFactory $formFactory;
public function __construct(FormFactory $formFactory)
{
$this->formFactory = $formFactory;
}
protected function createComponentMyForm(): \MyForm
{
$form = $this->formFactory->create();
$form->addText('a', 'a:');
$form->addText('b', 'b:');
$form->addSubmit('Save');
$formControl = new \MyForm();
$formControl->form = $form;
return $formControl;
}
}
?>
Komponenta:
<?php
class MyForm extends Control
{
/** @var Form */
public Form $form;
/**
* @var string
*/
public string $title='';
public function render(): void
{
$this->template->title = $this->title;
$this->template->form = $this['myForm'];
$this->template->render(__DIR__ . '/templates/default.latte');
}
protected function createComponentMyForm(): Form
{
return $this->form;
}
}
class MyFormTemplate extends \Nette\Bridges\ApplicationLatte\Template
{
public Form $form;
public string $title='';
}
?>
Šablona:
{templateType \MyFormTemplate}
{form myForm}
<section class="card card-featured card-featured-primary mb-4">
<header class="card-header" id="form" ><h2 class="card-title">{$title}</h2></header>
<div class="card-body">
<div n:foreach="$form->controls as $inputName => $input" n:if="!$input->getOption(rendered) && $input->getOption(type) !== hidden" class="form-group row">
<div class="col-lg-3 control-label text-lg-right pt-2">{label $input /}</div>
<div class="col-sm-9">{input $input}</div>
</div>
</div>
</section>
{/form}
Můžeš si upravit wrappers už ve form factory a předávat nastylovaný form. Potom bys v šabloně vykresloval jen to, co nepořídíš ve wrappers.