Uploadovani souboru a jeho obsluha uz primo ve formulari

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

Ahoj,
nejakou dobu si lamu hlavu, jakym zpusobem by slo nejvice zjednodusit nahravani a obsluha souboru ve formularich. Melo by to vypadat ve vysledku nejak takto:

label input [stahnout soubor] [smazat soubor]

co se tyce DB casti, tak cesta k tomu konkretnimu souboru by byla ulozena v jednom sloupci

jak toto resite vy? potreboval bych alespon nakopnout, jakym smerem bych se mohl ubirat.

diky moc za kazdy postrceni

Ot@s
Backer | 476
+
0
-

Já to svého času ošulil přes HTML v description:

$form->addUpload('image', 'Obrázek:')
	->addCondition(Form::FILLED)
	->addRule(Form::IMAGE, 'Obrazek musí být ve formatu JPEG, PNG nebo GIF.');
if ([... podminka na existenci zaznamu v DB ...]) {
    $relative_path = [... cesta k souboru ze sloupečku z DB ...]; // zacina na /
    if (file_exists(WWW_DIR.$relative_path)) {
	$ctrl = Html::el('span');
	$ctrl->add( Html::el('a')->href($this->template->basePath.$relative_path)->setText('náhled obrázku ') );
	$ctrl->add( Html::el('span')->setText( ' | ') );
	$ctrl->add( Html::el('a')->href($this->link('unlink!'))->setText('odstranit obrázek') );
	$form['image']->setOption('description', $ctrl );
    }
}

Edit: Je to nástřel, chybí zpracování samotného signálu unlink (pokud máš souborů víc, doplň si jeho ID), náhled obrázku (třeba) do lightboxu atd…

Editoval Ot@s (21. 8. 2012 11:37)

Ja
Člen | 260
+
0
-

Moc hezke! Diky moc. A to pouzivas doted?

Btw, je mozny jiny pristup do description nez pres $form[value]->options[description]?

Ot@s
Backer | 476
+
0
-

Ja napsal(a):

Moc hezke! Diky moc. A to pouzivas doted?

U starších projektů ano. U novějších jsem si napsal vlastní formulářovou komponentu.

Btw, je mozny jiny pristup do description nez pres $form[value]->options[description]?

Nepřímo ano – pokud máš například formulář v definici komponenty (= návratový objekt komponenty je Form), tak přes $this['nazevFormularoveKomponenty']['image']->options(...) (např. v presenteru). Je to vhodné v případě, kdy nemáš k dispozici výchozí hodnoty formuláře uvnitř definice komponenty (opět „z venku“ voláš $this['nazevFormularoveKomponenty']->setDefaults(....)).

Filip Procházka
Moderator | 4668
+
0
-

Nechceš ji hodit do addonů? :)