[addon multiplefileupload] MultipleFileUpload – form control
- norbe
- Backer | 405
Mohu poskytnout pouze nástroj opačný, tj konverze z verze bez namespace na verzi s namespace…
- Honza Kuchař
- Člen | 1662
:) To je príma. Děkuji mnohokráte za informaci. Určitě mi to ušetří kupu času při přechod na PHP 5.3 a namespaces. Ale co s tou zpětnou kompatibilitou pro PHP 5.2 s a bez prefixů?
Jak to řeší jiní extrátoři? Asi se jdu zepatat – tedy založit vlákno…
- LuKa
- Člen | 3
@Honza Kuchar: jeste jednou. Kdyz uzivatel stiskne odkaz „Nejdou vám soubory nahrát? Klikněte zde.“ a pri nahravani dojde k chybe, jak to uzivatelovi rict. Uz se to tu nekde diskutovalo, ale bez nejakeho reseni. Asi nejlepsi by to bylo dostat jako error do formulare, ale nenapada me jak. Jde o to zobrazit vzniklou chybu pri nahravani, treba „Prekrocil jste maximalni povoleny pocet fotografii“. Diky.
- Honza Kuchař
- Člen | 1662
Tak to take funguje. ;) Ale pozor! Odeslanim pomoci standardnich html4 policek nefunguje ajax! A pokud ajax pouzivas a potrebujes vypsat tu hlasku, obal form do snippetu a ten invaliduj pri jakemkoli odeslani. Pokud ti to neni jasne, jeste muzu poslat priklad.
- lvq
- Člen | 47
Chtel bych se zeptat, co mam udelat pro to, aby po stisknuti tlacitka odeslat
se zacaly nahravat soubory (bez toho, abych predtim musel stisknout tlacitko
nahrat). Dobre to funguje v ukazce: http://multiplefileupload.projekty.mujserver.net/
Predem dik za radu
- Honza Kuchař
- Člen | 1662
Stačí mít načteny všechny ty JS soubory, podle dokumentace. (a
nezapomenout v šabloně volat
{!=MultipleFileUpload::getHead()}
)
- lvq
- Člen | 47
@Honza Kuchař: diky, mel's pravdu, bylo to tech javascriptech. Asi
si zato muzu sam a nejak jsem zkombinoval soubory vice verzi dokupy. Ale kdyby
mel nekdo stejnej problem, tak se zkuste podivat do souboru
MultipleFileUpload.js
na radek 6 a budto odmazat anebo pripsat
mfu
:
$(„div.mfuplupload[id]“, this);
- jet
- Člen | 4
Kolegové, po celém dnu hledání chyby se na vás obracím pro radu… snažím se rozchodit plupload a dostal jsem se do mrtvého bodu.
Vyberu soubory, stisknu spustit nahrávání, soubor se uploaduje a na konci,
místo aby se objevila zelená fajfka, tak se objeví vykřičník a chyba IO
error #2032 (nic relevantního jsem k této chybě nevygooglil).
Soubor se ve skutečnosti v pořádku nahrál, je v tempu a jde i normálně
otevřít. Nicméně v db v poli data není žádná hodnota a pole chunk je
vždy o jedna menší, než když ten samý soubor nahraju přes examplový
mfu, který mi normálně funguje.
Exampl běži na nette bez prefixů, moje aplikace na prefixovaném nette 2.0dev, takže jsem celý MFU musel přepsat, aby fungoval s prefixy.
Může být problém v odlišnosti Template vs. NFileTemplate, nebo
NHttpUploadedFile vs. HttpUploadedFile apod.?
Budu vděčný za jakoukoli radu!
P.S. xdebug mi bohužel nefunguje, z nějakého důvodu mi ho apache nechce načíst…
Editoval jet (29. 4. 2011 2:07)
- Honza Kuchař
- Člen | 1662
To se opravdu špatně radí.
- Zkus přepnout laděnku do produkčního režimu. (bude se logovat do souborů)
- určitě umí plupload nějaký onError, který ti předá co se stalo
Jinak problém s kompatibilitou by být neměl, ale nic nezaručuji, nezkoumal jsem to.
- Honza Kuchař
- Člen | 1662
Tak to je fajn.
PS: Na projektech, které jsou takové více AJAXové používám laděnku výhradně v produkčním režimu… (doporučuji)
- iguana007
- Člen | 970
Patrik Votoček napsal(a):
související vlákno: https://forum.nette.org/…vani-ladenky
Pěkné, toto vlákno jsem jaksi přehlíd, díky
- Honza Kuchař
- Člen | 1662
Já také. Ale je to trošku offtopic, to byla jen taková poznámka mimochodem, takže už toho prosím nechme nebo se přesuňme do výše odkazovaných míst. :-)
- jet
- Člen | 4
narazil jsem na dalsi problem, nefunguje mi upload na ostrem serveru, zatimco na localhostu vse bezi bez problemu:
- kdyz v bootstrapu pouziju
MultipleFileUpload::setQueuesModel(new MFUQueuesDibi());
tak se soubory do tempu nahraji, ale pri odeslani formulare to hodi chybuField 'data' doesn't have a default value
INSERT INTO `files` (`queueID`, `created`, `name`, `chunk`, `chunks`)
VALUES ('255344dbdf23e3e611', 1304293955, '5d59a46a2cda17487b715b3f5f02015dc1471c77', 1, 4)
- kdyz v bootstrapu pouziju
MultipleFileUpload::setQueuesModel(new MFUQueuesSQLite());
tak se formular ani nenacte a koncim s
Call to undefined function sqlite_escape_string()
- kdyz v bootstrapu pouziju
MultipleFileUpload::setQueuesModel(new MFUQueuesLog());
tak po stisknu ti tlacitka spustit nahravani skoncim na
Cannot instantiate service "'Nette\Logger', handler 'FileLogger::createFileLogger' is not callable.
pritom vsechy tri metody mi na localhostu funguji bez problemu, uz nevim co s tim :(
- Honza Kuchař
- Člen | 1662
- Nevím proč.
- Není načteno rozšíření sqlite.
- Není načtená knihnovna Nette\Logger.
- jet
- Člen | 4
takze 2. jsem zavrhnul protoze na hostingu neni sqlite, ale porad mi vrta
hlavou 1. – proc se neplni pole data?
neni mozne, ze je zakazana na hostingu v php konfiguraci nejaka klicova funkce,
ktera tam dela tu serializaci ci co…? snazim se to zprovoznit na tomto hostingu :)
- nn2
- Člen | 9
Zdravím, dnes jsem narazil na nefunkčnost Plupload v Safari/Win. Vypátral jsem, že v Safari se neposílá chunks (není podpora?).
Pomohla úprava MFUUIPlupload.php, řádek 149:
if(($chunk+1) == $chunks || $chunks==0) {
Zkoušel jsem to pak i v jiných prohlížečích a funguje. Pokud jsem to udělal špatně, tak mě opravte.
- Honza Kuchař
- Člen | 1662
@nn2: mrknu na to
@jet: podivej se, co se ti uklada do databaze. (doporucuji zakazat clenup
v Mfu, jinak asi nic neuvidis) Nejake specialni naroky to nema. (mrkni do
zdrojaku dibi driveru)
- iguana007
- Člen | 970
Nemáte někdo prosím tento addon rozjetý pod latest dev verzí Nette pro 5.3 ? Mě se to ani za boha nedaří rozjet, pořád dostávám samé Exceptions a skončil jsem na této:
Argument 1 passed to Nette\Forms\Container::addComponent() must implement interface Nette\ComponentModel\IComponent, instance of MultipleFileUpload given, called in C:\xampp\htdocs\www\libs\Nette\Forms\Container.php on line 425 and defined
Laděnka se mi rozbalí na: MultipleFileUpload.php:498 a už vážně nevím co s tím.
- Honza Kuchař
- Člen | 1662
Já bohužel nemohu sloužit. Ovšem, myslím, že chybová hláška hovoří jasně, stačí se trošku vyspat. :-)
- forkman
- Člen | 72
Tak jsem se podle doporučení vyspal, snažil jsem se upravit MFU pro Nette 2.0-beta a Apač mi hází Segmentation fault :-)
Chyba, kterou popisuje iguana007 je způsobená tím, že ve 2.0-dev není třída FileUpload, ale je tam UploadControl. Když ale deklaraci třídi upravím na:
<?php
class MultipleFileUpload extends UploadControl { ...
?>
začne mi na tom padat Apač. Nevíte někdo co s tím? V OOP si nejsem zase tak jistý, ale udělal jsem to snad dobře, ne? :-D
Editoval forkman (20. 6. 2011 10:19)
- B4nan
- Člen | 13
ja to provozuju bez problemu na aktualnim nette. zmeny co si vybatuju:
- Template ⇒ FileTemplate
- FileUpload ⇒ UploadControl – tady se musi zmenit i definice dvou funkci, ktery vraceli FileUpload
plus jestli tam bylo jeste neco tak mi to krasne ladenka vypsala, takze to slo opravit behem par minut. jestli furt nevis, tak ti muzu uploadnout moji upravenou verzi.
- Honza Kuchař
- Člen | 1662
Upřímně nevím, čím to je. Kdysi se mi to stávalo také, způsoboval to neaktuální xdebug.
- Darkry
- Člen | 101
Zdravím,
chtěl bych tohle rozšíření rozchodit pod verzí
Nette Framework (version 2.0-dev 9f535f9 released on 2011-01-10)
Nakopíroval jsem potřebné soubory nahradil Template ⇒ FileTemplate, ale
házelo mi to toto:
Unknown macro {!uploadLink|escapeJs} in ...\Plupload\initJS.js:14
.
Nechápu proč se latte plete do .js souborů, ale také nechápu proč jsou js
soubory ve složce app (app/components/multipleFileUpload/...../initJS.js)
Každopádně když jsem do bootstrapu přidal:
MultipleFileUpload::getUIRegistrator()
->clear()
->register("MFUUIHTML4SingleUpload")
->register("MFUUIUploadify");
a změnil tak nahrávač na Uploadify (i když bych upřednostňoval
Plupload) tak se sice žádná laděnka neobjevila, ale objevil se mi
HTML4SingleUpload (flash i js i všechno v prohlžíeči mám –
nejnovější chrome). Podíval jsem se do konzole a mám tam toto:
Uncaught ReferenceError: MFUFallbackController is not defined
Chyba se odehrává někde na tomto řádku:
Github
V čemž se mi jednak nechce hrabat a jednak moc dobře neumím javascript takže bych to akorát rozbil ještě víc.
Nejradši bych opravil tu první chybu abych měl Plupload, ale tak pokud by bylo snazší opravit ten Uploadify tak se taky nebráním :-).
Díky moc
- Honza Kuchař
- Člen | 1662
Předem, myslím, že oprava by neměla být až zase tak složitá.
K tomu makru: Budeš muset hledat, jaká existuje k tomu makru alternativa v Nette 2.0. Byla to fce, která escapovala string v JavaScriptu. (Zkus si vytvořit šablonu v které bude <script type=„text/javascript“>var test = {$test}</script>; a z vygenerovaného PHP kódu šablony (v /APP_DIR/data/tmp) se pokud vyčíst, kam jít hledat dále)
PlUpload by neměl být problém (potom, co najdeš alternativu k tomu makru)
MFUFallbackController: Co dělá je napsáno v dokumentaci/fóru. Ale to je
teď jedno. Píše to, že třída není načtená, tedy zkus hledat proč.
Definovaná je v souboru:
Nette_MultipleFileUploader\document_root\js\MFUFallbackController.js
a za normálních okolností se vypisuje do @layout pomocí příkazu:
{!=MultipleFileUpload::getHead()}
. (⇒ proto se MFU+latte plete do
JS ;-) )
- zuhla
- Člen | 33
Dobrý den, mám Nette 2.0 Beta. Nějaké chyby jako třeba FileUpload ⇒ UploadControl jsem už spravil, ale nyní mi hází laděnka chybu v \UserInterface\Interfaces\MFUUIBase.php . Mám MultiFIleUpload už rozjetý na jiných projektech se starší verzí Nette, ale nyní jsem udělal projekt na nové a zde se zasekl :(
..\multi2\app\controls\MultipleFileUpload\UserInterface\Interfaces\MFUUIBase.php:56 source ► Environment:: getVariable (arguments ►)
49: //$presenter = Environment::getApplication()->getPresenter();
50: $template->onPrepareFilters[] = array($this, 'templatePrepareFilters');
51:
52: // default parameters
53: //$template->component = $this; // DEPRECATED!
54: //$template->control = $this;
55: //$template->presenter = $presenter;
56: $template->baseUri = Environment::getVariable('baseUri');
57: $template->basePath = rtrim($template->baseUri, '/');
58:
59: // flash message
60: /*if ($presenter !== NULL && $presenter->hasFlashSession()) {
61: $id = $this->getParamId('flash');
62: $template->flashes = $presenter->getFlashSession()->$id;
63: }
Děkuji za odpovědi a rady.
- Honza Kuchař
- Člen | 1662
Je někdo z vás, kdo MFU portoval pro Nette 2.0 a je ochoten sepsat stručný seznam toho, co je třeba změnit, aby MFU fungovalo pod Nette 2.0? Budu moc rád a prozatím tento seznam připojím do dokumentace, ať s tím tady lidé netráví kupu času.
Případně, budu moc rád za ZIP balíček, funkčního MFU pro Nette 2.0. Opět přidám odkaz do dokumentace.
@Darkry: Vydán bugfix. Divím se, že mi to fungovalo i s takovýmto překlepem?! Asi moc spoléhám na Laděnku.
- iguana007
- Člen | 970
Nenarazili jste pls někdo na problém, že když je uploader v Groupě formu, tak nefunguje? U mě tomu tak je a nevím co s tím. Projevuje se to tak, že Add files button nefunguje + text pod uploaderem je vyrenderovaný 2×.
Když Groupy z formu odstraním, tak je vše ok.
Používám interface Plupload.
Editoval iguana007 (21. 7. 2011 12:56)
- jenda87
- Člen | 20
Máte prosím někdo funkční MFU pro php 5.3 a Nette 2.0 Beta?
Prodral jsem se sice všemi chybami, ale MFU stejně nefunguje, resp. interface
uploadify. Už nevím co s tím.
Situace je taková, že se nezobrazí tlačítko Uploadify, jen odkaz na htmlsingle upload. Žádné chyby js, ani ničeho jiného ve firebugu.
MFU registruji takto:
MultipleFileUpload::register();
MultipleFileUpload::getUIRegistrator()
->clear()
->register("MFUUIHTML4SingleUpload")
->register("MFUUIUploadify");
MultipleFileUpload::setQueuesModel(new MFUQueuesDibi());
Editoval jenda87 (24. 7. 2011 13:09)
- Casper
- Člen | 253
Zdravím, taky se snažím prokousat změnami pro Nette 2.0-beta (PHP 5.3), ale zasekl jsem se na chybě v MFUUIUploadify.php na řádku 55, kde mi Laděnka hlásí: Callback ‚Nette\Templates\TemplateHelpers::loader‘ is not callable.
52: public function render(MultipleFileUpload $upload) {
53: $template = $this->createTemplate(dirname(__FILE__)."/html.phtml");
54: $template->uploadifyId = $upload->getHtmlId() . "-uploadifyBox";
55: return $template->__toString(TRUE);
56: }
Víte někdo jak na to?
Editoval Casper (26. 7. 2011 19:30)
- Casper
- Člen | 253
Díky moc, pomohlo, prokousal jsem se o kus dál, ovšem zasekl jsem se na další (podivnější) chybové hlášce v souboru MFUUIUploadify.php ve funkci renderInitJavaScript:
Missing item 'baseUri'
na řádku 74 (to i tehdy pokud
odkomentuji řádek 72; dokonce v debugu ve výpisu template je v params
vidět naplněný baseUri vždy)
72: //$tpl->baseUri = WEB_DIR."/";
73: Nette\Diagnostics\Debugger::barDump($tpl);
74: return $tpl->__toString(TRUE);
Neřešil jste někdo podobný problém?
- Honza Kuchař
- Člen | 1662
Vzhledem k tomu, ze se mi chyba neprojevuje, nejspis budes muset udelat nejaiy balicek s mini aplikaci, kde se to projevi. Tzn. jeden formular s jednim polickem.
//edit: samozrejme s i s pribalenym nette. Proste kompletni balicek.
- Martin7
- Člen | 23
Ahoj, zkouším rozchodit MFU na nette 2.0 v php 5.2. Opravil jsem chyby, které to hlásilo pomocí tohoto topicu. Teď už to žádné chyby nehází, ale nezobrazí se Plupload zobrazí se pouze věta Nejdou vám soubory nahrát? Klikněte zde., pokud na tuto větu kliknu tak se nic nestane.
zde hlavicka jestli mi nechybí nejaký soubor potrebný pro fungování.
Header:
<link rel="stylesheet" media="screen,projection,tv" href="{$basePath}/css/screen.css" type="text/css">
<link rel="stylesheet" media="print" href="{$basePath}/css/print.css" type="text/css">
<link rel="stylesheet" media="print" href="{$basePath}/css/example.css" type="text/css">
<link rel="stylesheet" media="print" href="{$basePath}/css/MultipleFileUpload/plupload.queue.css" type="text/css">
<link rel="shortcut icon" href="{$basePath}/favicon.ico" type="image/x-icon">
{!=MultipleFileUpload::getHead()}
<link rel="stylesheet" href="http://jquery-ui.googlecode.com/svn/tags/1.7.2/themes/blitzer/ui.all.css" type="text/css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/tags/1.7.2/ui/minified/ui.core.min.js"></script>
<script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/tags/1.7.2/ui/minified/ui.slider.min.js"></script>
<script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/tags/1.7.2/ui/minified/ui.datepicker.min.js"></script>
<script type="text/javascript" src="http://jquery-ui.googlecode.com/svn/tags/1.7.2/ui/minified/i18n/ui.datepicker-cs.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/timepicker-cs.js"></script>
<script type="text/JavaScript" src="{$basePath}/js/jquery.livequery.js"></script>
<script type="text/JavaScript" src="{$basePath}/js/nette-ajax-driver.js"></script>
<script type="text/JavaScript" src="{$basePath}/js/nette-ajax-form.js"></script>
<script type="text/JavaScript" src="{$basePath}/js/MFUFallbackController.js"></script>
<script type="text/javascript" src="{$basePath}/js/MultipleFileUpload/plupload/gears_init.js"></script>
<script type="text/javascript" src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"></script>
<script type="text/javascript" src="{$basePath}/js/MultipleFileUpload/plupload/plupload.full.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/MultipleFileUpload/plupload/jquery.plupload.queue.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/MultipleFileUpload/plupload/cs.js"></script>
<script type="text/javascript" src="{$basePath}/js/MultipleFileUpload/plupload/MultipleFileUpload.js"></script>
komponenta:
protected function createComponentFormPridatFoto($name) {
$form = new AppForm($this,$name);
$form->addMultipleFileUpload("pokus1","Testík",20)
->addRule("MultipleFileUpload::validateFilled","Musíte odeslat alespoň jeden soubor!")
->addRule("MultipleFileUpload::validateFileSize","Soubory jsou dohromady moc veliké!",1024); // 1 KB
return $form;
}
Editoval Martin7 (4. 8. 2011 15:08)
- Honza Kuchař
- Člen | 1662
Pokud tam musíš vypisovat všechny ty soubory k načtení, tak je chyba někde v {!=MultipleFileUpload::getHead()}. Protože ten má za úkol vygenerovat kód, který všechny potřebné soubory načte.
//EDIT: Tuším tu někdo psal něco o záměně Template za FileTemplate. MFU má na šablony velmi jednoduchou vlastní třídu, která dědí v Nette 0.9.x od Template. V Nette 2.0 má dědit od FileTemplate.
Editoval Honza Kuchař (5. 8. 2011 0:59)