Nette infinite scroll ajax offset sa nemeni stale je 1
- erikbalog
- Člen | 27
zdravim, zacinam s nette a potrebujem skript pre infinite scroll
v presenteri mam
<?php
public function renderDefault() {
if(!isset($this->template->posts)) {
$this->template->posts = $this->database->table('posts')->limit(1, 0)->fetchAll();
$this->template->offset = 0;
}
}
public function handleAdd($offset) {
$offset++;
$this->template->posts = $this->database->table('posts')->limit(1, $offset)->fetchAll();
$this->template->offset = $offset;
$this->redrawControl('postContainer');
}
?>
a v latte
<?php
<div n:snippet="postContainer" data-ajax-append="true">
{foreach $posts as $post}
<p>{$post->title}</p>
{/foreach}
</div>
<a class="ajax" n:href="add! $offset">PRidat</a>
?>
ale nefunguje mi offset, zobrazi za prvy post
Article One
po kliknuti na odkaz sa prida Article Two ale po dalsom kliknuti za prida zase
Article Two a takto vzdy, neprejde to na offset = 2.. neviem preco
Dakujem
- Michal Vyšinský
- Člen | 608
Ahoj,
v renderDefault
si to přepisuješ. První se v presenteru
vykonává handle a pak render (https://doc.nette.org/…n/presenters#…)
Přidej si metodu actionDefault
a v ní nastavuj to co
nastavuješ teď v renderDefault
– obecně je lepší proměnné
pro template nastavovat v ‚action‘ metodě a ne v ‚render‘.
Edit: lepší řešení je dole
Editoval Michal Vyšinský (19. 5. 2016 14:25)
- erikbalog
- Člen | 27
tak mam to takto
<?php
public function actionDefault() {
$this->template->posts = $this->database->table('posts')->fetchAll();
$this->template->offset = 0;
}
public function renderDefault() {
}
public function handleAdd($offset) {
$offset++;
$this->template->posts = $this->database->table('posts')->limit(1, $offset)->fetchAll();
$this->template->offset = $offset;
$this->redrawControl('postContainer');
}
?>
ale web vypisuje stale
Article One
Article Two
Article Two
Article Two
Article Two
PRidat
- Michal Vyšinský
- Člen | 608
Napsal jsem nahoře asi blbost, pardon. Nejlepší bude v
handleAdd
nastavit $this->offset
a v
renderDefault
pak načítat data a použít ten offset.
<?php
private $offset = 0;
public function renderDefault() {
$this->template->posts = $this->database->table('posts')->limit(1, $this->offset)->fetchAll();
$this->template->offset = $this->offset;
}
public function handleAdd($offset) {
$this->offset = $offset + 1;
$this->redrawControl('postContainer');
}
?>
Edit: fixnul jsem nastavování $this->template->offset
.
(Došlo nám v práci kafe, takže mi to tolik nemyslí :D)
Editoval Michal Vyšinský (19. 5. 2016 14:24)
- erikbalog
- Člen | 27
<?php
class HomepagePresenter extends BasePresenter
{
/** @var Nette\Database\Context */
private $database;
private $offset = 0;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault() {
$this->template->posts = $this->database->table('posts')->limit(1, $this->offset)->fetchAll();
$this->template->offset = $this->offset;
}
public function handleAdd($offset) {
$this->offset = $offset + 1;
$this->redrawControl('postContainer');
}
}
?>
`Article One
Article Two
Article Two
PRidat`
nechapem.. stale to iste pritom ten offset by sa mal menit, link je v html stale ?offset = 0, ale vrati to z db offset 1
teraz som skusal pokial ten link pridam do snippetu
<?php
<div n:snippet="postContainer" data-ajax-append="true">
{foreach $posts as $post}
<p>{$post->title}</p>
{/foreach}
<a class="ajax" n:href="add! $offset">PRidat</a>
</div>
?>
tak to funguje ale to nie je ta moznost kedze mi to vzdy pridava novy link
Editoval erikbalog (19. 5. 2016 14:32)
- erikbalog
- Člen | 27
tak nasiel som nejaky mozny fix ale nepaci sa mi
v sablone
<?php
<div n:snippet="postContainer" data-ajax-append="true">
{foreach $posts as $post}
<p>{$post->title}</p>
{/foreach}
</div>
{snippet link}
<a class="ajax" n:href="add! $offset">PRidat</a>
{/snippet}
?>
a presenter
<?php
class HomepagePresenter extends BasePresenter
{
/** @var Nette\Database\Context */
private $database;
private $offset = 0;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault() {
$this->template->posts = $this->database->table('posts')->limit(1, $this->offset)->fetchAll();
$this->template->offset = $this->offset;
}
public function handleAdd($offset) {
$this->offset = $offset + 1;
$this->redrawControl('postContainer');
$this->redrawControl('link');
}
}
?>
- Michal Vyšinský
- Člen | 608
tak to funguje ale to nie je ta moznost kedze mi to vzdy pridava novy link
ha, toho jsem si nevšiml, tak ten link wrapni do jiného snippetu bez
data-ajax-append
a invaliduj i te snippet. Pak by to snad už
mělo fungovat.
<div n:snippet="nextPostLink">
<a class="ajax" n:href="add! $offset">PRidat</a>
</div>
Edit: vidím, že jsi přišel na to samé, proč se ti to nelíbí?
Editoval Michal Vyšinský (19. 5. 2016 15:05)