#1 2. 6. 2009 22:42

tom
Člen
Místo: Zlín, Napajedla
Registrovaný: 12. 6. 2008
Příspěvky: 49
Web

Nette a Texyla?

Poradil by mi nekdo prosim nejaky jednoduchy navod jak zprovoznit Texylu v aplikaci postavene na Nette? Diky

Offline

 

#2 3. 6. 2009 0:17

nAS
Nette guru
Místo: Praha
Registrovaný: 18. 12. 2008
Příspěvky: 210
Web

Re: Nette a Texyla?

Já jsem s Texylou nikdy nedělal, ale Honza Marek na poslední Poslední sobotě měl přednášku právě na toto téma, takže si myslím, že nějaká ukázka by se mohl brzy objevit veřejně, případně zkus spíše napsat na fórum Texyly.


$application->run(); // Run Forrest, run!

@MartinMajor

Offline

 

#3 3. 6. 2009 8:49

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

Jde ti předpokládám o to, jak zprovoznit nějaký nette náhled. Pokud bys potřeboval víc informací, tak ještě napiš.

  1. Je dobré stáhnout aktuální verzi Texyly. To má například tu výhodu, že je kompatibilní s mým ajaxovacím pluginem do nette :-D
  2. Veškeré cesty k php skriptům jsou v Texyle nastavitelné. Změníme tedy cestu k náhledu. Náhled nyní povede na TexylaPresenter, action preview.

V šabloně (například @layout.phtml):

<html>
<head>
        <!-- vložení texyly -->
        ...

        <!-- nastavení výchozích hodnot -->
        <script type="text/javascript">
        $.texyla("setDefaults", {
                previewPath: {plink Texyla:preview}
        });
        </script>
</head>
<body>
        <textarea rows="10" cols="50"></textarea>
        ...
</body>
</html>
  1. Vytvoříme TexylaPresenter.
<?php
class TexylaPresenter extends Presenter {

        public function actionPreview($texy) {
                $texyInstance = new Texy;
                echo $texyInstance->process($texy);
                $this->terminate();
        }

}
?>

Editoval Honza M. (4. 6. 2009 0:07)

Offline

 

#4 3. 6. 2009 12:30

sodae
Nette Evangelist
Místo: Rád bych na pláži :)
Registrovaný: 8. 1. 2009
Příspěvky: 219
Web

Re: Nette a Texyla?

fajn dík , tohle jsem potřeboval, dobré by bylo kdyby jsi nějak ukázal kombinaci nette a pluginu (myslím že) Files


Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítání

Twitter: http://twitter.com/MartinSadovy

Offline

 

#5 3. 6. 2009 12:47

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

To jsem přesně ukazoval na Poslední sobotě. Ale bastlil jsem to tam na poslední chvíli, tak to zveřejním až budu mít nějaký reprezentativní zdroják :)

Offline

 

#6 3. 6. 2009 13:19

vrtak-cz
NDP guru
Místo: Praha/Ústí nad Orlicí
Registrovaný: 8. 3. 2008
Příspěvky: 833
Web

Re: Nette a Texyla?

Honza M. napsal(a):

Tohle je takový základ. Určitě je zajímavé třeba rozběhat v nette správce souborů, ale to sepíšu někdy jindy – až na to budu mít vzorně udělané skripty :-D

A to bude asi tak kdy? A nejenom soubory ale i obrázky… Možná by se u souborů a obrazků hodilo upload chybějícího souboru (AJAXově).


„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

Offline

 

#7 3. 6. 2009 14:10

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

Jelikož to potřebuju taky, tak brzo. Co si mám představit pod pojmem upload chybějícího souboru?

Offline

 

#8 3. 6. 2009 15:08

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

Prezenter pro správce souborů Texyly. Neřeší oprávnění, ale nějakou jednu podmínku není problém přidat.

<?php
class TexylaFilesPresenter extends BasePresenter {

        protected $baseFolderPath;

        protected $baseFolderUri;

        public function startup() {
                $this->baseFolderPath = realpath(WWW_DIR . "/files");
                $this->baseFolderUri = Environment::getVariable("baseUri") . "files";
        }

