Překreslování snippetu v partial šabloně
- Michal Hlávka
- Člen | 190
Zdravím,
ono není možný překreslit snippet, který se nachází v latte souboru, který se includuje? Protože pak při volání redrawControl json výstup neobsahuje block, co snippet zaobaluje.
- Michal Hlávka
- Člen | 190
Děkuji, už to vidím. Myslel jsem si, že tam nic takového není, četl jsem to dávno.
- David Matějka
- Moderator | 6445
presne proto, co to pise :) dynamicke snippety muzes mit pouze uvnitr statickych snippetu, takze to obal snippetem nebo snippetAreou
- Michal Hlávka
- Člen | 190
No v šabloně plan.latte je include obalenej snippetAreou a v includu mam dynamickej snippet.
- Michal Hlávka
- Člen | 190
Při kompilaci plan.latte vznikne ve výsledku
{snippetArea freemiumWrapper}
<div n:snippet="experience-{$experience->id}" n:foreach="$experiences as $experience" n:if="$freemium === $presenter->isExperienceFreemium($experience->flag)" class="experience large-12 medium-12 small-12">
{/snippetArea}
ne? Tak pak nechápu chybovou hlášku, co mi Nette vyhodilo.
- David Matějka
- Moderator | 6445
ne, include se deje v runtime. A ta inkludovana sablona ma izolovany kontext, takze to musis obalit snippetem i tam
- Michal Hlávka
- Člen | 190
Tak jsem to obalil ještě i tam a vyhodilo mi to notice http://i.imgur.com/PpptrHT.png
- Michal Hlávka
- Člen | 190
{snippetArea experienceWrapper}
<div n:snippet="experience-{$experience->id}" n:foreach="$experiences as $experience" n:if="$freemium === $presenter->isExperienceFreemium($experience->flag)" class="experience large-12 medium-12 small-12">
<div class="experience-image" style="background-image: url('{$basePath}/data/experience/{$experience->id}_1.jpg')" />
<div class="experience-description">
<h2><a href="#" class="no-underline" data-reveal-id="experience-modal-{$experience->id}">{$experience->name}</a></h2>
<p>{$experience->text}</p>
</div>
<div class="experience-footer">
<div class="block local">
{$experience->icon_text_1}
</div>
<div class="block time">
{$experience->icon_text_2}
</div>
<div class="block price">
{$experience->static_price, $currency|priceFormat|noescape}
</div>
<div class="block buy">
<a n:href="addExperience! $experience->id" class="button tiny ajax" data-reveal-id="date-modal">Add to your trip</a>
</div>
<br class="clear" />
</div>
{include 'modal-experience.latte', experience => $experience}
</div>
{/snippetArea}
<?php
// source: ..\app\modules\FrontModule/templates/Trip/../__grid/Trip/../partial/experience.latte
class Template01a9a601e25aa2d3bb91a6593a186424 extends Latte\Template {
function render() {
foreach ($this->params as $__k => $__v) $$__k = $__v; unset($__k, $__v);
// prolog Latte\Macros\CoreMacros
list($_b, $_g, $_l) = $template->initialize('1c7e1926bd', 'html')
;
// prolog Latte\Macros\BlockMacros
//
// block _experienceWrapper
//
if (!function_exists($_b->blocks['_experienceWrapper'][] = '_lb2e6b12860a__experienceWrapper')) { function _lb2e6b12860a__experienceWrapper($_b, $_args) { foreach ($_args as $__k => $__v) $$__k = $__v; $_control->redrawControl('experienceWrapper', FALSE)
;$_control->snippetMode = isset($_snippetMode) && $_snippetMode; $iterations = 0; foreach ($experiences as $experience) { if ($freemium === $presenter->isExperienceFreemium($experience->flag)) { ?>
<div class="experience large-12 medium-12 small-12"<?php echo ' id="' . ($_l->dynSnippetId = $_control->getSnippetId("experience-{$experience->id}")) . '"' ?>>
<?php ob_start() ?>
<div class="experience-image" style="background-image: url('<?php echo Latte\Runtime\Filters::escapeHtml(Latte\Runtime\Filters::escapeCss($basePath), ENT_COMPAT) ?>
/data/experience/<?php echo Latte\Runtime\Filters::escapeHtml(Latte\Runtime\Filters::escapeCss($experience->id), ENT_COMPAT) ?>_1.jpg')"></div>
<div class="experience-description">
<h2><a href="#" class="no-underline" data-reveal-id="experience-modal-<?php echo Latte\Runtime\Filters::escapeHtml($experience->id, ENT_COMPAT) ?>
"><?php echo Latte\Runtime\Filters::escapeHtml($experience->name, ENT_NOQUOTES) ?></a></h2>
<p><?php echo Latte\Runtime\Filters::escapeHtml($experience->text, ENT_NOQUOTES) ?></p>
</div>
<div class="experience-footer">
<div class="block local">
<?php echo Latte\Runtime\Filters::escapeHtml($experience->icon_text_1, ENT_NOQUOTES) ?>
</div>
<div class="block time">
<?php echo Latte\Runtime\Filters::escapeHtml($experience->icon_text_2, ENT_NOQUOTES) ?>
</div>
<div class="block price">
<?php echo $template->priceFormat($experience->static_price, $currency) ?>
</div>
<div class="block buy">
<a class="button tiny ajax" data-reveal-id="date-modal" href="<?php echo Latte\Runtime\Filters::escapeHtml($_control->link("addExperience!", array($experience->id)), ENT_COMPAT) ?>
">Add to your trip</a>
</div>
<br class="clear">
</div>
<?php $_b->templates['1c7e1926bd']->renderChildTemplate('modal-experience.latte', array('experience' => $experience) + $template->getParameters()) ?>
</div>
<?php } $_l->dynSnippets[$_l->dynSnippetId] = ob_get_flush() ;$iterations++; } $_control->snippetMode = FALSE; if (isset($_l->dynSnippets)) return $_l->dynSnippets; return FALSE;
}}
//
// end of blocks
//
// template extending
$_l->extends = empty($_g->extended) && isset($_control) && $_control instanceof Nette\Application\UI\Presenter ? $_control->findLayoutTemplateFile() : NULL; $_g->extended = TRUE;
if ($_l->extends) { ob_start();}
// prolog Nette\Bridges\ApplicationLatte\UIMacros
// snippets support
if (empty($_l->extends) && !empty($_control->snippetMode)) {
return Nette\Bridges\ApplicationLatte\UIRuntime::renderSnippets($_control, $_b, get_defined_vars());
}
//
// main template
//
if ($_l->extends) { ob_end_clean(); return $template->renderChildTemplate($_l->extends, get_defined_vars()); }
call_user_func(reset($_b->blocks['_experienceWrapper']), $_b, $template->getParameters()) ;
}}
Editoval emptywall (18. 11. 2015 16:38)
- David Matějka
- Moderator | 6445
vypada to, ze se to nekamaradi s n:if
, zkus to prepsat na
{snippetArea experienceWrapper}
{if $freemium === $presenter->isExperienceFreemium($experience->flag)}
<div n:snippet="experience-{$experience->id}" n:foreach="$experiences as $experience" class="experience large-12 medium-12 small-12">
...
</div>
{/if}
{/snippetArea}
- Michal Hlávka
- Člen | 190
Měl jsi pravdu, děkuji. Nakonec to dopadlo teda takhle
{snippetArea experienceWrapper}
{foreach $experiences as $experience}
{if $freemium === $presenter->isExperienceFreemium($experience->flag)}
<div n:snippet="experience-{$experience->id}" class="experience large-12 medium-12 small-12">
<div class="experience-image" style="background-image: url('{$basePath}/data/experience/{$experience->id}_1.jpg')" />
<div class="experience-description">
<h2><a href="#" class="no-underline" data-reveal-id="experience-modal-{$experience->id}">{$experience->name}</a></h2>
<p>{$experience->text}</p>
</div>
<div class="experience-footer">
<div class="block local">
{$experience->icon_text_1}
</div>
<div class="block time">
{$experience->icon_text_2}
</div>
<div class="block price">
{$experience->static_price, $currency|priceFormat|noescape}
</div>
<div class="block buy">
<a n:href="addExperience! $experience->id" class="button tiny ajax" data-reveal-id="date-modal">Add to your trip</a>
</div>
<br class="clear" />
</div>
{include 'modal-experience.latte', experience => $experience}
</div>
{/if}
{/foreach}
{/snippetArea}
- Michal Hlávka
- Člen | 190
Ještě teda jedna dodatečná, chápu teda správně, že nejsem schopen překreslit pouze jeden div element, ale musím je překreslit všechny. I když dokumentace mi radí jinak.
Protože dokumentace říká, že stačí include obalit do snippetArea a v includu už můžu využívat dynamické snippety. Což tedy není pravda, v includu to taky musím obalit do snippetArea.
Editoval emptywall (18. 11. 2015 17:06)
- David Matějka
- Moderator | 6445
chápu teda správně, že nejsem schopen překreslit pouze jeden div element, ale musím je překreslit všechny. I když dokumentace mi radí jinak.
Jako mas na mysli jednotlive prvky dyn. snippetu? ne, muzes prekreslit jednotlive elementy – ale do sablony musis poslat k vykresleni pouze ty, ktere chces prekreslit
- Michal Hlávka
- Člen | 190
No chci překreslit jenom jeden element. Aby mi server vrátil v jsonu jenom ten jeden element a né všechny, co jsou obaleny statickým snippetem.