仪表板时间表

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

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.