        public function actionListFiles($folder = "") {
                $folderPath = realpath($this->baseFolderPath . ($folder ? "/" . $folder : ""));
                $folderUri = $this->baseFolderUri . ($folder ? "/" . $folder : "");

                // check if dir exists and is base folder or subdir of base folder
                if (!is_dir($folderPath) || !String::startsWith($folderPath, $this->baseFolderPath)) {
                        $this->payload->error = "Folder does not exist.";
                        $this->terminate();
                }

                // list of files
                $folders = array();
                $files = array();

                // up
                if ($folder !== "") {
                        $lastPos = strrpos($folder, "/");
                        $key = $lastPos === false ? "" : substr($folder, 0, $lastPos);

                        $folders[] = array(
                                "type" => "up",
                                "name" => "..",
                                "key" => $key,
                        );
                }

                foreach (new DirectoryIterator($folderPath) as $fileInfo) {
                        $fileName = $fileInfo->getFileName();

                        // skip hidden files, . and ..
                        if (String::startsWith($fileName, ".")) continue;

                        // directory
                        if ($fileInfo->isDir()) {
                                $folders[] = array(
                                        "type" => "folder",
                                        "name" => $fileName,
                                        "key" => ($folder ? $folder . "/" : "") . $fileName,
                                );

                        // file
                        } elseif ($fileInfo->isFile()) {

                                // image
                                if (@getImageSize($fileInfo->getPathName())) {
                                        $key = ($folder ? $folder . "/" : "") . $fileName;
                                        $thumbailKey = $this->link("thumbail", $key);

                                        $files[] = array(
                                                "type" => "image",
                                                "name" => $fileName,
                                                "insertUrl" => $folderUri . "/" . $fileName,
                                                "description" => "Image $fileName",
                                                "thumbailKey" => $thumbailKey,
                                        );

                                // other file
                                } else {
                                        $files[] = array(
                                                "type" => "file",
                                                "name" => $fileName,
                                                "insertUrl" => $folderUri . "/" . $fileName,
                                                "description" => "File $fileName",
                                        );
                                }
                        }
                }

                $this->payload->list = array_merge($folders, $files);
                $this->terminate();
        }

        public function actionThumbail($key) {
                Image::fromFile($this->baseFolderPath . "/" . $key)->resize(60, 40)->send();
                $this->terminate();
        }

        public function isAjax() {
                // nutné kvůli uploadu
                // v texyle upload se tváří ajaxově, ale ve skutečnosti se formulář submituje do iframu
                // $this->getAction() == "upload" || parent::isAjax() nefunguje
                return true;
        }

        public function actionUpload($folder) {
                // RoutingDebugger::disable();

                // initialize payload
                // když trochu předělám Texylu, tak to nebude nutné
                $this->payload->error = "";
                $this->payload->filename = "";
                $this->payload->type = "";

                // paths
                $folderPath = realpath($this->baseFolderPath . ($folder ? "/" . $folder : ""));
                $folderUri = $this->baseFolderUri . ($folder ? "/" . $folder : "");

                // check if dir exists and is base folder or subdir of base folder
                if (!is_dir($folderPath) || !String::startsWith($folderPath, $this->baseFolderPath)) {
                        $this->payload->error = "Folder does not exist.";
                        $this->terminate();
                }

                // file
                $file = Environment::getHttpRequest()->getFile("file");

                // check upload
                if ($file === null || !$file->isOk()) {
                        $this->payload->error = "Upload error.";
                        $this->terminate();
                }

                // move
                $fileName = String::webalize($file->getName(), ".");

                if (@$file->move($folderPath . "/" . $fileName)) {
                        $this->payload->filename = $folderUri . "/" . $fileName;
                        $this->payload->type = @$file->getImageSize() ? "image" : "file";
                } else {
                        $this->payload->error = "Move failed.";
                }

                $this->terminate();
        }
}
?>

Nastavení cest v Texyle:

<script type="text/javascript">
$.texyla("setDefaults", {
        // soubory
        filesPath: {plink TexylaFiles:listFiles},
        filesThumbPath: "%var%",
        filesUploadPath: {plink TexylaFiles:upload}
});
</script>

Nechce se mi to celé podrobně vysvětlovat, tak se kdyžtak ptejte.

Editoval Honza M. (3. 6. 2009 23:16)

Offline

 

#9 3. 6. 2009 15:52

vrtak-cz
NDP guru
Místo: Praha/Ústí nad Orlicí
Registrovaný: 8. 3. 2008
Příspěvky: 833
Web

Re: Nette a Texyla?

Honza M. napsal(a):

Jelikož to potřebuju taky, tak brzo. Co si mám představit pod pojmem upload chybějícího souboru?

Řekněme že vkládání obrázků bude probíhat pomocí procházení nějáké složky s obrázky a tak by se hodilo kdyby to umělo i uploadnout obrázek který v této složce ještě není ale chci ho použít.

Už chápeme?


„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

Offline

 

