Nette a Texyla?

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

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

nAS
Člen | 277
+
0
-

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.

Honza Marek
Člen | 1664
+
0
-

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)

sodae
Nette Evangelist | 250
+
0
-

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

Honza Marek
Člen | 1664
+
0
-

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 :)

Patrik Votoček
Člen | 2221
+
0
-

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ě).

Honza Marek
Člen | 1664
+
0
-

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

Honza Marek
Člen | 1664
+
0
-

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)

Patrik Votoček
Člen | 2221
+
0
-

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?

Tomik
Nette Evangelist | 485
+
0
-

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í. :)

Honza Marek
Člen | 1664
+
0
-

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.

romansklenar
Člen | 655
+
0
-

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é?

Patrik Votoček
Člen | 2221
+
0
-

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?

Ola
Člen | 385
+
0
-

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)

Oggy
Člen | 306
+
0
-

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

paranoiq
Člen | 392
+
0
-

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: https://forum.nette.org/…-robotloader)

Oggy
Člen | 306
+
0
-

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: https://forum.nette.org/…-robotloader)

díky..

Oggy
Člen | 306
+
0
-

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)

Honza Marek
Člen | 1664
+
0
-

V nette zavěšujeme Texylu takhle:

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

a v javascriptu pomocí jQuery

$(function () {
	$("textarea.texyla").texyla({
		...
	});
});
Ondřej Mirtes
Člen | 1536
+
0
-

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)

Z0MBie
Člen | 19
+
0
-

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)

sodae
Nette Evangelist | 250
+
0
-

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)

Saska
Člen | 23
+
0
-

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

Honza Marek
Člen | 1664
+
0
-

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ě.

Honza Kuchař
Člen | 1662
+
0
-

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ě.

Honza Kuchař
Člen | 1662
+
0
-

Saska napsal(a):

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

To nejde z licenčních důvodů

kravčo
Člen | 721
+
0
-

honzakuchar napsal(a):

To nejde z licenčních důvodů

Ale ide, Texy! je pod GPL a Texyla je pod GPL alebo MIT, teda spoločne môžu byť bez problémov šírené pod GPL.

cuga
Člen | 210
+
0
-
<script type="text/javascript" src="{$baseUri}js/jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="{$baseUri}js/jquery/jquery.ui.js"></script>

<script type="text/javascript" src="{!$baseUri}js/texyla/texyla.js"></script>
<link rel="stylesheet" type="text/css" href="{!$baseUri}js/texyla/css/style.css" />
<script type="text/javascript">
$.texyla("setDefaults", {
        previewPath: {plink Texyla:preview},
        // soubory
        filesPath: {plink TexylaFiles:listFiles},
        filesThumbPath: "%var%",
        filesUploadPath: {plink TexylaFiles:upload}
});
</script>

co delam zle??? kdyz nedam to setDefaults, tak se to rozbehne, ale jinak ani prd…

Honza Marek
Člen | 1664
+
0
-

Jestli máš aktuální Texylu, tak se změnila syntax na $.texyla.setDefaults(…).

cuga
Člen | 210
+
0
-

jj, stahnul sem si ji dneska, ale ani

$.texyla.setDefaults({
        previewPath: {plink Texyla:preview},
        // soubory
        filesPath: {plink TexylaFiles:listFiles},
        filesThumbPath: "%var%",
        filesUploadPath: {plink TexylaFiles:upload}
});

nezabralo… pritom kdyz dam jenom $(function(){ $.texyla() }); tak to fakci

Honza Marek
Člen | 1664
+
0
-

Co třeba takhle?

$.texyla.setDefaults({
        previewPath: {plink Texyla:preview},
        // soubory
        filesPath: {plink TexylaFiles:listFiles},
        filesThumbPath: "%var%",
        filesUploadPath: {plink TexylaFiles:upload}
});

$.texyla();

Metoda setDefaults fakt jen nastavuje výchozí nastavení.

Ondřej Mirtes
Člen | 1536
+
0
-

A mrkni do Firebugu, možná tam bude, kde je chyba.

BTW: Není tenhle zápis nastavení ekvivalentní?

$.texyla({
	width: 700,
	previewPath: {plink :Admin:Texyla:preview},
	toolbar: [ 'h3', 'h4', null, 'bold', 'italic', null, 'ul', 'ol', 'blockquote', 'table', 'symbol', null, 'link', 'img', null, 'files' ],
});

Editoval LastHunter (13. 9. 2009 21:23)

cuga
Člen | 210
+
0
-

tak nakonec takhle :)

$(function(){
  $.texyla.setDefaults({
        previewPath: {plink Texyla:preview},
        // soubory
        filesPath: {plink TexylaFiles:listFiles},
        filesThumbPath: "%var%",
        filesUploadPath: {plink TexylaFiles:upload}
  });

  $.texyla();
});

a jeste otazka, cim muze byt ze se mi na ni neaplikovaly styly? i kdyz css mam nalinkovane dobre???

Editoval cuga (13. 9. 2009 21:28)

Honza Marek
Člen | 1664
+
0
-

Jsou potřeba dvě csska. Jedno je se základnim stylem a druhý jakoby se skinem.

cuga
Člen | 210
+
0
-

uz to klaplo :) akorat bych se chtel tvurce poptat, jake ma byt chovani po nahrani souboru. u me se to chova tak, ze to zhodi okno, vyhodi chybu, ze „Missing } in XML expression“

Honza Marek
Člen | 1664
+
0
-

