Jak na template, aby předával hodnotu do presenteru nebo modelu?
- Zuben45
- Člen | 268
Zdravím,
momentálně řeším takový menší problém, vytvořil jsem si funkci
v modelu (zkoušel jsem i v presenteru) na získávání levlu uživatelů,
podle toho kolik mají expů.
public function getUserlevel($id)
{
$user_exp = $this->getTable()->select('exp')->where('id = ?',$id);
$ranks = $this->getUsersrank();
foreach ($ranks as $rank)
{
if(($user_exp == $rank['exp_need']) or $user_exp > $rank['exp_need'])
{
$level = $rank['rank'];
}
}
return $level;
}
Ale stále nevím jak tuhle funkci bych mohl použít v template, něco myslím že by to mělo být nějak takto {$this->getUserlevel($user->getIdentity()->id)} ale tohle nefunguje, zatím jsem to pořešil tak, že jsem funkci přidal přímo do template.
<?php
function getUserlevel($id,$user_exp,$ranks)
{
foreach ($ranks as $rank)
{
if(($user_exp == $rank['exp_need']) or $user_exp > $rank['exp_need'])
{
$level = $rank['rank'];
}
}
return $level;
}
?>
<img src="{$basePath}/images/ranks/{getUserlevel($user->getIdentity()->id,$user->getIdentity()->exp,$user_ranks)}.png">
Nešlo by to pořešit lepším způsobem ? A ještě aby se to aktualizovalo, bez toho abych se musel vždy odhlásit a znovu přihlásit, když dosáhnu nového levlu ? Děkuji
Editoval Zuben45 (1. 12. 2013 16:28)
- Zuben45
- Člen | 268
Robyer napsal(a):
Zuben45 napsal(a):
myslím že by to mělo být nějak takto {$this->getUserlevel($user->getIdentity()->id)} ale tohle nefungujeZ šablony se přistupuje k presenteru skrz
$presenter
, tedy:{$presenter->getUserlevel($user->getIdentity()->id)}
Děkuji mockrát :), jen mám menší problém s tím, že se jedná o template @layout, konkrétně o část přihlášeného uživatele.
- Robyer
- Člen | 74
A v čem přesně je problém? :)
Jinak co se týče názvu vlákna „Jak na template, aby předával hodnotu do presenteru nebo modelu ?“, tak se na to díváš špatně. Template nic nepředává presenteru nebo modelu, ale v presenteru můžeš získat data od modelu a ty data pak předat šabloně, která je vykreslí.
Pokud tedy potřebuješ mít v šabloně nějaké data, tak v presenteru (v
beforeRender()
nebo renderXy()
metodě) je jí
jednoduše předáš jako $this->template->promenna = "neco";
a v šabloně je pak můžeš vykreslit jako {$promenna}
. Pokud
chceš mít nějaké data přístupné v globálním @layoutu (tedy na
každé stránce), pak si je do té šablony vložíš v nějakém tvém
BasePresenteru (ze kterého pak dědí všechny tvé ostatní presentery)
v jeho beforeRender()
metodě.
Editoval Robyer (1. 12. 2013 17:06)
- Zuben45
- Člen | 268
Robyer napsal(a):
A v čem přesně je problém? :)
Jinak co se týče názvu vlákna „Jak na template, aby předával hodnotu do presenteru nebo modelu ?“, tak se na to díváš špatně. Template nic nepředává presenteru nebo modelu, ale v presenteru můžeš získat data od modelu a ty data pak předat šabloně, která je vykreslí.
Pokud tedy potřebuješ mít v šabloně nějaké data, tak v presenteru (v
beforeRender()
neborenderXy()
metodě) je jí jednoduše předáš jako$this->template->promenna = "neco";
a v šabloně je pak můžeš vykreslit jako{$promenna}
. Pokud chceš mít nějaké data přístupné v globálním @layoutu (tedy na každé stránce), pak si je do té šablony vložíš v nějakém tvém BasePresenteru (ze kterého pak dědí všechny tvé ostatní presentery) v jehobeforeRender()
metodě.
Už v ničem, jen mi poprvé co jsem to použil tak hodilo chybu, že funkce není v presenteru, já zapoměl že jsem si ji zakomentoval v BasePresenteru, děkuji ještě jednout za pomoc ;)