#10 3. 6. 2009 16:00

Tomik
Nette Evangelist
Místo: Roztoky
Registrovaný: 20. 3. 2005
Příspěvky: 565
Web

Re: Nette a Texyla?

vrtak-cz napsal(a):

Řekněme že vkládání obrázků bude probíhat pomocí procházení nějáké složky s obrázky a tak by se hodilo kdyby to umělo i uploadnout obrázek který v této složce ještě není ale chci ho použít.

Už chápeme?

To to, pokud jsem na Poslední sobotě dobře koukal, umí. :)

Offline

 

#11 3. 6. 2009 16:10

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

Tak to je základ, ne? :) Adresu obrázku si člověk zapamatuje, ale přece nebude kvůli nahrání nového obrázku lézt na FTP.

Offline

 

#12 3. 6. 2009 16:39

romansklenar
Moderator
Místo: Ostrava
Registrovaný: 20. 7. 2008
Příspěvky: 769
Web

Re: Nette a Texyla?

Nestudoval jsem Texylu do podrobna, ale myslím, že by neměl být problém ji přepsat pro lepší použití s Nette do Controlu. Napadá tě Honzo něco, kvůli čemu by to nebylo možné?

Offline

 

#13 3. 6. 2009 17:18

vrtak-cz
NDP guru
Místo: Praha/Ústí nad Orlicí
Registrovaný: 8. 3. 2008
Příspěvky: 833
Web

Re: Nette a Texyla?

Na PS jsem bohužel nebyl. Ležel jsem doma s horečkou… A to že je to samozdřejmost z vlastní zkušenosti vím že moc ne… Ještě jsem na to nekoukal ale nechceš to hodit do Extras?


„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

Offline

 

#14 4. 6. 2009 10:53

Ola
Nette guru
Registrovaný: 21. 10. 2008
Příspěvky: 477

Re: Nette a Texyla?

Ještě k Texyle a náhledu – po kliknutí na náhled mi firefox ve firebugu vyhodí exception:

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMDocumentFragment.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://localhost/texyla-test/document_root/js/jquery/jquery.js :: anonymous :: line 12" data: no]"

Ve Chrome mi to funguje dobře…

Editoval Ola (4. 6. 2009 10:55)

Offline

 

#15 12. 7. 2009 13:24

Oggy
Nette guru
Místo: Kladno
Registrovaný: 7. 4. 2009
Příspěvky: 218

Re: Nette a Texyla?

při prochazení robotloaderem mi to hlásí: Cannot redeclare class ArgumentOutOfRangeException

Offline

 

#16 12. 7. 2009 15:59

paranoiq
Člen
Místo: Tábor
Registrovaný: 14. 11. 2006
Příspěvky: 167

Re: Nette a Texyla?

Oggy napsal(a):

při prochazení robotloaderem mi to hlásí: Cannot redeclare class ArgumentOutOfRangeException

v distribuci texyly je soubor php/libs/loader.php. ten obsahuje kompletni nette framework. aby se nenačital framework dvakrát, je třeba soubor smazat nebo zabránit jeho indexaci pomoci netterobots.txt (viz: http://forum.nette.org/…-robotloader)


Always wear your helmet, when working with a framework! / http://twitter.com/paranoiq

Offline

 

#17 12. 7. 2009 19:05

Oggy
Nette guru
Místo: Kladno
Registrovaný: 7. 4. 2009
Příspěvky: 218

Re: Nette a Texyla?

paranoiq napsal(a):

Oggy napsal(a):

při prochazení robotloaderem mi to hlásí: Cannot redeclare class ArgumentOutOfRangeException

v distribuci texyly je soubor php/libs/loader.php. ten obsahuje kompletni nette framework. aby se nenačital framework dvakrát, je třeba soubor smazat nebo zabránit jeho indexaci pomoci netterobots.txt (viz: http://forum.nette.org/…-robotloader)

díky..

Offline

 

#18 12. 7. 2009 20:51

Oggy
Nette guru
Místo: Kladno
Registrovaný: 7. 4. 2009
Příspěvky: 218

Re: Nette a Texyla?

jak zavěšujete texylu na určitou textareu v nette? .. na stránkách textyly z toho nejsem moc moudrý.. ono jde zase spíše o komplet zavedení do nette ..

Editoval Oggy (12. 7. 2009 20:54)

Offline

 

#19 12. 7. 2009 21:49

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

V nette zavěšujeme Texylu takhle:

$form->addTextarea("text", "Text:", 50, 10)->getControlPrototype()->class("texyla");

a v javascriptu pomocí jQuery

$(function () {
        $("textarea.texyla").texyla({
                ...
        });
});

Offline

 

#20 12. 7. 2009 21:50

Ondřej Mirtes
Moderator
Místo: Praha
Registrovaný: 8. 1. 2009
Příspěvky: 1357
Web

Re: Nette a Texyla?

Oggy napsal(a):

jak zavěšujete texylu na určitou textareu v nette? .. na stránkách textyly z toho nejsem moc moudrý.. ono jde zase spíše o komplet zavedení do nette ..

Pro zavěšení na určitou textareu to chce spíš znalost jQuery, než Nette, a dělá se to takto:

$("CSS selektor textarey").texyla();

A kompletní zavedení do Nette máš popsané výše v tomto threadu, i když si to můžeš udělat jakkoli po svém :)

EDIT: Pozdě, Honza Marek byl rychlejší :o))

