Dynamické snippety – nevrací jeden snippet, ale celý snippet
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Phalanx
- Člen | 310
Ahoj, už se s tímhle mořím několik hodin a potřebuji Vás požádat o pomoc. Pro tento projekt je použito Nette 2.3
Mám Kdyby\Replicator pro nemovitosti – immovables. Ke každé nemovitosti se dají přidat ajaxově soubory, takže výpis souborů chci při přidání a smazání souboru přenačíst ajaxem. Bohužel při invalidaci snippetu immovables zmizí veškerý obsah v tomto snippetu.
<?php
public function handleDeleteDocument()
{
// smazu soubor
// snazim se posilat pouze jeden snippet
$this->template->images_immovables = array();
$this->template->images_immovables[$module_id] = !empty($images[$module_id]) ? $images[$module_id] : array();
$this->redrawControl("immovables");
}
public function render()
{
$template = $this->template;
$template->getLatte()->addFilter('translate', $this->translator->translate);
//$template->add('form', $this['clientPropertyForm']);
$template->_form = $this['clientPropertyForm'];
if (!isset($template->images_immovables)) {
$template->images_immovables = ...;
}
$template->setFile(__DIR__ . '/templates/default.latte');
$template->render();
}
?>
{snippet immovablesOuter}
{snippet immovables}
{foreach $_form['immovables']->getContainers() as $id => $immovable}
{input immovables-$id-id}
{* další inputy *}
{* dropzone *}
{snippet immovables-$id}
{* vypis souboru*}
{/snippet}
{/foreach}
{/snippet}
{/snippet}
Moje úvahy:
- přijde mi, jako bych si nějak mazal kontejner $_form[‚immovables‘]->getContainers()
- nejraději bych ještě obalil statický snippet pro soubory (abych si nepřepisoval kontejnery), ale to nemůžu, jelikož je to ve foreach… – nebo by to nějak šlo?
Děkuji za jakoukoliv úvahu.
Editoval Phalanx (25. 6. 2017 8:38)
- Phalanx
- Člen | 310
Ladím to už dva dny, ale žádný posun.
Divné na tom je to, že mi přidání a odebírání prvků v replicatoru funguje správně, ale při mazání nějakého souboru se mi vrací celý snippet immovables a v něm není nic…
<?php
public function handleDeleteDocument()
{
// invaliduje se celý immovables a smažou se všechny prvky replicatoru
$this->redrawControl("immovables");
// zkoušel jsem invalidovat i celý $this->redrawControl('immovablesOuter');
}
// tento kód vytvoří správně jeden nový prvek pro nemovitost
public function addImmovableClicked(SubmitButton $button)
{
$container = $button->parent->createOne();
$this->redrawControl('immovablesOuter');
}
?>