Texyla helper

před 11 lety

Jod
Člen | 703
+
0
-

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.

před 11 lety

ViliamKopecky
Nette hipster | 231
+
0
-

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)

před 11 lety

Jod
Člen | 703
+
0
-

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.

před 11 lety

ViliamKopecky
Nette hipster | 231
+
0
-

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?

před 11 lety

Jod
Člen | 703
+
0
-

Ano presne tým to je. Rozmýšlam ako toho docieliť =)

před 11 lety

Mas3r
Člen | 116
+
0
-

Mě se to taky stává, ale Ajaxem to není. Stává se to jen někdy a jen na 1 stránce v adminu → zobrazí se mi jen HTML kód.

před 11 lety

Jod
Člen | 703
+
0
-

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)

před 11 lety

Jod
Člen | 703
+
0
-

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)

před 11 lety

Honza Marek
Člen | 1674
+
0
-

BTW znáte novou Texylu?

před 11 lety

Jod
Člen | 703
+
0
-

Nefungujú mi tam popupy typu img upload a pod.
Píše mi to chybu Value undefined (result of expression this.window) is not object v texyla.js. Nevie niekto prečo?

před 11 lety

Mas3r
Člen | 116
+
0
-

JJ už jsem to psal do „knihy hostů“ na stránce texyly.

před 11 lety

Jod
Člen | 703
+
0
-

No fajn, bo na tej druhej stránke žiadna kniha hosťov nieje :D .
Rozmýšlam prečo to nejde nám, keď im hej.

před 11 lety

Jan Tvrdík
Nette guru | 2553
+
0
-

Jod napsal(a):

Nefungujú mi tam popupy typu img upload a pod.
Píše mi to chybu Value 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.

před 11 lety

Honza Marek
Člen | 1674
+
0
-

Jod napsal(a):

Nefungujú mi tam popupy typu img upload a pod.
Píše mi to chybu Value 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.