Formular render zmena nebo vlastni

turbo80
Člen | 50
+
0
-

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
+
0
-

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)

turbo80
Člen | 50
+
0
-

Opravdu nekdo netusi jak na to? Uz nevim snad jsem vyzkousel vsechno co jsem kde nasel na nettu.

Prosim o radu. Predem moc dekuji

lookass
Člen | 54
+
+1
-

<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í:

  1. vykreslovat form ‚ručně‘ v šabloně (pakliže ten form potřebuješ jen na jednom místě)
  2. vytvořit komponentu s připravenou latte šablonou a předávat jí form (pakliže chceš takto generovát více formů)
turbo80
Člen | 50
+
0
-

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.

lookass
Člen | 54
+
0
-

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.

turbo80
Člen | 50
+
0
-

Moc dekuji za nakopnuti… To je skoro to co potrebuji…