Texyla helper
- Jod
- Člen | 701
Spravil som si taký helper na texylu, pri automatickom generovaní formulára ak to niekomu pomôže:
<?php
abstract class BasePresenter extends Presenter
{
protected function beforeRender()
{
$this->template->registerHelper('texyla', array($this, 'texyla'));
}
function texyla($form) {
$js = "<script type=\"text/javascript\">\n";
foreach($form->getControls() as $control) {
if($control->getClass() == "TextArea") {
$jsId = str_replace("-", "_", $control->getHtmlId()) . "_options";
$js .= "var " . $jsId . " = Texyla.configurator.admin('" . $control->getHtmlId() . "');\n";
//$js .= $jsId . ".theme = 'win_xp';\n";
$js .= "new Texyla(" . $jsId . ");\n";
}
}
$js .= "</script>\n";
return $form . $js;
}
}
?>
Potom už v template stačí zapísať pri generovaní formu helper:
{!$form|texyla}
Ak by mi niekto vedel poradiť, nefunguje mi načítanie texyli pri update snippetu formulára.
- ViliamKopecky
- Nette hipster | 230
Jod napsal(a):
Ak by mi niekto vedel poradiť, nefunguje mi načítanie texyli pri update snippetu formulára.
Zavináčovou magii neopomíjíš?
Jinak jsem si něco takového chtěl taky přichystat, dobré by bylo, kdyby
šly nastavovat určité parametry přímo při definici formuláře
FormControl::setOption('texyla-theme', 'win_xp')
atd.
Editoval enoice (10. 12. 2008 21:54)
- ViliamKopecky
- Nette hipster | 230
Jod napsal(a):
To by už vyžadovalo miesto helperu spraviť nový formulárový prvok. Ja si v pohode vystačím s pevnými nastaveniami.
Zavináčmi to nebude, ajax mi funguje v pohode, len po callbacku sa mi načíta čistá textarea bez texyly.
Nebude to spíš javascriptem? Že ten script sice vypíše do html, ale nevykoná ho?
- Jod
- Člen | 701
Mne sa to stáva pri ajaxovom callbacku, keď mi do snippetu form načíta nový formulár, len s tým rozdielom, že na textarea sa už neaplikuje texyla.
Bude to asi tým, že pri update snippetu priehliadač už nevykonáva žiaden nový javascript. Potom by bolo dobré nejakým spôsobom zavolať funkciu ktorá by texylu vytvorila, alebo vytvoriť nejaký event a vytvárať objekt texyly cez javascript.
Niečo ako:
<script>
$(document).ready(function(){
$('#form').change(function(){
$(this).find('textarea').each(function() {
var options = Texyla.configurator.admin($(this).id);
var texyla = new Texyla(options);
})
});
}
</script>
Neviem či to funguje, to som vypotil z hlavy. Ale vyskúšam.
Editoval Jod (11. 12. 2008 9:54)
- Jod
- Člen | 701
Mám to. Takže lepšie riešenie pri ajaxe asi bude vytvárať texylu javascriptom.
Je dôležité aby js funkcionalita ktorá má byť vykonaná aj po callbacku bola vyseparovaná do samostatnej funkcie a použitá pri loadu aj callbacku.
Nejak takto (jQuery):
<script>
$(document).ready(function(){
registerOnCallback();
});
function registerOnCallback()
{
$(document).find('textarea').each(function() {
var options = Texyla.configurator.admin($(this).attr('id'));
var texyla = new Texyla(options);
});
}
</script>
Ešte treba v nette.js do metódy nette.updateSnippet
pridať
na koniec registerOnCallback();
Skúšal som to na jednom prvku, no myslím, že by nemal byť problém aj na
viac, kedže tie premenné vo funkcii niesu globálne.
Editoval Jod (11. 12. 2008 10:10)
- Jan Tvrdík
- Nette guru | 2595
Jod napsal(a):
Nefungujú mi tam popupy typu img upload a pod.
Píše mi to chybuValue undefined (result of expression this.window) is not object
v texyla.js. Nevie niekto prečo?
Stáhni si verzi ze SVN, ta funguje. Jinak aby fungoval upload souborů, tak musí být k dispozici třída finfo nebo funkce mime_content_type.
- Honza Marek
- Člen | 1664
Jod napsal(a):
Nefungujú mi tam popupy typu img upload a pod.
Píše mi to chybuValue undefined (result of expression this.window) is not object
v texyla.js. Nevie niekto prečo?
Opravil jsem to… Byla chyba v generátoru, nestahoval se právě ten window plugin, který má tohle na starosti.