Join Us in Toronto for the ExpressionEngine 2026 Conference Learn More!
Adds native pagination capabilities to Grid fields in ExpressionEngine—something not available out of the box. It enables you to paginate rows within a Grid field, making it easier to display large datasets in manageable chunks. This add-on is free and supports ExpressionEngine 6.4 (and above) and ExpressionEngine 7.2 (and above).
Brings row-level pagination into Grid fields. Compatible with EE 6.4+ and EE 7.2+, it’s a lightweight way to enhance both performance and usability when displaying Grid content in templates.
| Feature | Details |
|---|---|
| Purpose | Add pagination to Grid fields (row-level pagination) |
| Integration | Grid field tag parameters in templates |
| Compatible With | EE 6.4+ and EE 7.2+ |
| Ideal For | Large Grid datasets, listings, FAQs, admin interface usability |
{my_field_name:label} This will render the human-readable label corresponding to the chosen value.{exp:grid_pagination:field_params
field_id='4'
url_title="{segment_3}"
channel="blog"
limit="2"
url_segment="4"
}
{exp:channel:entries url_title="{segment_3}" dynamic="false" limit='1' require_entry='yes'}
{!-- content output --}
<h1>{title}</h1>
{!-- image (GRID) --}
{if blog_image}
{blog_image offset="{grid:offset}" limit="{grid:limit}"}
<figure>
<img src="{blog_image:image}" alt="{blog_image:caption:attr_safe}">
<figcaption>{blog_image:caption}</figcaption>
</figure>
{blog_image:grid_encryption}
<p>
{blog_image:test_grid_datalist:label}
</p>
{/blog_image}
{embed="blog/_grid-pagination"}
{/if}
{/exp:channel:entries}
{/exp:grid_pagination:field_params}
Due to how ExpressionEngine parses templates (and/or my limited understanding of it) there are some key requirements to keep in mind for this Add-on.
grid_pagination:field_params tag MUST wrap around the channel:entries tag and cannot be nested within.channel:entries tag can contain its own pagination, you should implement your pagination as an embed. offset and limitAt least PHP >= 8.0 and ExpressionEngine >= 6.4 or >= 7.2
field_paramsThis tag is used to seed the offset and limit values into the Grid tag.
field_id
This parameter should be the integer value for the specific Grid field you want to paginate data from
entry_id
The specific Channel Entry your Grid field resides in
channel
The Channel short name to relate to a url_title parameter
url_title
The url_title value for the entry you want (requires channel param)
limit
How many Grid items you want per page
url_segment
The number the pagination URL segment comes from. (optional, default is 3)
prefix
A unique letter to differentiate pagination units. (optional, default is “G”)
{exp:grid_pagination:field_params field_id='FIELD_ID' entry_id="ENTRY_ID" limit="2"}
Channel Entries Tag Here
{/exp:grid_pagination:field_params}
Used to output the pagination links for your Grid field. This tag uses the exact same pagination logic as regular ExpressionEngine pagination.
field_id
This parameter should be the integer value for the specific Grid field you want to paginate data from
entry_id
The specific Channel Entry your Grid field resides in
channel
The Channel short name to relate to a url_title parameter
url_title
The url_title value for the entry you want (requires channel param)
limit
How many Grid items you want per page
url_segment
The number the pagination URL segment comes from. (optional, default is 3)
prefix
The string you want to delineate your pagination from others. Defaults to G (for Grid)
Note that this tag uses the native Pagination tooling for ExpressionEngine, so all those paramters and tags work here too
{exp:grid_pagination:pagination
field_id='4'
url_title="{segment_3}"
channel="blog"
limit="2"
url_segment="4"
}
{paginate}
{pagination_links}
{first_page}
<a href="{pagination_url}" class="page-first">First Page</a>
{/first_page}
{previous_page}
<a href="{pagination_url}" class="page-previous">Previous Page</a>
{/previous_page}
{page}
<a href="{pagination_url}" class="page-{pagination_page_number} {if current_page}active{/if}">{pagination_page_number}</a>
{/page}
{next_page}
<li><a href="{pagination_url}" class="page-next">Next Page</a>
{/next_page}
{last_page}
<li><a href="{pagination_url}" class="page-last">Last Page</a>
{/last_page}
{/pagination_links}
{/paginate}
{/exp:grid_pagination:pagination}
Packet Tide owns and develops ExpressionEngine. © Packet Tide, All Rights Reserved.