bbcode textarea – implementacia do formularov

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

Zdravím.
Na PHP bez nette som bol zvyknutý používať bbcode editor vybraný z phpbb fora…je nejaky sposob, ako ho do nette implementovat?..napr. $form->addBbCode(‚text‘, ‚Text‘);

Na zaciatku je javascript editora, potom su tlacidla, odkazy, ktoré vyvolavaju prislusny javascript, dalej <input type=„text“>, do ktoreho sa generuje napoveda ku tlacidlam a nakoniec ja textarea, ktory obsahuje parametre ako onclick, onkeyup, onselect, tabindex a tak podobne.
Vďaka

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Vytvoř si potomka třídy Nette\Forms\TextArea a třeba do metody control si doplň třídu, podle které na ten element navážeš JS.

public function getControl()
{
	$control = parent::getControl();
	$control->class[] = 'editor-bbcode';
	return $control;
}

Potom si ještě pro pohodlnost někde (třeba do bootstrapu) doplň metodu addBbCode:

FormContainer::extensionMethod('addBbCode', function (FormContainer $container, $name, $label = NULL) {
	return $container[$name] = new BbCodeTextArea($label);
});

A pak už jen na třídu editor-bbcode navázat ten javascript, co tam dělá ta tlačítka a všechno kolem.

Asi to není úplně řešení, protože tam zmiňuješ ten input[type=text].

Editoval vojtech.dobes (17. 4. 2011 8:08)

qacer
Člen | 8
+
0
-

Chvilu mi trvalo, kym som pochopil (sice som sa nette zacal ucit pred 3 dnami ale tato otazka mi prisla viac do Formularov ako zaciatocnikov), ako si to myslel, ale asi si to pochopil zle.

Predtym som mal jednu php funkciu, ktora vypadala asi takto:

function bbcode($name, $content){
$vystup='';
$vystup.='<script type="text/javascript">-- tu je obsluzny javascript --</skript>';
$vystup.='<a onclick=".."><img></a>'; // tu je riadok tlacidiel (bold, img, h3.., h6, link a plus nejake vlastne)
$vystup.='<input type="text" />'; //riadok s napovedou
$vystup.='<textarea name="'.$name.'">'.$content.'</textarea>'; //samotny textarea s este dalsimi parametrami a vlastnostami
return $vystup;
}

je to vlastne vlastnorucne vyextraktovany kod z phpbb fora, ktory mi proste vygeneruje editor aj s tlacidlami…nemam to riesene ze by mi to podla classu cez javascript tie tlacidla vygenerovalo nad textareou.

No a prakticky by som potreboval, aby mi po zadani $form->addBbCode(‚text‘, ‚Text‘); vygenerovalo aspon tlacidla, input s napovedou (bez toho by som sa zaobisiel) a textareu (javascript planujem dat do hlavicky), tie tlacidla a input si pri spracovavani formularu nevsimalo a s celkom pracovalo ako s lubovolnou <textarea>

Editoval qacer (17. 4. 2011 14:17)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Rozumím, předpokládal jsem, že jde o nějaký unobtrusive javascript, který ty tlačítka a omáčku okolo doplní.

Princip bude v podstatě stejný (podědit TextArea), až na to, že:

public function getControl()
{
	$output = '';
	$output .= '<script type="text/javascript">-- tu je obsluzny javascript --</skript>';
	$output .= '<a onclick=".."><img></a>';
	$output .= '<input type="text" />';
	$output .= parent::getControl();

        return $output;
}

Metoda getControl vrací instanci Nette\Web\Html (teďka nově Nette\Utils\Html), která se umí vypsat, v tomto případě jako textarea. Je to srozumitelné?

Tím, že je to poděděné od TextArea `a použitá ta metoda `getControl, tak se nemusíš starat o doplnění $content, to je vše už obstarané jak u klasické textarey.

Editoval vojtech.dobes (17. 4. 2011 18:46)