readonly pro celý formulář(komponentu)

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

Lze nějako nastavit stejně jako:

<?php
$form->setDefaults(array pole s defaultními hodnotami);
?>

nastavit všem prvkům ve formuláři readonly? Potřebuji ten celý formulář udělat jen jako náhled. děkuji

Filip Procházka
Moderator | 4668
+
0
-

Když použiješ $form->setValues($array), tak se ti vždy nastaví všechny hodnoty znovu jak byly při vytvoření i po odeslání, ale prvky půjdou v prohlížeči editovat. Stačí takhle?

Jack06
Člen | 168
+
0
-

Rád bych, aby uživatel který se přihlásí a klikne na svoje údaje je pouze viděl a nemohl měnit.. Nejradši bych to udělal znovu jako formulář, když už jednou mám jeho šablonu hotovou, jen nechci, aby si mohl měnit hodnoty i přesto, že tam odesílací tlačítko mít nebude.

ic
Člen | 430
+
0
-

na tohle nejlépe si pověsit vlastní javascript funkci která provede zamknutí políček

Majkl578
Moderator | 1364
+
0
-
foreach ($form->getControls() as $control) {
	$control->controlPrototype->readonly = 'readonly';
}
jarks
Člen | 94
+
0
-

A nepomohlo by setDisabled()?

$form = $this['vasFormular'];
$form['polozka_formulare']->setDisabled();
natrim
Člen | 73
+
0
-

Já bych na to pužil speciální renderer který hodnoty jen zobrazí.
Já používám např. toto:

<?php

/**
 * Vykresli form bez inputu a buttonu
 */
class ZobrazForm extends ConventionalRenderer {

    /**
     * bez hlavicky
     * @return string
     */
    public function renderBegin() {
        return '';
    }

    /**
     * bez paticky
     * @return string
     */
    public function renderEnd() {
        return '';
    }

    /**
     * Renders single visual row.
     * @param  IFormControl
     * @return string
     */
    public function renderPair(IFormControl $control) {
        $pair = $this->getWrapper('pair container');
        if ($control instanceof FileUpload) {

        } else {
            $pair->add($this->renderLabel($control));
            if ($control instanceof SelectBox || $control instanceof RadioList) {
                $items = $control->getItems();
                $value = ($control->getValue() == 0 ? 'Nevybráno' : $items[$control->getValue()]);
                $pair->add($this->getWrapper("control container")->add(Html::el('span', array('id' => $control->getHtmlId()))->setText($value)));
            } elseif ($control instanceof Checkbox) {
                $value = ($control->getValue() == 1 ? 'Ano' : ($control->getValue() == 0 ? 'Ne' : $control->getValue()));
                $pair->add($this->getWrapper("control container")->add(Html::el('span', array('id' => $control->getHtmlId()))->setText($value)));
            } elseif ($control instanceof DatePicker) {
                $pair->add($this->getWrapper("control container")->add(Html::el('span', array('id' => $control->getHtmlId()))->setText(date('d.m.Y', strtotime($control->getValue())))));
            } else {
                $pair->add($this->getWrapper("control container")->add(Html::el('span', array('id' => $control->getHtmlId()))->setText($control->getValue())));
            }
        }
        $pair->class($this->getValue($control->getOption('required') ? 'pair .required' : 'pair .optional'), TRUE);
        $pair->class($control->getOption('class'), TRUE);
        if (++$this->counter % 2)
            $pair->class($this->getValue('pair .odd'), TRUE);
        $pair->id = $control->getOption('id');
        return $pair->render(0);
    }

    /**
     * nezobrazuj client script
     * @return null
     */
    public function getClientScript() {
        return null;
    }

    /**
     * Renders single visual row of multiple controls.
     * @param  array of IFormControl
     * @return string
     */
    public function renderPairMulti(array $controls) {
        $s = array();
        foreach ($controls as $control) {
            if (!($control instanceof IFormControl)) {
                throw new InvalidArgumentException("Argument must be array of IFormControl instances.");
            }
            if ($control instanceof SubmitButton) {

            } elseif ($control instanceof ImageButton) {

            } elseif ($control instanceof Button) {
                $s[] = (string) $control->getControl();
            }
        }
        $pair = $this->getWrapper('pair container');
        $pair->add($this->renderLabel($control));
        $pair->add($this->getWrapper('control container')->setHtml(implode(" ", $s)));
        return $pair->render(0);
    }

}
?>

použití

<?php
$form->setRenderer(new ZobrazForm);
?>
Jack06
Člen | 168
+
0
-

Ahoj, zkusil jsem to použít a to následovně:

presenter: http://codepad.org/UIFWFTCZ

renderer: http://codepad.org/jCFVagp7

Udělá mi to následující věc:
Formulář to vykreslí bez inputů ve skupinách ale ještě jednou pod tím bez skupin.. Takže dvojí výpis.. když renderer nepoužiju, tak se to vykreslí pouze jednou ale v inputech…

http://www.2i.cz/8cf16b4192