No teď jsem taky koumal nad zprovozňováním a došel jsem k tomuto:

  • Po uploadu je potřeba odezvu posílat s typem text/plain.
  • Je potřeba upravit „ajaxově uploadovací“ část Texyly. Ve stáhnutém souboru texyla.js zkus nahradit body.innerHtml za $(body).text().
cuga
Člen | 210
+
0
-

zmenil sem, ale okno spadne zase… akorat teda uz nevyvola chybu… ma to fungovat tak, ze po nahrani souboru ti nabidne moznost ho pridat, nebo ho jenom nahraje a zavreni se je spravne chovani?

Honza Marek
Člen | 1664
+
0
-

Má to fungovat tak, že po nahrání ti to nabídne vložení obrázku nebo odkazu (podle typu souboru). Spadne znamená, že to rozbije prohlížeč? Jaký?

cuga
Člen | 210
+
0
-

Spadne znamena, ze vypne to okno, ale pritom nahrani souboru se provede. Mam FF 3.5.3

tom
Člen | 171
+
0
-

Honza M. napsal(a):

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š.

Muzu mit jeden uplne zacatecnicky dotaz? Stahnul jsem si Texylu a ted premyslim kam nejlip ty jednotlive zdrojaky umistit. Zatim jsem ji celou hodil do adresare tools (je jedno jak je nazvany, mam tam jeste Requirements-Checker a RoutingDebugger). Do libs, kam by to asi pasovalo lip jsem ji nedaval kvuli .htaccess! Do app/controls taky ne, tam mi to moc logicky nepasuje … Ale ono ani tak nejde o to kam Texylu umistit jak spis o to jak ji zprovoznit tak aby sla pouzit odkudkoliv … Nejak se mi nedari aby byla plne funkcni v ruznych castech me aplikace. Pomoci tovarnicky v presenteru jsem ji zprovoznil napr. na strance /komentare ale kdyz jsem ji dal i do stranky /fotky/reakce tak vcelku fungovala az na to ze treba v nabidce smajliku se nezobrazuji obrazky tech smajlu a to proto ze je tam jine „baseUri“ … Jde mi o to, ze se mi nedari nastavit vse na jednom miste a univerzalne … Existuje na to nejaka rada, co a kde musim spravne nastavit aby pak cela taxyla fungovala kdekoli v me aplikaci? Diky moc :)

Honza Marek
Člen | 1664
+
0
-

No já to mám rozházené porůznu v document_root/css, document_root/js, TexylaPresenter samozřejmě mezi presenterama.

regiss
Člen | 61
+
0
-

Honza Marek napsal(a):

No já to mám rozházené porůznu v document_root/css, document_root/js, TexylaPresenter samozřejmě mezi presenterama.

Nedal by se dat funkci priklad na Github. Nejdou mi nastavit cesty k texyle. Puvodni link na Integraci texyly s Nette neni funkcni. Na gitu by to bylo nejlepsi, clovek pak hned pochopi jak to funguje.

Edit:
Nevsiml jsem si, ze texyla je na Githabu. V examples je ukazka jak integrovat texylu s Nette. Pro funcknost je nutne vytvorit par adresaru a dat jim pravo zapisu:

  • app ⇒ temp
  • document_root ⇒ webtemp, files

Dekuji za tuto verzi, ve ktere je vsechno super ukazano.

Ondra

Editoval regiss (16. 7. 2010 5:18)

zoltinho
Člen | 24
+
0
-

Stáhl jsem si z Githubu poslední verzi Texyly, a při prvním spuštění parse error.. v TexylaPresenter.php na řádku 202, chybí za příkazem $this->terminate() středník.

S touhle opravou to spustím, ale nějak to celé nefunguje jak má.. kliknu na náhled/HTML a sekne se to na „prosím čekejte“..

Doufám že tahle verze funguje bez problémů a chyby jsou jen v example..

Nemohli byste to v něm prosím opravit? Je to asi jediný aktuální zdroj, jak to použít v Nette
Díky

Editoval zoltinho (20. 5. 2011 3:10)

cuga
Člen | 210
+
0
-

zoltinho: koukni do FireBugu, jestli ti nekde nevyhazuje 500, pripadne mrknout do logu, jestli ti nezalogoval chybu

Morfeo21
Člen | 35
+
0
-

Dneska jsem aplikoval Texylu, ale nepodařilo se mi ji rozběhat pro více než jednu textareu na stránce.
Zkoušel jsem

<script type="text/javascript">
//<![CDATA[
$.texyla.setDefaults({
	texyCfg: "admin",
	baseDir: '/texyla',
	previewPath: {link Texyla:preview},
	buttonType: "span"
});

$(function () {
	$(".texyla").texyla({
		buttonType: "span"
	});
});
//]]>
</script>

(s tím, že všechny textarei mají nastavenou classu)
i pouze

<script>
	$.texyla();
</script>

ale pokaždé se Texyla aplikuje jen na první textareu na stránce. Nevíte, prosím, co s tím?

Lábus
Bronze Partner | 19
+
0
-

mám stejný problém. opravdu někdo nevíte kde je problém?

Lábus
Bronze Partner | 19
+
0
-

pomohla úprava v souboru texyla.js – přidána podmínka

<script>

if (text != null) { ... }

</script>

takže…

<script>
Texyla.prototype.expand = function (text, variable) {
	if (text != null) { // přidána podmínka
		text = text.replace("%texyla_base%", this.baseDir);
		if (variable) {
			text = text.replace("%var%", variable);
		}
	}
	return text;
};
</script>

Editoval Lábus (20. 3. 2012 14:12)