Get parametry jako array (persistentní) + latte
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- esorimer
- Člen | 114
Hned na začátek můžu říct, že mi všechno funguje :)
Jen si nejsem jistý, jestli je to v nette „best practice“ a tak mě
zajímá, jestli by to nešlo lépe.
Mám v presenteru persistentní parametr:
<?php
/** @persistent */
public $tag;
?>
V renderDefault() si jej předávám do šablony:
<?php
public function renderDefault() {
$this->template->tag = $this->tag;
}
?>
A teď příjde to ošklivé použítí v latte:
{if in_array('abc',$tag)}
<a n:href="TentoPresenter: tag => \array_diff($tag, array('abc'))">remove abc</a>
{else}
<a n:href="TentoPresenter: tag => \CMA\libs\Utils\array_sort(\array_unique(\array_merge($tag, array('abc'))))">add abc</a>
{/if}
Účelem je samozřejmě přidávat/odebírat tagy.
Mám tedy 2 dotazy:
- Můžu někde použít „use“ abych nemusel psát plně kvalifikované jmeno, jako např. „\CMA\libs\Utils\array_sort“?
- Nejde to celé napsat nějak jednodušejc a čitelnějc?
Tagy budou generovány dynamicky, takže to asi není zas až tak důležité, jen mě zajímá jak by jste to řešili vi :)
- norbe
- Backer | 405
Tohle bych já osobně řešil v handle metodě..
šablona:
{if in_array('abc',$tags)}
<a n:href="removeTag! tag => 'abc'">remove abc</a>
{else}
<a n:href="addTag! tag => 'abc'">add abc</a>
{/if}
presenter:
/** @persistent */
public $tags;
public function renderDefault() {
$this->template->tags = $this->tags;
}
public function handleAddTag($tag) { //handleRemoveTag obdobně
if(!in_array($tag, $this->tags)) {
$this->tags[] = $tag;
}
}
public function handleRemoveTag($tag) {
// odstraneni tagu
}