Cachování šablony ve snippetech
- CZechBoY
- Člen | 3608
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
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
Tohle je spravne chovani, nette to chape jako dynamicke snippety, viz https://doc.nette.org/…mic-snippets