Keys
Keys are made for doing things such as blogs where you need to automatically link pages to a list. Keys are set on components with the parameter key
. A key could be thought of as a name for that component.
po
In com_keys
, either the user selects some pages, or they are set for them with parameters. From these pages keys are extracted, and used to present some form of list. This could be used to pull a headline (singlerow) and the lead paragraph (wysiwyg) to a blog post list.
Bloglist.tpl
This would be the page to where all blog posts are pulled. The html
parameter is rendered for every page selected, and the pages are sorted by published date
in descending
order, in the example below.
Liquid syntax is used in the html
parameter. Some variables set by Snowfire and the keys you have defined, are available. Variables set by Snowfire are in the page
namespace, e.g. {{ page.url }}
. Keys are in the keys namespace, e.g. {{ keys.myOwnKey }}
.
In the example below {{ page.url }}
, {{ page.name }}
and {{ page.publishDate }}
are Snowfire variables, while {{ keys.body }}
is a key.
<sf-keys
id="1"
description="Posts"
sort-by="publishedDate descending"
>
<h1><a href="{{ page.url }}">{{ page.name }}</a></h1>
<h2>{{ page.publishDate }}</h2>
{{ keys.body }}
</sf-keys>
Blogpost.tpl
In this example, this is the page layout from where the keys are pulled. Please note that keys cannot be used on components in repeaters.
<sf-wysiwyg id="1" description="Body" key="body"></sf-wysiwyg>
Make sure you open pages created with blogpost.tpl, click the Live edit component and hit Save after you've added the key parameter to an existing component, to generate the key.
Parameters
html
The HTML code to be rendered for every page pulled. Liquid syntax is used. If you want to know all available keys, write <pre>{{ keys }}</pre>
.
Don't forget that Liquid allows for conditional statements etc:
{% if keys.image %}
{{ keys.image }}
{% else %}
No image available
{% endif %}
{{ page.url }}
- Url to the current page from where the keys are pulled.{{ page.name }}
- Page name of the current page from where the keys are pulled.{{ page.id }}
- A unique identifier for the page.{{ page.html }}
- The page HTML. Must be enabled with the parameterenablePageHtml
.{{ page.publishDate }}
- Publish date of the current page from where the keys are pulled. See the format function for formatting options. Example with formatting:{{ page.publishDate | format:"%e %h %Y" }}
- Any user-defined key. Keys are set on components with the key parameter. In the above example, the wysiwyg component in layout Blogpost.tpl has key body. To get this key, use
{{ keys.body }}
.
sortBy
What order the pages should be rendered in.
pageName ascending/descending
createdDate ascending/descending
updatedDate ascending/descending
publishedDate ascending/descending
contentType
Set it to "page" to enable more flexible keys (specific pages or tags)
<ul>
{% for tag in page.tags %}
<li>{{ tag.name }}</li>
{% endfor %}
</ul>
tag
Makes it possible to dynamically filter a keys collection with a GET parameter.
You can set the value to either current
or notCurrent
to only show pages tagged with the current tag.
The current tag is set by appending ?tag=X
to the URL.
enableTags
Get access to all tags that belongs to a page. With this set to true you can have the following code inside the html
parameter:
functions
Key data can be tampered with using functions. Don't forget that functions are chainable: {{ page.html | getHtmlById:"blog-post-content" | debug }}
.
Truncate
truncate:[Number of characters allowed]
Strips all HTML, remove characters above the limit and appends ...
if necessary.
Truncate words
truncatewords:[Number of words allowed]
Strips all HTML, remove words above the limit and appends ...
if necessary.
Example
{{ keys.body | truncatewords:10 }}
Truncate words HTML
truncatewordsHtml:[Number of words allowed]
Same as truncatewords
, but doesn't strip HTML.
Example
{{ keys.body | truncatewordsHtml:10 }}
HTML attribute
attr:"[HTML attribute]"
Extract an HTML attribute.
Example
{{ keys.image | attr:"src" }}
Format date
format:"[Format string]"
Format a date (see Date format for syntax).
Example
{{ page.publishDate | format:"%e %B %Y" }}
Resize image
resize:[Width in pixels]x[Height in pixels], "[resize / crop]"
Resize an image. The first parameter can be either just width, height or both: 50
, x50
or 50x50
. The second parameter specifies the method: resize
scales the image, crop
crops it.
Example
{{ keys.image | resize:"50x50","crop" }}
Extract HTML element by ID
getHtmlById:"[Html ID]"
Extract the inner HTML of an HTML element, by it's ID.
Example
{{ page.html | getHtmlById:"blog-post-content" }}
Debug
debug
Escape HTML entities for debugging purposes. Can also be used to show all available variables.
Example
{{ page | debug }}
paginationHtml
Uses Liquid syntax.
Variables
totalPages
- Total number of pagespageNumber
- The current pageperPage
- How many items per pagecount
- Total number of itemsprevious
- Object with url and page, if there is a previous page, otherwise set to null.next
- Object with url and page, if there is a next page, otherwise set to null.
Filters
pageNumberToUrl
- Convert a page number to an URL.
Tags
paginate
- See AnotherpaginationHtml
example for example usage.
Other parameters
htmlElement
- Defaults todiv
. What HTML element to wrap thehtml
parameter with, i.e. every page. Additionally, this element will get any HTML attributes specified. HTML classactive
will automatically be set if the a HTML snippet links to the current URL.perPage
- How many items to show per page. If this is set,paginationHtml
must also be set.limit
- Limit without paginationoffset
- Offset 1 if you don't want to show the first post.childrenLevels
- How many levels of child pagesuseChildPages
- Automatically use this page's child pagescreateButton
- Creates a child page, to the page with thecom_keys
. This parameter sets the text on the button.useRootParentChildPages
- Automatically use all this page's grandparent's children.enablePageHtml
- Enable{{ page.html }}
.
Example with pagination
<sf-keys
id="2"
description="Posts"
sort-by="publishedDate descending"
per-page="2"
pagination-html="
{% if previous %}
<a href={{ previous.url }}>← Go to page {{ previous.page }}</a>
{% else %}
[This is the first page]
{% endif %}
Page {{ pageNumber }} of {{ totalPages }}
{% if next %}
<a href={{ next.url }}>Go to page {{ next.page }} →</a>
{% else %}
[This is the last page]
{% endif %}
"
>
Url: <a href="{{ page.url }}">{{ page.url }}</a>
<h2>{{ keys.heading }}</h2>
{{ keys.body | truncatewords:10 }}
</sf-keys>
Another paginationHtml
example
{% if totalPages > 1 %}
<div id=pagination>
<div class=pages>
{% paginate page in pages current: pageNumber limit: 10 %}
{% if page == pageNumber %}
<span>{{ page }}</span>
{% else %}
<a href={{ page | pageNumberToUrl }}>{{ page }}</a>
{% endif %}
{% endpaginate %}
</div>
</div>
{% endif %}