Infinite scroll a možné dvojité načtení stejného elementu
- Lukeluha
- Člen | 130
Ahoj,
ve své aplikaci mám „zeď“ s příspěvky podobné facebooku. Chci implementovat infinite scroll. Řeším jej ajaxem a při každém načtení další stránky si předám offset a číslo stránky, v komponentě poté pomocí Doctrine zavolám dotaz s požadovaným číslem stránky a offsetem.
Nicméně, může se stát, že si uživatel načte stránku s příspěvkama, mezitím někdo jiný přidá nový příspěvek a poté když si první uživatel klikne pro zobrazení další stránky, tak by se mu objevil stejný příspěvek 2× pod sebou, protože v první chvíli byl jeden konkrétní příspěvek na stránce 1 a po přidání příspěvku od dalšího uživatele se tento příspěvek ocitá na stránce dvě, takže ho uživatel 1 uvidí 2× pod sebou.
Chtěl jsem se proto zeptat, jestli je možné toto nějak elegantně vyřešit jinak než při každém načtení nové stránky znovu načítat z db i příspěvky ze všech předchozích stránek?
Předem díky za odpovědi.
<div n:snippet="posts" data-ajax-append="true">
{if count($posts)}
<div class="posts">
{foreach $posts as $post}
// vypsání příspěvku
{/foreach}
</div>
{/if}
</div>
{snippet getMore}
<a href="{link loadPage! $page + 1}" class="ajax">Další stránka</a>
{/snippet}
- Šaman
- Člen | 2659
Tohle se děje běžně, třeba na Aukru. Vyřešit by to šlo, pamatuj si
třeba poslední zobrazený příspěvek a pak načti X novějších. Nicméně
pak nebudeš mít klasické stránkování, ale v adrese bude nějaké id od
kterého příspěvku, nebo od jaké časove značky se má vypisovat. Druhá
možnost je stránkovat opačně (na stránce jedna je deset nejstarších
příspěvků, nikoliv nejnovějších). Pak je výhoda, že se obsah stránky
po jejím zaplnění už nemění.
To nesouvisí s Nette.
- Lukeluha
- Člen | 130
Díky, máš pravdu, že to nesouvisí přímo s Nette, ale používám tam ajax plugin od Vojty Dobeše a Doctrine od Filipa Procházky, tak mě napadlo, jestli na to není nějaká funkčnost implementovaná tam. Ale máš pravdu, tvoje řešení je určitě jednoduché a krásně funkční, ještě jednou díky :)