jQuery File Upload a Nette
- wicked
- Člen | 290
Zdravím,
mám klasický formulář pro nahrávání souborů
public function createComponentGalerieForm() {
$form= new Form();
$form->addText('nazev', 'Název')
->setAttribute('placeholder', 'Název stránky')
->setAttribute('class', 'form-control');
$form->addUpload('upload', 'text')
->setAttribute('class', 'form-control');
$form->addSubmit('send', 'Přidat stránku')
->getControlPrototype()
->class('btn btn-info');
$form->onSuccess[] = $this->strankaFormSucceeded;
$form->setRenderer(new BootstrapRenderer());
return $form;
}
Jelikož je to pro paní, chtěl bych udělat vizuálně hezké a funkční nahrávání. Narazil jsem na toto
Chtěl bych se vás zeptat, zkoušeli jste to někdo implementovat na formulaře? Jak s tím dále pracovat?
Děkuji za rady a odpovědi
- Kcko
- Člen | 468
Hledal jsem něco podobného pro fotogalerii.
Našel jsem jednodušší plugin (nevím jestli Ti bude stačit), ale
implementace mi zabrala chvilku a dělá to defakto to samé.
Url: http://valums-file-uploader.github.io/file-uploader/
public function handleUpload()
{
$www = $this->presenter->context->parameters["wwwDir"];
$www .= '/storage/upload/';
$uploader = new \qqFileUploader();
$result = $uploader->handleUpload($www);
$this->sendResponse(new Nette\Application\Responses\JsonResponse($result));
}
<div id="file-uploader-demo1">
<noscript>
<p>Please enable JavaScript to use file uploader.</p>
<!-- or put a simple form for upload here -->
</noscript>
</div>
<div class="qq-upload-extra-drop-area">Drop files here too</div>
<script src="{$basePath}/assets/uploader/fileuploader.js" type="text/javascript"></script>
<script>
function createUploader(){
var uploader = new qq.FileUploader({
element: document.getElementById('file-uploader-demo1'),
** action: {link upload!},**
onComplete: function(id, fileName, responseJSON)
{
console.log(id);
console.log(fileName);
console.log(responseJSON);
},
debug: true,
extraDropzones: [qq.getByClass(document, 'qq-upload-extra-drop-area')[0]]
});
}
// in your app create uploader as soon as the DOM is ready
// don't wait for the window to load
window.onload = createUploader;
</script>
- iguana007
- Člen | 970
@Tirus91 a co ti v tom brání? :) Si jen přidej tu „svou logiku“ do té metody, která ty uploadované soubory ukládá/zpracovává. Do toho inicializačního Javasciptu uploaderu si mužeš předat i parametr typu id_kategorie do které daný soubor patří atd.
Jen pozor na jednu věc u těchto custom řešení/uploaderů – již se to tady na fóru několikrát řešilo – pokud daný uploader používá pro browsery bez HTML5 supportu flashovou instanci + upload probíhá u zalogovaného uživatele, tak je třeba v Nette ošetřit i session_id – jinak to vede k tomu, že hned po prvním uploadovaném souboru se uživatel odhlásí a upload potom nefunguje. Jedno z vláken, kde se tato problematika řešila je toto: https://forum.nette.org/…fy-chyba-303 (ale je jich tu více) – nebo se můžete podívat do addonu MultipleFileUpload, jak se to řeší tam: https://github.com/…leUpload.php#L92
- wicked
- Člen | 290
Tirus91 napsal(a):
Tak něco takového akorát taky řeším. Toto mi asi vyřeší úplně vše. Ovšem já potřebuju uložit uploadované soubory po svém. (potřebuju změnit velikosti, vytvořit náhledy, zapsat do DB, apod..)
Tak tohle si pak uděláš v metodě pro zpracování, mě jde spíš i o to, zda to někdo už zkoušel popřípadě rozchodil.
- iguana007
- Člen | 970
Já ten flow řeším úplně naopak, než píše @Kcko – tj.:
nejdříve vytvořit přes form záznam, ke kterému se budou nahrané
soubory/obrázky vázat a až, jakmile je záznam vytvořen, tak teprve potom se
pustit do uploadu souborů. Nemusíš se je takto „držet bokem“ a rovnou je
při uploadu přiřazuješ k již vytvořenému záznamu.
Mezitím se totiž může stát spousta věcí, které by vedly k tomu, že by
sis musel ještě napsat nějaký garbage collector, který by ty soubory
nepřiřazené k nějakému záznamu musel průběžně mazat.
- Tirus91
- Člen | 199
@wicked
tak jsem to zkusil a pro každý obrázek, to posílá celý formulář. Tudíž
by to mělo jít provázat s normálním formulářem Nette ;)
jen co mi tam zatím chybí, je využítí snippetů, zkusil jsem si invalidovat něco a nepřekreslilo se mi to
Editoval Tirus91 (12. 9. 2014 11:05)
- llook
- Člen | 407
Zkoušeli a uspěli, ale už je to skoro rok a nevím, jestli to bude funkční s aktuálním Nette. Část toho řešení je tady: https://github.com/…ploadControl
Druhá část, tj. samotnou práci se soubory, je potřeba dodělat implementací těch tří rozhranní ze src/model.