bug? ako nastavit name=„test[id][param]“

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Ďurika
Člen | 328
+
0
-

Zdravim

skusal som nieco taketo:

<?php
		foreach ($this->toTranslate as $val) {

			$form->addText('translation['.$val->id.'][type]', 'Typ:');
			$form->addTextArea('translation['.$val->id.'][text]', 'Text (SK):');

			$form->addTextArea('translation['.$val->id.'][translated]', 'Text:')
					->setRequired('Vyplňte prosím text.');

		}
?>

vysledok : Component name must be non-empty alphanumeric string, ‚translation[1][type]‘ given.

je to bug v nette alebo sa to tam zapisuje nejako inak?

dakujem

Editoval achtan (1. 9. 2011 13:33)

nanuqcz
Člen | 822
+
0
-

Ahoj, asi chceš použít formulářové kontejnery

Filip Procházka
Moderator | 4668
+
0
-

Není to chyba, takto se zanoření nedělá.

$translations = $form->addContainer('translations');

foreach ($this->toTranslate as $val) {
	$translation = $translations->addContainer($val->id);
	$translation->addText('type', 'Typ:');
	$translation->addTextArea('text', 'Text (SK):');

	$translation->addTextArea('translated', 'Text:')
		->setRequired('Vyplňte prosím text.');
}

Hned to vypadá lépe, že? :) A i to lépe funguje. Při odeslání:

foreach ($form['translations']->values as $id => $values) {
	echo $id, $values['type'], $values['text'], $values['translated'];
}
David Ďurika
Člen | 328
+
0
-

vdaka za usmernenie! :)
a este jednu vec, potrebujem si ten form naformatovat po svojom
priklad:

<?php
{form translationForm}
<table>
	/* foreach */
	<tr>
		<th>{label type /}</th>
		<td>{input type}</td>
	</tr>
	<tr>
		<th>{label text /}</th>
		<td>{input text}</td>
	</tr>
	<tr>
		<th>{label translated}</th>
		<td>{input translated}</td>
	</tr>
	/* /foreach */
...
</table>
{/form translationForm}
?>

na aku premennu mam robit foreach? aby sa mi vypisali vsetky prvky kt. som daval do formu z $this->toTranslate ?

Filip Procházka
Moderator | 4668
+
0
-

Já bych to udělal takto, je to asi nejjednodušší.

{form translationForm}
<table>
        {foreach $form["translations"]->components as $translation}
        <tr>
                <th>{$translation[type]->label}</th>
                <td>{$translation[type]->control}</td>
        </tr>
        <tr>
                <th>{$translation[text]->label}</th>
                <td>{$translation[text]->control}</td>
        </tr>
        <tr>
                <th>{$translation[translated]->label}</th>
                <td>{$translation[translated]->control}</td>
        </tr>
	{/foreach}
...
</table>
{/form translationForm}
joe
Člen | 313
+
0
-

HosipLan napsal(a):

Není to chyba, takto se zanoření nedělá.

Bohužel tak nejde vytvářet v HTML elementy takhle

<input name="datum[]">
<input name="datum[]">
<input name="datum[]">
...

Sice je na jednu stranu pochopitelný, že si ho pak nemůže Nette propojit, ale usnadnilo by to práci v JS.

Filip Procházka
Moderator | 4668
+
0
-

Chceš vědět tajemství? Můj replicator to umí zpracovat :)

Pokud si schopný si dopsat javascript, který to má duplikovat, tak čísla můžeš odstranit a přidávat další kontejnery bez čísel. Prohlížeč by ti měl automaticky nastavovat další indexy, stejně jako když přidáváš hodnoty do pole.

Hodnoty, které už jednou odešleš, tak zpracuje a vytvoří kontejnery a vykreslí i s indexy. Ale ty které tam přidáš jako další, můžeš teoreticky přidávat bez čísel a opět to zpracuje :)

Pokud to někoho zajímá, může si pohrát se sandboxem: https://github.com/…e-adddynamic

joe
Člen | 313
+
0
-

Opět (mi) dáváš tvůj replicator :) Já měl ten pocit, že mi to pak nefungovalo, když jsem to testoval bez těch indexů. Tzn. jestli tě chápu dobře, indexy pak nemusim řešit v JS? Stačí tedy aby název byl datum[]?

Filip Procházka
Moderator | 4668
+
0
-

Ne, pochopitelně to musí dodržet jmennou konvenci Nette.

$form->addDynamic('dates', function (Container $container) {
	$container->addDate('date');
});
<input name="dates[]date">
<input name="dates[]date">
<input name="dates[]date">

tohle nefunguje?

Asi to budu muset nějak vymyslet sám… :) Každopádně doplnit indexy nepovažuji za problém. Co považuji za problém, tak obecné řešení klonování. Protože můžu napsat řešení, které bude klonovat kontejner, ale když to uživatel bude vykreslovat nestandardně, tak to přestane fungovat. Proto javascript píšu na konkrétní případ.