Wysiwyg pole není ve výsledcích postu

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

Ahoj,

s Nette začínám, proto doufám, že můj dotaz nebude moc lamí. Mám formulář, v něm mám mimo jiné textarea a wysiwyg. Liší se jenom tím, že wysiwyg má class=„wysiwyg“, pokud je to podstatné, používám elRTE editor.

<textarea cols="80" rows="10" class="wysiwyg" name="text4" id="frmtableEditForm-text4"></textarea>

Problém je v tom, že ve výsledcích mi chybí data pouze a jenom z wysiwyg editoru.

Trochu jsem zapátral a zjistil jsem, že v $_POST data jsou, ale místo očekávaného $_POST[‚text4‘] (jak je to u ostatních polí formuláře) jsou data v $_POST[‚frmtableEditForm-text4‘]. Po zavolání $temp = $form->getValues() už mám ale k dispozici jen $temp[‚text4‘], které je prázdné

Nějaké nápady?

arron
Člen | 464
+
0
-

Bude to chtit vic kodu (definice formulare, zpracovani, ev. jestli je tam naveseny nejaky specialni validacni JS, tak i ten).

sharrow
Člen | 6
+
0
-

Právě že tam žádný kouzla nedělám

protected function createComponentTableEditForm($name)
{
$form = new AppForm;
$form->setMethod('post');
	foreach($this->tableData as $column => $columnData)
	{
      		if ($columnData['type'] == 'textarea')
      		{
      			$form->addTextarea($column,$columnData['name'],80,10);
      		}
		if ($columnData['type'] == 'wysiwyg')
		{
    			$form->addTextarea($column,$columnData['name'],80,10)->getControlPrototype()->class('wysiwyg');
   		}
		...
	}
	$form->addSubmit('save', 'Uložit');
 	$form->onSubmit[] = callback($this, 'processForm');
	return $form;
}
public function processForm($form)
{
	$values = $form->getValues();
	// no a tady už je oheň na střeše
}

Formulář samotný pak vypadá taky nevině

<tr>
	<th><label for="frmtableEditForm-text2">Textarea</label></th>
	<td><textarea cols="80" rows="10" name="text2" id="frmtableEditForm-text2"></textarea></td>
</tr>
<tr>
	<th><label for="frmtableEditForm-text4">Wysiwyg</label></th>
	<td><textarea cols="80" rows="10" class="wysiwyg" name="text4" id="frmtableEditForm-text4"></textarea></td>
</tr>

Výsledek je pak
$_POST[‚text2‘] // obsah textarea
$_POST[‚frmtableEditForm-text4‘] // obsah wysiwyg

sharrow
Člen | 6
+
0
-

Jestli používáš TinyMCE, viděl bych to na chybějící:

TinyMCE nepoužívám používám elRTE a navíc není problém s tím, že by se to neuložilo, je problém s tím, že se to uloží do $_POST svým ‚id‘ místo svým ‚name‘

jtousek
Člen | 951
+
0
-

sharrow napsal(a):

TinyMCE nepoužívám používám elRTE a navíc není problém s tím, že by se to neuložilo, je problém s tím, že se to uloží do $_POST svým ‚id‘ místo svým ‚name‘

To vypadá spíše na bug toho editoru. Btw. ten tvůj editor je celkem neznámej, doporučuji přechod na CKEditor nebo TinyMCE.

toka
Člen | 253
+
0
-

Řešení je jednoduché, po chvilce „googlení“ nalezneš tento web. Zde zjistíš, že stačí drobná úprava v elrte.full.js – klidně si z toho pak můžeš udělat min verzi.

Najdi si:

if (target.nodeName == 'TEXTAREA') {
	this.source = this.target;
	this.source.insertAfter(this.iframe).hide();
	content = this.target.val();
} else {
	this.source = $('<textarea />').insertAfter(this.iframe).hide();
	content = this.target.hide().html();
}

A uprav takto:

if (target.nodeName == 'TEXTAREA') {
	this.source = this.target;
	this.source.insertAfter(this.iframe).hide();
	content = this.target.val();
} else {
	this.source = $('<textarea />').insertAfter(this.iframe).hide();
	this.source.attr('name', this.target.attr('id') || this.target.attr('name'));
	content = this.target.hide().html();
}

Zkoušel jsem, funguje, bere v potaz name namísto id.

jtousek
Člen | 951
+
0
-

@toka: Máš tam chybku, má to být takto:

<script>
if (target.nodeName == 'TEXTAREA') {
        this.source = this.target;
        this.source.insertAfter(this.iframe).hide();
        content = this.target.val();
} else {
        this.source = $('<textarea />').insertAfter(this.iframe).hide();
        this.source.attr('name', this.target.attr('name') || this.target.attr('id'));
        content = this.target.hide().html();
}
</script>
sharrow
Člen | 6
+
0
-

DÍKY jsi king. Nikdy by mě nenapadlo hledat chybu v editoru, ikdyž takhle zpětně už to dává smysl.

sharrow
Člen | 6
+
0
-

>

To vypadá spíše na bug toho editoru. Btw. ten tvůj editor je celkem neznámej, doporučuji přechod na CKEditor nebo TinyMCE.

Problém CKEditoru a TinyMCE je ale v tom, že filemanager už není zadarmo. Sice se dá použít nějakej jinej, ale proč mít slepeninu, když ten elRTE spojuje wysiwyg i manager a vypadá hezky

jtousek
Člen | 951
+
0
-

sharrow napsal(a):
Problém CKEditoru a TinyMCE je ale v tom, že filemanager už není zadarmo. Sice se dá použít nějakej jinej, ale proč mít slepeninu, když ten elRTE spojuje wysiwyg i manager a vypadá hezky

To je samozřejmě pravda, ale třeba KCFinder mohu k oběma editorům vřele doporučit.

sharrow
Člen | 6
+
0
-

To je samozřejmě pravda, ale třeba KCFinder mohu k oběma editorům vřele doporučit.

Tak to je síla, prohodí se dvě písmena a z Pěknýho balíku je člověk na GPL licenci. Předělávat už to asi nebudu, ale každopádně díky za tip.

jtousek
Člen | 951
+
0
-

sharrow napsal(a):

Tak to je síla, prohodí se dvě písmena a z Pěknýho balíku je člověk na GPL licenci. Předělávat už to asi nebudu, ale každopádně díky za tip.

jj, autor si z nich tak trochu vystřelil :-D

westrem
Člen | 398
+
0
-

A co takto ako editor pouzit Texylu ktora spracuvava uzasne intuitivnu Texy! syntax :)

toka
Člen | 253
+
0
-

@jtousek: To je tak, když někam spěchám, a zároveň chci poradit :-(