---json
{
"description": "This howto shows you how to use the page sql, a fragment, the iterator and to generate a grid layout.",
"name": "Generated Grid",
"page_id": "sx2v3cpr26m6epej6j158"
}
---
====== How to generate and layout a list of pages with a grid and their image? ======
===== About =====
This [[howto|howto]] will show you how to:
* [[:docs:templating:sql|select]] a list of pages
* and lay out them in a [[:docs:layout:component:grid|grid]].
===== Steps =====
==== Page Sql: How to select the pages ====
With [[:docs:templating:sql|page sql]], you can select pages via a select statement.
Page Sql permits to query pages in a lot of fashion.
For this example, we will select the last 5 modified howto with the following sql.
select from pages where path like ':howto%' order by date_modified desc limit 5
This query returns for this website the following pages:
select from pages where path like ':howto%' order by date_modified desc limit 5
^ Date ^ Page ^
| ${date_modified | format('short short')} | [[$path|$title]] |
==== Fragment: The markup to generate ====
When you generate content, you are looping over the same content over and over. This content part in ComboStrap is called a ''fragment''
* For this ''howto'', we will present our pages:
* in a [[:docs:block:card|card]]
* with a [[:docs:content:page-image|page image]] as illustration
* with a [[:docs:styling:dimension|width]] of 200px
* that is [[:docs:styling:clickable|clickable]] and [[:docs:styling:align|centered]]
* with the ''title'', ''description'' and ''path'' [[:docs:templating:variable|variable]]
* where the ''description'' is cut with the [[:docs:templating:pipeline#head|head pipeline function]]
$title
${description | head(100,"...")} [[$path| ]]
* The output for the actual page is:
==== Iterator: Iterate over the fragment with the selected pages ====
The [[:docs:templating:iterator|iterator]] is a component that
* takes the [[:docs:templating:sql|page sql]]
* and iterates over the fragment
The below example generate a [[:docs:layout:component:grid|grid]] that splits the horizontal space in 3 (''max-line=3'')
select from pages where path like ':howto%' order by date_modified desc limit 5
$title
${description | head(100,"...")}
[[$path| ]]
The output is:
\\
\\
Note that in the fragment, we have wrapped the card in a box. Why ? Because:
* the grid splits the horizontal space inside the box
* and in this space, in this box, the card takes a maximum with of 200 px.
==== Conclusion ====
In this [[howto:howto|howto]], you learned about:
* the [[:docs:templating:sql|page sql]]
* the [[:docs:content:page-image|page image]]
* the [[:docs:templating:iterator|iterator and its fragment]]
* the [[:docs:layout:component:grid|grid layout]]
That's all, folks.