Cachování šablony ve snippetech

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
CZechBoY
Člen | 3608
+
0
-

Zdravím.
Používám keš v šabloně pro normální přístup (uživatel přijde, vykreslí se šablona, …) a přes ajax snippet potom načítám další obsah (nekonečné skrolování s data-ajax-append=true) – jenže tady narážím na problém :-(
Ajaxem se mi vrátí obsah šablony, která není kešovaná – prostě obsha, který není obalený do {cache}{/cache} maker.
Lze používat kešování ve snippetech, nebo budu muset udělat 2 šablony – jednu pro neajaxový přístup a druhou pro ajaxový?
Případně pokud máte jiné lepší řešení tak sem s ním ;-)
Díky

CZechBoY
Člen | 3608
+
0
-

No asi jsem to blbě popsal a dal málo zdrojáků.
Šablona:

<div n:snippet="contentContainer">
	<div n:foreach="$contents as $content">
	{$content->name}

	<div n:snippet="likecount-$content->id">
		{$content->likecount}
		<a href="like++">Like</a>
	</div>

	{$content->description}
	</div>
	<a n:href="next! $page" class="ajax">Další strana</a>
</div>

ContentControl:

<?php

namespace App\Components;

class ContentControl extends \Nette\Application\UI\Control {

	/** @var int */
	private $page = 1;

	/** @const int */
	const PER_PAGE = 2;


	public function handleNext($page) {
		$this->page = $page;

		if ($this->presenter->isAjax()) {
			$this->redrawControl('contentsContainer');
		}
	}

	public function render() {
		$all_contents = array(
			(object)array(
				'id'			=> 1,
				'name'			=> 'content1',
				'description'		=> 'content1 content1 content1 content1',
				'likecount'		=> 1
			),
			(object)array(
				'id'			=> 2,
				'name'			=> 'content2',
				'description'		=> 'content2 content2 content2 content2',
				'likecount'		=> 2
			),
			(object)array(
				'id'			=> 3,
				'name'			=> 'content3',
				'description'		=> 'content3 content3 content3 content3',
				'likecount'		=> 3
			),
			(object)array(
				'id'			=> 4,
				'name'			=> 'content4',
				'description'		=> 'content4 content4 content4 content4',
				'likecount'		=> 4
			),
		);

		$this->template->contents = array_slice($all_contents, ($this->page - 1) * $this::PER_PAGE, $this::PER_PAGE);

		$this->template->page = 2;

		$this->template->setFile(__DIR__ . '/../templates/components/content.latte');
		$this->template->render();
	}

}

A posílá se mi jen snippet-content-likecount-*
Někdo by teda nevěděl co s tím? Díky

David Matějka
Moderator | 6445
+
0
-

Tohle je spravne chovani, nette to chape jako dynamicke snippety, viz https://doc.nette.org/…mic-snippets

CZechBoY
Člen | 3608
+
0
-

Nakonec jsem to vyřešil do 5 minut, co jsem sem hodil tu zjednodušenou verzi… :D jako vždy…
Obalil jsem ten snippet ještě do dalšího snippetu a už to jede.
Jinak díky aspoň za přečtení :-)