Dynamický snippet v includované šabloně (data v dumpu se změní ale výpis se nepřekreslí)
- jarda256
- Člen | 130
Ahoj, mám one page, který jsem si poskládal do default.latte pomocí include více šablon. V jedné znich mám slider, kde jsou profily a u profilů hodnocení. Po kliknutí na tlačítko se mi zobrazí form, kterým můžu ohodnotit profil na který se právě dívám. Submit řeší ajax který zavolá addRating! rating se přidá a pak by se měl původní rating překreslit na ten nový a formulář zase zavřít.
Hodnocení se spracuje správně a v šabloně mám
{dump $profile->getRatingValue()}
tam se mi to změní ale
pořád se vypysuje původní hodnota. Mohl by mi prosím někdo poradit? + form
zůstane zobrazený a já bych ho raději zase skryl, ale to je maličkost
{snippetArea rezervaceWrapper}
{include 'rezervace.latte'}
{/snippetArea}
{snippetArea profiles}
<div class="content-block">
<h2 class="block-header">Rezervace</h2>
{if $profiles}
<div id="profiles-carousel" class="owl-carousel owl-theme">
{foreach $profiles as $profile}
{var $id = $profile->getId()}
{snippet profile-$id}
{var $ratingNumber = $profile->getRatingValue()}
{var $ratingWidth = $profile->getRatingBarValue()}
{dump $profile->getRatingValue()}
{dump $ratingWidth}
{dump $profile->getRatingsCount()}
<div>
<div class="row">
<div class="col-sm-4">
<img class="owl-lazy img-responsive"
data-src="{$baseUrl}/upload/profiles/{$profile->getPicture()}"
alt="{$profile->getName()}">
<h4 class="alignC mt20 text-primary">{$profile->getRatingValue()|number:1:',':''}</h4>
<h6 class="alignC">( hodnotilo {$profile->getRatingsCount()} )</h6>
<div class="star-rating">
<span style="width:{$profile->getRatingBarValue()|noescape}%"></span>
</div>
<div class="row mt20 buttons">
<div class="col-md-6 alignC">
<a href="#" class="btn btn-primary">Rezervovat</a>
</div>
<div class="col-md-6 alignC">
<button class="btn btn-primary open-review-box">Hodnotit</button>
<div class="row post-review-box displayNone">
<div class="col-md-12">
<form class="rating-form ajax">
<input type="hidden" name="profileid"
value="{$profile->getId()}">
<div class="raty-rate"></div>
<div>
<button class="btn btn-danger btn-sm close-review-box">
<span class="glyphicon glyphicon-remove"></span>
</button>
<button class="btn btn-success btn-sm ajax" type="submit">
<span class="glyphicon glyphicon-ok"></span>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-8">
<h3><span class="text-primary">Jméno:</span> {$profile->getName()}</h3>
<p><span class="text-primary">Věk:</span> {$profile->getAge()}</p>
<p><span class="text-primary">Praxe:</span> {$profile->getExperience()}</p>
<p><span
class="text-primary">U nás od: </span>{$profile->getWithUsFrom()|date:'%d.%m.%Y'}
</p>
<p><span class="text-primary">Intro: </span>{$profile->getIntro()}</p>
</div>
</div>
</div>
{/snippet}
{/foreach}
</div>
{else}
Žádné profily k dispozici :(
{/if}
</div>
{/snippetArea}
/**
* @var Profiles
* @inject
*/
public $profiles;
public function renderDefault()
{
if (!isset($this->template->profiles)) {
$this->template->profiles = $this->profiles->findAllVisible();
}
}
public function handleAddRating($profileid, $score)
{
if ($score > 0) {
$this->profiles->addRating($profileid, $score);
if ($this->isAjax()) {
$this->template->profiles = $this->profiles->findAllVisible();
$this->redrawControl('rezervaceWrapper');
$this->redrawControl('profiles');
} else {
$this->redirect('this', '#rezervace');
}
}
}
- Zuben45
- Člen | 268
U dynamických snippetů, když potřebuješ překrestlit pouze daný řádek / záznam, tak do proměnné která obsahuje všechny záznamy, které vypisuješ, dosadíš jenom ten upravovaný. Více v dokumentaci
public function handleAddRating($profileid, $score)
{
if ($score > 0) {
$this->profiles->addRating($profileid, $score);
if ($this->isAjax()) {
$this->template->profiles = $this->profiles->findOneVisible($profileid);
$this->redrawControl('rezervaceWrapper');
$this->redrawControl('profiles');
} else {
$this->redirect('this', '#rezervace');
}
}
}
Mimochodem, snippetAreu (profiles) použij jen při include, v include pokud v ní také není include bych asi nepoužil, zkusil bych tam spíše statický snippet
{snippetArea rezervaceWrapper}
{include 'rezervace.latte'}
{/snippetArea}
{* rezervace.latte *}
{snippet profiles}
...
{/snippet}
Editoval Zuben45 (29. 6. 2017 9:05)
- Zuben45
- Člen | 268
jarda256 napsal(a):
@Zuben45 ahoj, diky za radu, ale ani tak se to neprekresli…je to pole doctrine entit…respektive tedy objektu…nevim jak urcit v jakem indexu se zmena provedla…nicmene ani kdyz si stanovim ze zmenim na indexu 0 a tam to i nactu tak se to neprekresli :/
u Doctrine jsem si nějakou dobu hrál s tím, že jsem upravil položku v datagridu a ona se pak měla překreslit, řešení bylo jednoduché, stačilo použít
$entityManager->refresh($entity);
po uložení změn