DEV Community

Cover image for Displaying the Most Popular Entries
ExpressionEngine for ExpressionEngine

Posted on • Originally published at u.expressionengine.com

Displaying the Most Popular Entries

ExpressionEngine has channel parameters and variables available that let you count how many times an entry has been viewed.

The track_views parameter

You should only enable this on single entry pages such as a news story or product detail page, otherwise it will add to the count and distort your totals.

Here’s a channel entries example tag for our News channel:

{exp:channel:entries channel="news" limit="1" track_views="one"}
    <h3>{title}</h3>
    {body}
    <div class="date">Posted on {entry_date format="%M %d, %Y"}</div>
{/exp:channel:entries}

Enter fullscreen mode Exit fullscreen mode

The track_views parameter will only accept numbers as words, i.e. one, two, three, or four. You can use these four numbered counts for different purposes but I’ve found in practice one is sufficient for most use cases.

Displaying view counts

When you’ve added the track_views parameter you can now start to show view counts in your entries using the view_count_xxx variable. The difference here is that you can show them any place the entry is mentioned, not just on single entry pages.

Here’s our channel entries tag for our News listing page:

{exp:channel:entries channel="news" limit="10"}
    <h3>{title}</h3>
    <p>This entry has been viewed {view_count_one} times.</p>
    <div class="date">Posted on {entry_date format="%M %d, %Y"}</div>
{/exp:channel:entries}

Enter fullscreen mode Exit fullscreen mode

Note here we’re using {view_count_one}, this corresponds with the track_views="one" parameter we added earlier. If you’re using track_views="two" as your parameter then to show the count variable you’d use {view_count_two}.

Creating a top list

Let’s say we want to show our 10 all time most read news stories. We’ll use EE’s orderby and sort parameters to sort the entries by the view count total, and in descending order (highest number first).

<h2>Most read news</h2>
<ul>
    {exp:channel:entries channel="news" limit="10" orderby="view_count_one" sort="desc" dynamic="no"}
    <li>{title}</li>
    {/exp:channel:entries}
</ul>

Enter fullscreen mode Exit fullscreen mode

Note here we’ve also added a dynamic="no" parameter so the output is constant wherever it’s used.

Limiting the top list by date

Sometimes you might want to restrict the list to show entries posted, say, in the last seven days. We can do this using the same channel entries tag, but adding the start_on parameter to restrict the date range.

This example will display entries from the last rolling seven days:

<h2>Most read news</h2>
<ul>
    {exp:channel:entries channel="news" limit="10" orderby="view_count_one" sort="desc" dynamic="no" start_on="-7 days"}
    <li>{title}</li>
    {/exp:channel:entries}
</ul>

Enter fullscreen mode Exit fullscreen mode

Note with this approach if you haven’t post any entries during the last seven days the list will be empty!

Refining your list further

ExpressionEngine has several other parameters you can use to control what’s gets displayed in your list, for example:

  • display_by="month" limit="1" - entries from the current month
  • display_by="week" limit="2 - entries from the last two weeks
  • display_by="day" limit="3 - entries from the lasts three days
  • start_on="last Monday" - entries from a start date you specify
  • stop_before="{current_time}" - entries up until a certain time

The possibilities are endless so experiment with different parameters!

--
Originally published by Rob Allen at u.expressionengine.com

Top comments (0)