dashboard timeline

做~自己de王妃 提交于 2020-01-05 06:39:11

问题


I'm trying to implement a dashboard similar to facebook in cakephp (getting posts and post them to timeline and while you press see more it keeps retrieving posts from previous offsets) , but im still confused about the logic and tools , should i use the cakephp pagination class in my implementations.

$this->paginate();

it somehow should be called through ajax accourding to some performance wise

Any helps or suggestions where to start from ?

Thanks All


回答1:


Don't use paginate

If you paginate something that you are prepending data to - you're going to get data overlapping such that you ask for page 2 - and get the end of, as far as the current user is concerned, the previous page.

Use a timestamp

The normal technique for an endless stream of data is to use a query like:

SELECT *
FROM foos 
WHERE created >= $previousLastTimestamp 
ORDER BY created DESC 
LIMIT 20

Note that while I'm using created in this example - it can be any field that is pseudo unique.

When you first render the page, store the timestamp of the last entry in a javascript variable, then your "get more posts" logic should be:

  • Make an ajax (get) request, passing the last timestamp
  • Perform the above sql query (as a $this->Foo->find call)
  • in your js update the last timestamp so that you know where you are up to for the next time the user clicks "get more posts"

The reason to use a >= condition is that, unless the field you are testing against has unique values, it's possible for there to be multiple rows with the value you're testing for. If you have a naturally-unique field that you are sorting by (id) then you don't need to use greater-or-equal, you can simply use greater-than, and avoid needing to think about duplicate rows.

Here's a reference which explains in more detail why you should handle systems like this avoiding traditional pagination.



来源:https://stackoverflow.com/questions/15541974/dashboard-timeline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!