Nahrazení pole pro soubor checkboxem pro smazání

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

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
+
0
-

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.