Nové snippety – v includované šabloně přestalo fungovat

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

Ahoj všem, mám problém s novými snippety, buď jsem to blbě pochopil nebo to nejde, nevím.

Pro AJAX a formuláře používám jquery.nette.js a jquery.ajaxform.js. Pokud mám formulářovou komponentu vloženou přímo v základní šabloně pro danou action, vše funguje jak má:

Kus šablony:

<?php
{snippet:form}
{widget editForm}
{/snippet:form}
?>

Presenter – tvorba kompomenty a obsluha signálu pro AJAXové volání:

<?php
	public function createComponentEditForm($name)
	{
		$form = new NAppForm($this, $name);
		$form->getElementPrototype()->class('ajax');

		$form->addGroup('Stav');
		$form->addRadioList('approved', 'Schváleno', array(0 => 'ne', 1 => 'ano'))
			->setDefaultValue(0);
		$form->addRadioList('active', 'Aktivní', array(0 => 'ne', 1 => 'ano'))
			->setDefaultValue(0);

		foreach (NEnvironment::getConfig('languages') as $lang_code)
		{
			$form->addGroup($lang_code);
			$form->addText("name_$lang_code", 'Název');
			$form->addTextArea("desc_$lang_code", 'Popis');
			$form->addTextArea("keywords_$lang_code", 'Klíčové slova');
		}

		$form->setCurrentGroup();

		$form->addHidden('image_id');

		$form->addSubmit('submit_edit', 'Uložit');
		$form->onSubmit[] = callback($this, 'formEditSubmitted');

		return $form;
	}


	public function handleEditImage($id)
	{
		$mImages = new ImagesModel();
		$image = $mImages->getById($id, TRUE);

		if ($image !== FALSE)
		{
			$defaults = array(
					'approved' => $image->is_approved,
					'active' => $image->is_active,
					'image_id' => $image->image_id
				);

			foreach (NEnvironment::getConfig('languages') as $lang_code)
			{
				$defaults["name_$lang_code"] = $image["name_{$lang_code}"];
				$defaults["desc_$lang_code"] = $image["description_{$lang_code}"];
				$defaults["keywords_$lang_code"] = implode(', ', $mImages->parseStrKeywords( $image["keywords_{$lang_code}"] ));
			}

			$this->getComponent('editForm')->setDefaults($defaults);

			// Překreslíme jen jeden snippet, ne všechny
			$this->validateControl();
			$this->invalidateControl('form');
		} else
		{
			$this->flashMessage('Obrázek nebyl nalezen');
			//throw new BadRequestException('Záznam nebyl nalezen.');
		}
	}
?>

Chtěl jsem ale renderování formuláře přemístit do samostatné šablony, kterou bych includoval v té základní, ale v té chvíli AJAXové naplnění formu přestává fungovat. Zkoušel jsem obalit volaný include v základní šabloně do snippet, zkoušel jsem ten snippet dávat do includované šablony, nic.

Co jsem koukal do Firebugu, tak AJAXový požadavek vrátí sice snippet–form, ale prázdný, bez dat.

Můžete mě někdo prosím nakopnout správným směrem? Díky.

blacksun
Člen | 177
+
0
-

Zavináč před include šablony se snippetem.

Petr Daňa
Člen | 109
+
0
-

V nových snippetech se zavináče nepoužívají nikde, jestli jsem to dobře pochopil.

blacksun
Člen | 177
+
0
-

Dej ho tam a uvidíš ;)

Petr Daňa
Člen | 109
+
0
-

Jestli jsi měl na mysli takhle:

<?php
{snippet:form}
@{include editform.phtml}
{/snippet:form}
?>

tak to jsem už zkoušel, dělá to kraviny, ten form vypíše ještě před HTML tag.

blacksun
Člen | 177
+
0
-

Ne, před include toho, kde máš ten snippet..

Myslim taky, že mít include ve snippetu neni uplně nejlepší cesta…

Panda
Člen | 569
+
0
-

Do těla snippetu zavináč nepatří!

Zkus aplikovat patch z https://forum.nette.org/…ji-pri-ajaxu. Pozor, nemůžeš použít přiloženou třídu a patch se taky možná nebude aplikovat nejsnadněji, vzniklo to už před nějakou dobou.

Petr Daňa
Člen | 109
+
0
-

Dík za info, už jsem tomu věnoval až moc času, takže nakonec jsem to přehodil na staré snippety a s těmi mi vše funguje jak má, takže experimentovat s novými budu až budu mít víc času.