Infinite scroll a možné dvojité načtení stejného elementu

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

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

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

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 :)