Textarea problém při update záznamů  – nastavení hodnoty v latte

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

Zdravím, hledal jsem jak po Fóru jak nastavit hodnotu v latte do textarea ale nenašel. Mohl by mi někdo poradit? Jelikož Textarea nemá value

<textarea></textarea>

zkoušel jsem logicky

{input textearea}{$bla->blaa/}{/input}

, ale to taky nefungovalo

Díky za radu.

Ot@s
Backer | 476
+
0
-

Očekávané {input nazev_textarea value=>"Obsah textarea"} nefunguje, nicméně toto by mělo jít:

{* uvnitr makra {form} *}
<?php $form['nazev_textarea']->setDefaultValue("vychozi obsah");?>
{input nazev_textarea}

PS: pokud k výše uvedenému nemáš důvod (na 99% určitě ne), tak (výchozí) hodnotu definuj při tvorbě v samotné továrničce formuláře, tj. $form->addTextarea('nazev_textarea', 'Vzkaz:')->setDefaultValue("vychozi obsah");

Grelek
Člen | 233
+
0
-

Pokud chceš natahat data z databáze, použij toto:

public function renderEdit()
{
        $this['formular']->setDefaults(array(
                'title' => $this->MODEL->getData()->title,
                'perex' => $this->MODEL->getData()->perex,
        ));
}

Jinak normálně v komponentě:

public function createComponentFormular()
{
	$form = new Form();
	$form->addText('name', 'Jméno')
		->setDefaultValue('Hodnota');
	// ...
}
Jakub Kontra
Člen | 30
+
0
-

add.latte

{block title}Přidat pojem{/block}
{block head}
<script type="text/javascript">
	bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });
</script>

{/block}
{block content}

<h2>Přidat pojem</h2>

{form addForm class=>"artnok-form"}

<!-- Jednoduché vykreslení chyb -->
<ul class="errors" n:if="$form->hasErrors()">
        <li n:foreach="$form->errors as $error">{$error}</li>
</ul>
	<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>


<label><span class="headline">{label item /}</span>
		{input item} <span class="sub-info">
	</label>
		<label><span class="headline">Obsah novinky</span>
		<textarea name="textarea"></textarea>
	</label>
	<label><span class="headline">Obsah novinky</span>
		<textarea name="textarea"></textarea>
	</label>

	<label><span class="headline">{label vysvetleni /}</span>
		{input vysvetleni} <span class="sub-info">
	</label>


	<div style="margin-top:20px;">
		{input sub}
		<input type="reset" class="btn btn btn-danger" name=""  value="Reset">
	</div>





{/form addForm}

UPDATE FORM

{block title}Přidat novinku{/block}
{block head}
<script type="text/javascript">
	bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });
</script>

{/block}
{block content}

{dump $termRow}

<h2>Přidat novinku</h2>

{form addForm class=>"artnok-form"}

<!-- Jednoduché vykreslení chyb -->
<ul class="errors" n:if="$form->hasErrors()">
        <li n:foreach="$form->errors as $error">{$error}</li>
</ul>
	<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>


<label><span class="headline">{label item /}</span>
		{input item value=>$termRow->title}
	</label>

		<label><span class="headline">Obsah novinky</span>
		<textarea name="textarea"></textarea>
	</label>

	<label><span class="headline">{label vysvetleni /}</span>
		{input vysvetleni }
	</label>

 	{!$termRow->explanation|escape|nl2br}

	<div style="margin-top:20px;">
		{input sub}
		<input type="reset" class="btn btn btn-danger" name=""  value="Reset">
	</div>





{/form addForm}

TERMS PRESENTER

public function actionDefault()
{
    $this->terms = \isdozory\Models\Terms::getAll();

}

public function renderDefault()
{
    $this->template->terms = $this->terms;

}

public function actionDelete($id = null)
{
    if(!$id == null)
    {

        if(\isdozory\Models\Terms::deleteById($id))
        $this->flashMessage('Success', 'success');
        $this->redirect('Pricelist:default');


    }

}

public function actionUpdate($id = null)
{
    if(!$id == null)
    {
        $this->termRow = \isdozory\Models\Terms::findById($id);
    }

}

public function renderUpdate()
{
    $this->template->termRow = $this->termRow;
}


/**
 * @return \Nette\Application\UI\Form
 */
protected function createComponentAddForm()
{
    $form = new \Nette\Application\UI\Form;

    $form->addText('item', 'Název položky:')
         ->addRule(\Nette\Application\UI\Form::MIN_LENGTH, 'Název položky nesmí být prázdný', 1);



    $form->addTextArea('vysvetleni', 'Vysvětlení:')
         ->addRule(\Nette\Application\UI\Form::MIN_LENGTH, 'Hodnota nesmí být prázdná', 1);

    $form->addSubmit('sub')
         ->setAttribute('class', 'btn btn-success')
         ->setAttribute('value', 'Odeslat');

    $form->onSuccess[] = callback($this, 'processAddForm');

    return $form;
}

/**
 * @param \Nette\Application\UI\Form
 */
public function processAddForm( \Nette\Application\UI\Form $form )
{
    $values = $form->getValues();

     // todo update


    if($this->presenter->getAction() == 'add'){
        \isdozory\Models\Terms::addRow($values->item, $values->vysvetleni);
    }elseif($this->presenter->getAction() == 'update'){
        \isdozory\Models\Terms::updateRow($values->item, $values->vysvetleni, $this->getParam('id') );
    }

    $this->flashMessage('Success', 'success');
    $this->redirect('Terms:default');
}

Jak by to tedy mělo být napsáno podle Best Experience?
Díky

Grelek
Člen | 233
+
0
-

Vše by jsi měl řešit v presenteru, ne v Latte.

A už jsem ti to psal. Tak znovu…

Pokud data taháš z databáze (například pro úpravu nějakých informací, co já vím…), tak takhle:

public function actionDefault() // samozřejmě tam může být i render
{
	$this['add']->setDefaults(array(
		'item' => $this->model->getData()->item,
		// ...
	));
}

Pokud chceš pouze nastavit výchozí hodnotu pro políčko, použij toto:

// vytvoření komponenty formuláře
$form->addText('item', 'Název položky:')
	->setDefaultValue('Hodnota');

A na závěr jeden tip: Před definici třídy zapiš use Nette\Application\UI\Form a v třídě potom už používej pouze Form() nebo Form.