Editoval LastHunter (12. 7. 2009 21:51)

Offline

 

#21 3. 8. 2009 1:06

Z0MBie
Člen
Registrovaný: 22. 7. 2008
Příspěvky: 21

Re: Nette a Texyla?

Pokoušel jsem se do Nette a Texyly implementovat tento presenter. Vše mi v něm už funguje až na jednu výjimku. V momentě, kdy uploaduji soubor mi po dokončí uploadu nabídne prohlížeč ke stažení soubor, ve kterém jsou serializovaná javascriptová data s informacemi od (pravděpodobně) payloadu. Problém je v tom, že místo aby si je Texyla nějakým způsobem sežvejkala, tak dobublají až k prohlížeči, kde je musím odmítnout a pak zavřít a otevřít okno od filesuploaderu. Můžu se zeptat, kde mám chybu, popřípadě jak ji opravit? Zajímavé je to, že všechno funguje, jen při uploadu to takto selhá. Prohlížeče Firefox a Opera

Edit: po hledání na foru jsem zjistil, že budu muset manualne změnit content-type. Takže jsem si za public function actionUpload($folder) { připsal ještě header('Content-type: text/plain');. V ten moment narážím na další chybu: http://zombik.net/…49257355.png. V praxi má asi Firefox v texyla.js problém s tím, že je tam eval("var data = "+content+";");, jenže nevím, co přesně a jak upravit.

Editoval Z0MBie (3. 8. 2009 2:00)

Offline

 

#22 3. 8. 2009 10:27

sodae
Nette Evangelist
Místo: Rád bych na pláži :)
Registrovaný: 8. 1. 2009
Příspěvky: 219
Web

Re: Nette a Texyla?

Honzo (Marek): co takhle udělat komponentu pro Form jako AddTexyla která by dědila textareu v parametrech se nastaví informace a pak to automaticky na konci rendrovani to přidá další javascript s texylou. Co myslíš ?

Editoval sodae (3. 8. 2009 10:30)


Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítání

Twitter: http://twitter.com/MartinSadovy

Offline

 

#23 21. 8. 2009 13:03

Saska
Člen
Místo: Kolín
Registrovaný: 21. 7. 2009
Příspěvky: 26

Re: Nette a Texyla?

Také bych se přikláněl k této variantě. I když úplně nejideálnější by bylo texy distribuovat rovnou s Texylou.

Offline

 

#24 21. 8. 2009 20:34

Honza Marek
Moderator
Místo: Kladno
Registrovaný: 31. 3. 2007
Příspěvky: 1281
Web

Re: Nette a Texyla?

sodae napsal(a):

Honzo (Marek): co takhle udělat komponentu pro Form jako AddTexyla která by dědila textareu v parametrech se nastaví informace a pak to automaticky na konci rendrovani to přidá další javascript s texylou. Co myslíš ?

Já Texylu přidávám takhle:

$form->addTextarea("text", "Text", 50, 20)->getControlPrototype()->class = "texyla";

O zbytek se postará Javascript. Řekl bych, že je to tak nejlepší, protože v metodě addTexyla bych ještě musel vymyslet způsob, jak Texylu konfigurovat a podobně.

Offline

 

#25 21. 8. 2009 21:00

Honza Kuchař
Moderator
Místo: Brno
Registrovaný: 12. 8. 2007
Příspěvky: 1285
Web

Re: Nette a Texyla?

Počkejte ještě pár dní s tím uploadováním souborů. Hned co dodělám do nějakého použitelného stavu ten MultipleFileUploader (viz extras), tak se bude moci začít používat pravý AJAX na odesílání souborů. A ještě jich můžeš vybrat více současně.

Offline

 

Zápatí