Nahrazení pole pro soubor checkboxem pro smazání
- Lawondyss
- Člen | 106
Používám vlastní funkci, která vytvoří kontejner s více poli pro soubor.
<?php
/**
* Formularova pole pro soubory
*/
public static function addFilesUpload(Form $form, $name, $label, $count=1)
{
$files = $form->addContainer($name);
$label_counter = $label;
for($i=1; $i<=$count; $i++)
{
// vypise poradi pouze pro vice priloh
if($count > 1)
{
$label_counter = $label.' '.$i;
}
$files->addFile($i, $label_counter);
}
return $files;
}
?>
Jenže nevím, jak udělat to, aby se automaticky pole pro soubor nahradilo checkboxem, kterým po zaškrtnutí spustí smazání daného souboru.
Inspiroval jsem se v tomto postu, ale rád bych to automatizoval. Není možno předat funkci uložené soubory (jejich názvy uložení v DB) jako defaultní hodnotu? Zatím musím checkboxy generovat ručně.
<?php
$files = explode(':', $defaults['priloha']);
foreach($files as $key => $file)
{
$div = NHtml::el('div');
$div->create('input', array(
'type' => 'checkbox',
'name' => 'deleted['.$file.']',
))
->setText('smazat '.$file);
$deleted[] = $div;
}
?>
A pak to předat upravené funkci
<?php
/**
* Formularova pole pro soubory
*/
public static function addFilesUpload(Form $form, $name, $label, $deleted, $count=1)
{
$files = $form->addContainer($name);
$label_counter = $label;
for($i=1; $i<=$count; $i++)
{
// vypise poradi pouze pro vice priloh
if($count > 1)
{
$label_counter = $label.' '.$i;
}
if($deleted[$i-1])
{
$files->addFile($i, $label_counter)
->setOption('description', $deleted[$i-1])
->setDisabled(TRUE)
->getControlPrototype()
->style['display'] = 'none';
}
else
{
$files->addFile($i, $label_counter);
}
}
return $files;
}
?>
- Lawondyss
- Člen | 106
Nakonec jsem to vyřešil předáním „výchozí“ hodnoty.
<?php
/**
* Formularova pole pro soubory
*/
public static function addFilesUpload(Form $form, $name, $label, $default, $count=1)
{
$container= $form->addContainer($name);
$label_counter = $label;
$deleted = explode(':', $default);
for($i=0; $i<$count; $i++)
{
// vypise poradi pouze pro vice priloh
if($count > 1)
{
$label_counter = $label.' '.($i+1);
}
// smazat soubor
if(isset($deleted[$i]))
{
$container->addCheckbox($i, 'smazat '.$label_counter);
}
// nahrat novy soubor
else
{
$container->addFile($i, $label_counter);
}
}
return $container;
}
?>
Ovšem narazil jsem tím na jiný problém, se kterým nemůžu hnout.
Nepoužívám MVP a po odeslání formuláře už znova nepřesměrovávám.
No a pak mi zůstávají v prázdném formuláři „vyset“ checkboxy
z minulého stavu. U polí, která mají mít znova výchozí stav to řeším
nastavením $form->setValues(array(...), TRUE)
, jenže tohle
řešení nefunguje pro tento kontejner.