Dynamické snippety – nevrací jeden snippet, ale celý snippet

Phalanx
Člen | 310
+
0
-

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

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');
	}
?>
Phalanx
Člen | 310
+
0
-

Bezva, tak po 5 dnech jsem na to přišel. Obalil jsem dropzone a soubory do vlastní komponenty jako Multiplicator a tam už si vytvořil jen statický snippet, který je radost invalidovat.