CKEditor – neukládají se mi změněné texty
- iguana007
- Člen | 970
Zdravím ve spolek,
rozhodl jsem se změnit Wysiwyg editor v CMS na CKEditor. Implementovat se mi
jej podařilo víceméně bez problémů – mám kompletně ajaxové
rozhraní – proto jsem musel jen pořešit problém s instancemi editoru,
což jsem vyřešil pomocí fce:
<script type="text/javascript">
function loadEditor(id)
{
var instance = CKEDITOR.instances[id];
if(instance)
{
CKEDITOR.remove(instance);
}
CKEDITOR.replace(id);
}
</script>
Formulář pro editaci článku dělám pomocí komponenty a vypadá cca takto:
class EditArticleForm extends AppForm{
public function __construct($parent, $name){
parent::__construct($parent, $name);
$this->getElementPrototype()->class = 'ajax';
$this->addHidden('id');
$this->addTextArea('main_text', _('Tělo článku:'), 150, 30);
$this->addSubmit('ulozit', _('Uložit změny v článku'));
$this->onSubmit[] = array($this, 'EditArticleFormSubmitted');
return $this;
}
public function editArticleFormSubmitted(AppForm $form) {
$values = $form->getValues();
$this->presenter->articleModel->updateArticleById($values);
$this->presenter->flashMessage("Článek ".$values['article_name'] . " byl úspěšně uložen!", "ok");
$this->presenter->actionListArticles($values['category_id']);
$this->presenter->invalidateControl('bottomPane');
}
}
Problém je v tom, že když něco změním v tom editoru u položky main_text a odešlu form, tak mi to ve firebugu ukáže, že se POSTem odešle hodnota main_text, která byla při načtení formu. Tj. vůbec to nebere v potaz, že jsem tam něco změnil. Pokud něco změním v text inputu (v ukázce jsem jej neuvedl, osekal jsem ten form, ať je to kratší), tak se změna projeví.
Nenapadá Vás v čem by mohl být problém?
Díky moc za rady.
- iguana007
- Člen | 970
Tak se podařilo pomocí konzole ve firebugu dostat tu správnou hodnotu z CKEditoru do textarei formuláře … teď otázka, jak to správně ošetřit v tom formuláři, aby se mi to samo doplnilo při submitu?
var data = CKEDITOR.instances['frmeditArticleForm-main_text'].getData();
$('#frmeditArticleForm-main_text').val(data);
- iguana007
- Člen | 970
SOLVED:
EDIT: upravil jsem kod tak, aby to fungovalo i na vice editoru
v jednom formu
Upravil jsem si v layout.phtml kod ošetřující ajax submit na toto:
$("form.ajax").livequery("submit",function (e) {
if ($('.kceditor')) {
$('.kceditor').each(function(index) {
var CurrId = $(this).attr('id');
var dataToFill = CKEDITOR.instances[CurrId].getData();
$(this).val(dataToFill);
});
}
$(this).ajaxSubmit(e);
});
A ve formu přidávám textarei s wysiwygem classu ‚ckeditor‘.
Editoval iguana007 (22. 7. 2010 16:59)