Textarea problém při update záznamů – nastavení hodnoty v latte
- Jakub Kontra
- Člen | 30
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
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
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
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
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
.