Vytvoření thumbnail při nahrávání Multiupload a změna URL
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Joacim
- Člen | 229
Zdravím, používám jkuchar/multiplefileupload a potřeboval bych při ukládání obrázků vytvořit i thumbnail, jaká je nejjednodušší cesta ? Existuje již něco v nette co bych mohl použít.
URL s ID
<a id="create-gallery" class="btn btn-default" href="{$presenter->link('Gallery:add', $gid)}"><i class="fa fa-plus-circle"></i> Přidat nové fotky</a>
GalleryPresenter.php
public function handleFormSuccess(Form $form) {
$gid = $this->getParameter('gid');
$data = $form->getValues();
// Let's pass our data to template
$this->template->values = $data;
$queueId = uniqid();
// Moving uploaded files
foreach ($data["upload"] AS $file) {
// Vytvoření háhledu (thumbnail)
// Uložení záznamů do DB
// $file je instance HttpUploadedFile
$newFilePath = \Nette\Environment::expand("%appDir%") . "/../www/img_gallery/" . $gid . "/" . $file->getName();
// V produkčním módu nepřesunujeme soubory...
if (!\Nette\Environment::isProduction()) {
if ($file->move($newFilePath))
$this->flashMessage("File " . $file->getName() . " was successfully moved!");
else
$this->flashMessage("Error while moving file " . $file->getName() . ".");
}
}
}
Otázky
- Jak vytvořit a uložit thumbnail (mám již svoji třídu, ale je velice složitá), chci nahrávanou forku ořezat na jistou šířku a potom vytvořit náhled který bude mít rozměry např: 400*300
- Jak změnit URL adresu, aby bylo ID galerie cool url z /gallery/show?gid=15 → /gallery/show/15/ (jak poté získat Gallery ID ?)
- K čemu jsou v jkuchar/multiplefileupload 3 tlačítka, když mohou být jen 2 ? („Přidat soubory“, „Spustit nahrávání“, „Odeslání formuláře“) – když by stačolo použít jen Spustit nahrávání ? Je to tam kvůly použití Ajaxu nebo má tlačítko „Spustit nahrávání i jiný význam“ ?
- Jak nejlépe po odeslání formuláře jkuchar/multiplefileupload přesměrovat na stránku kde se budou editovat právě přidané forky ? Přes přesměrování v presenteru nebo existuje nějakej přímej způsob ?
- Felix
- Nette Core | 1247
ad 1)
Muzes si vytvorit nejakou sluzbu ImageService
a tam to vsechno
udelat.
class ImageService {
function resize(FileUpload $upload) {
// isImage?? isOk??
$image = $file->toImage();
$image->resize($w, $h, $image::SHRINK_ONLY);
// .. etc.
$image->save($path);
}
}
Zalezi jenom na tobe jakou chces pouzit zmensovaci techniku. Viz dokumentace.
ad 2)
$router[] = new Route('gallery/show/<gid [0-9]+>', 'Gallery:show');
ad 3) + 4)
Nepouzivam, tak nemuzu radit.