Překreslování snippetu v partial šabloně

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Michal Hlávka
Člen | 190
+
+1
-

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
+
0
-

Děkuji, už to vidím. Myslel jsem si, že tam nic takového není, četl jsem to dávno.

Michal Hlávka
Člen | 190
+
0
-

http://i.imgur.com/BrlDU9Z.png tohle mi asi nedochází, proč se děje.

David Matějka
Moderator | 6445
+
+1
-

presne proto, co to pise :) dynamicke snippety muzes mit pouze uvnitr statickych snippetu, takze to obal snippetem nebo snippetAreou

Michal Hlávka
Člen | 190
+
0
-

No v šabloně plan.latte je include obalenej snippetAreou a v includu mam dynamickej snippet.

Michal Hlávka
Člen | 190
+
0
-

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
+
0
-

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
+
0
-

Tak jsem to obalil ještě i tam a vyhodilo mi to notice http://i.imgur.com/PpptrHT.png

David Matějka
Moderator | 6445
+
0
-

muzes prosim poslat .latte i celou tu zkompilovanou sablonu?

Michal Hlávka
Člen | 190
+
0
-
{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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.