aktualizace snippetu z iframe

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

ahoj, udelal jsem si upload souboru pres iframe, aby nedochazelo k reloadu stranky. Upload probehne v poradku, vypisu si hlasku do divu. Seznam souboru mam ve snippetu, ktery potrebuji po ukonceni uploadu aktualizovat, nicmene sem neprisel na to jak. Z nouze uz jsem tam spal form, ktery po odeslani ma pouze invalidovat ten snippet, ale ted se mi nedari volat z toho iframu ajaxove :) Zajimalo by me, jak je toto mozne resit. Diky

Opolo.
Člen | 11
+
0
-

no, zkusim to zjednodusit. Uploaduju soubory pres iframe. Soubory se uspesne nahraji. Ve strance, ktera obsahuje formular pro nahrani souboru mam vypsane soubory. Ja je potrebuju obnovit. Nikde jsem nevycetl jak na to :( Pouzivat 2 iframy? jeden pro nahrani, druhy pro seznam souboru? :(

dEath
Člen | 39
+
0
-

Opolo. napsal(a):

no, zkusim to zjednodusit. Uploaduju soubory pres iframe. Soubory se uspesne nahraji. Ve strance, ktera obsahuje formular pro nahrani souboru mam vypsane soubory. Ja je potrebuju obnovit. Nikde jsem nevycetl jak na to :( Pouzivat 2 iframy? jeden pro nahrani, druhy pro seznam souboru? :(

tak to odešleš, uložíš to a potom akorát refreshnes stránku pomocí redirect(‚danatemplata‘). nebo si ajaxem posles po odeslani dotaz, aby to naslo nove prvky a pomoci JSON si je vypises.

osobne si taky myslim, ze posilani pozadavku do iframe neni zrovna kose, kdyz mas ajax.

Editoval dEath (10. 6. 2010 18:18)

Opolo.
Člen | 11
+
0
-

dEath napsal(a):

tak to odešleš, uložíš to a potom akorát refreshnes stránku pomocí redirect(‚danatemplata‘). nebo si ajaxem posles po odeslani dotaz, aby to naslo nove prvky a pomoci JSON si je vypises.

osobne si taky myslim, ze posilani pozadavku do iframe neni zrovna kose, kdyz mas ajax.

no, redirect by mi to vyresil, ale ja redirect nemuzu, protoze potrebuju na strance data zachovat, proto se snazim o upload souboru, ktery mi stranku nereloadne. Nasel jsem nekolik reseni pres ten iframe, funguje to, jen nevim, jak prave zajistit tu zpetnou vazbu, aby doslo k prekresleni seznamu souboru.

Ted se mozna pletu, ale soubor prece ajaxove poslat nejde? Pokud ho poslu do iframe, ktery zajisti zpracovani souboru, tak uz nemam kontrolu nad tim, jesli uz to zkoncilo nebo ne. :/

Honza Kuchař
Člen | 1662
+
0
-

Na toto, akorát přes Flash je MultipleFileUploader. https://componette.org/search/?…

dEath
Člen | 39
+
0
-

viděl jsem na to několik jQuery pluginů, které nabízeli i statutbar … tady je ukázka jednoduchého nahrávání

http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

mně osobně se líbí možnosti jQuery, ale je fakt, že jsem to mimo testování ještě nikde nenasadil, teprve se k tomu u své první Nette aplikace dostanu. Pokud můj příklad transformuje nějaký element na iframe tak se omlouvám (i takovou variantu už jsem viděl, ale tady jsem si toho nevšiml).

Editoval dEath (10. 6. 2010 23:37)

Opolo.
Člen | 11
+
0
-

add Honza: me vylekala veta „blíže nespecifikovaný problém na počátačích se systémem Mac“, takze jsem to, se priznam, ani nezkousel. :) Trosku jsem patral, jak by to slo udelat pres obycejny input file, ale bez reloadu stranky.

add dEath: jj, tohle pouziva iframe :P podobnych jsem nasel hodne, nicmene nektere se mi rozsypaly uplne, nektere uz jakz takz jely ale nemohl jsem to dotahnout.

Nakonec jsem to vyresil odeslanim formu do iframe (ten je v sablone natvrdo, s 0vou velikosti), pres hodnotu „target“ na formu. Na iframe jsem navesil kontrolu „load“ a v momente, kdyz se nacte, tak zavolam obnoveni snippetu se seznamem souboru. (respektive odeslu formular, ktery ma za ukol invalidate zajistit).

tombom
Člen | 10
+
0
-

add Honza: to se mi celkem líbí ten MultipleFileUploader, akorát jsem tam nikde nenašel odkaz na stažení…

22
Člen | 1478
+
0
-

taky jsem pro balíček, na SVN nejsem vybavenej :-)

Editoval 22 (11. 6. 2010 10:16)

newPOPE
Člen | 648
+
0
-

Ano nieco podobne, resp. asi to iste som teraz riesil a (ne)vyriesil :-D ale mozno to niekomu helpne (Nemam rad FLASH)

dEath napsal(a):

ten plugin sice funguje ale je to stale iframe na pozadi, co je asi jedina moznost ako v sucastnosti poslat form so suborom(i), pokial vynecham HTML5

Problem:
ten by aby nebol, ale vsetky tie pluginy fungujuce na iframe nedokazu poslat hlavicku X-Requested-With na zaklade ktorej NETTE detekuje AJAX.

Riesenie (nie moc dobre ale funkcne):
JsonResponse.php

<?php
	public function send()
	{
//		Environment::getHttpResponse()->setContentType($this->contentType); //blba uprava
		Environment::getHttpResponse()->setExpiration(FALSE);
		echo Json::encode($this->payload);
	}
?>

Presenter.php

<?php
	/** @var bool */
	protected $ajaxMode;
?>

BasePresenter.php

<?php
protected function startup() {
	parent::startup();

	if($this->getParam('ajaxUpload')) {
		$this->ajaxMode = TRUE;
		Debug::$showBar = FALSE;
	}
}
?>

a ako jQuery plugin s miernou upravou (line: 58)

<script>
if (url) {
	// clean url (don't include hash vaue)
	url = (url.match(/^([^#]+)/)||[])[1];
	url += '&ajaxUpload=1';
}
</script>

HomePresenter.php zo skeletonu

<?php
protected function createComponentFooForm($name) {

	$form = new AppForm($this, $name);
	$form->getElementPrototype()->class("ajax");

	$form->addText('name', "Name");
	$form->addFile('file', "file");

	$form->addSubmit('ok', "Send")
		->onClick[] = new NCallback($this, "fooFormOkClicked");

	return $form;

}

public function fooFormOkClicked(NSubmitButton $button) {
	$this->template->test = "form submitted"; //zmena obsahu snippetu
	$this->template->name = print_r($button->getForm()->values, 1); //len dump
	$form = $button->getForm();
	$values = $form->getValues();

	$this->invalidateControl('foo');

}
?>