Nové snippety – v includované šabloně přestalo fungovat
- Petr Daňa
- Člen | 109
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.
- Panda
- Člen | 569
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.