CMS Handlers
Advisory board city list
{{ advisory_board_city_list(
{
amount: null,
amount_per_page: 12,
cols: 3,
search: false,
paginated: false,
}
)
}}
Advisory board tender website list
{{ advisory_board_city_tender_website_list(
{
amount: null,
amount_per_page: 12,
cols: 3
}
)
}}
Advisory board member list
{{ advisory_board_member_list(
{
amount: 80,
amount_per_page: 12,
cols: 3,
}
)
}}
Advisory board solution list
{{ advisory_board_solution_list(
{
board: null,
amount: null,
amount_per_page: 12,
cols: 3,
search: false,
paginated: false,
}
)
}}
Article
- id (optional): id of the Article
{{ article(
{
id: 1234
}
)
}}
Calendar
The calendar handler shows a list of items from the calendar
which: upcoming (default), past, all, highlight
{{ calendar(
{
cols: 3,
paginated: true,
amount: 8,
amount_per_page: 9,
search: false,
which: 'upcoming',
types: [32]
}
)
}}
Amount cannot be combined with paginated
Country map
The extension country_map
prints a map of the world or europe and selected country can be highlighted
The following options can be used
- countries (array): Country objects
- color_min (string): HEX code of the unselected country
- color_max (string): HEX code of the selected country
- height (string): Height of the map
- width (string): Width of the map
- world (boolean): Set to true if the map of the world should be shown
{{ country_map({
countries: {
country1,
country2,
},
color_min: '#d9d9d9',
color_max: '#000082',
height: '600px',
width: '100%,
world: false
})
}}
Country funders
The extension country_funders
shows a list of PA of the country (only when visible on website is turned on)
The following options can be used
- country (string): ISO3 code of the country of which information should be shown. If no values is given the country will be taken from the URL (docref)
{{ country_funders({
'country' : 'iso3',
'cols' : 4,
}) }}
Country videos
The extension country_videos
shows a list of recorded funding videos of the country
The following options can be used
- country (string): ISO3 code of the country of which information should be shown. If no values is given the country will be taken from the URL (docref)
{{ country_videos({
'country' : 'iso3',
'cols' : 2,
}) }}
Country page
The extension country_page
renders the information from the country (special) page
The following options can be used
- country (string): ISO3 code of the country of which information should be shown. If no values is given the country will be taken from the URL (docref)
{{ country_page({
'country' : 'iso3'
}) }}
Country list
The country_list
extension renders a list of countries. The following options can be used:
- is_itac: boolean, if true only ITAC countries are shown
{{ country_list({
'is_itac': false
}) }}
Get country
The get_country
extension returns an object with information about the country in the URL
{% set countryData = get_country() %}
The countryData object has the following properties:
- country: The country object
- projects: Amount of projects
- partners: Amount of partners
- personYears: Amount of person years
- costs: Amount of costs
- impactStories: amount of impact stories
These properties can be used in the page like this:
Country {{ countryData.country.country }} has {{ countryData.partners }} partners
A default page for a country could look like this
{% set countryData = get_country() %}
{% set country = countryData.country %}
{% do headTitle().append(country.country) %}
<div class="container">
<div class="row">
<div class="col-md-4">
<h1 class="display-1">{{ country.country }}</h1>
<h2>{{ translate("txt-country-information") }}</h2>
<a href="/participating-partners.html?facet%5Bcountry%5D%5Bvalues%5D%5B%5D={{ country.country }}&query=">{{ countryData.partners }} {% if countryData.partners == 1 %}{{ translate("txt-partner")|lower }}{% else %}{{ translate("txt-partners")|lower }}{% endif %}</a>
<br>
<a href="/project-overview.html?facet%5Bcountry%5D%5Bvalues%5D%5B%5D={{ country.country }}&query=">{{ countryData.projects }} {% if countryData.projects == 1 %}{{ translate("txt-project")|lower }}{% else %}{{ translate("txt-projects")|lower }}{% endif %}</a>
<br>
</div>
<div class="col-md-8">
{{ country_map({selected_country: country}) }}
</div>
</div>
</div>
<div class="bg-light py-5">
<div class="container">
{{ country_funders({country: country}) }}
</div>
</div>
{{ country_videos({country: country}) }}
Image
This handler will return only the Image URL, to use in the CMS it has to be wrapped in <img src="">"
Resize: resize/fitin width:
{{ image({
id : 1234,
url: 'https://www.example.com/image.jpg',
resize : 'resize',
width : 100,
height : 100,
crop: {
left: 0,
top: 0,
right: 100,
bottom: 100
}
})
}}
Carousel
Image can be URL or ID in image database
{{ carousel({'items' : [
{image: 11352, url:'https://www.nu.nl'},
{image: 11330, url:'https://www.nu.nl'}
]}) }}
Result list
The extension result_list
prints a list of result, which include
The following options can be used
-
countries (array string): List of ISO3 codes of the countries where should be filtered on - types (array): List of result type ids where should be filtered on
- list_style (string): Style of the list (impact_stream, grid, list)
{{ result_list(
{
type: [12, 24],
country: 'NLD',
cols: 3,
paginated: true,
show_abstract: true,
amount: 8,
amount_per_page: 9,
search: false,
list_style: 'grid'
}
)
}}
Amount cannot be combined with paginated
Result
The extension result
prints a result, taking the result from the URL
{{ result() }}
Magazine list
- type (string): magazine or annual_report
{{ magazine_list(
{
type: 'magazine',
headerText: '<h1>Hello world</h1>',
}
) }}
The rest of the pages (table of contents and the articles) are handled by the system
Magazine article list
-
{{ magazine_article_list(
{
amount: 10,
cols: 4,
query: '',
country: ['NLD'],
project: [1245],
organisation: [12],
list_style: 'grid,
order: 'date_published',
direction: 'desc',
}
) }}
News message
The extension get_news_messsage
gets the news message from the URL
{{ get_news_message()}}
A default news page could be created with the following code:
{% set news = get_news_message() %}
{% if news.css %}
{% do headStyle().appendStyle(news.css) %}
{% endif %}
{% do headTitle().append(news.news) %}
<div class="container header-container">
<div class="text-muted">
{{ translate("txt-published-on-%s")|format(news.datePublished|date('d M Y')) }}
{% if news.subTitle|length > 0 %}
· {{ news.subTitle }}
{% endif %}
{{ newsLink(news,'edit','icon') }}
</div>
<h1 class="display-4 mt-0 pb-0">{{ news.news }} </h1>
</div>
<div class="container">
{% include template_from_string(news.bodyText) %}
</div>
{% if news.project.count() > 0 %}
<div class="bg-light py-3 mt-5">
<div class="container">
<h2 class="pb-3">{{ translate("txt-news-project-list") }}</h2>
<div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4">
{% for project in news.project %}
{% include 'extensions/project/partial/project-block' with {'project' : project} %}
{% endfor %}
</div>
</div>
</div>
{% endif %}
News list
The handler news_list
shows news messages in a list. There are 2 optional parameters:
- limit: The number of news messages to show
- category: Filter the news by a specific category
- organisation: Filter the news by a connected organisation
- project: Filter the news by a connected project
- sort: title or date_published or score
{{ news_list (
{
amount: 10,
category: 1,
search: true,
paginated: true,
cols: 4,
amount_per_page: 9,
highlighted: true,
query: 'Sweden',
sort: 'date_published',
direction: 'asc',
organisation: 12,
project: 14,
}
)}}
Organisation list
The extension organisation_list
prints a list of organisations
If a selection is used, the following properties are also available:
The following list styles are available
- grid
- list (default)
{{ organisation_list(
{
selection: 1,
country: 'NLD',
cols: 3,
paginated: true,
amount: 8,
amount_per_page: 9,
search: false,
list_style: 'grid',
query: 'Sweden',
sort: ['projects','projects_on_website','projects_on_website_last_ten_years'],
direction: 'asc'
organsation_types:['gov,'ind'],
show_elements: ['country', 'organisation_type']
}
)
}}
Organisation
The extension get_organisation
retrieves the organisation from the URL to be used in the Node.
Use the following code to get the organisation
{% set organisation = get_organisation() %}
An example organisation page can be created as follows
{% set organisation = get_organisation() %}
{% if not organisation %}
<div class="container">
<div class="alert alert-danger">
This organisation does not exist.
</div>
</div>
{% endif %}
{% if organisation %}
{% do headTitle().append(organisation.name) %}
<div class="container">
<h1 class="pt-3">{{ organisation }}</h1>
<div class="row">
<div class="col-md-8">
{% if organisation.description %}
{{ organisation.description|striptags('<br><a><p><ul><li><strong><em>')|raw }}
{% endif %}
</div>
<div class="col-md-4">
<img class="img-fluid mb-3"
src="{{ organisation_logo({organisation: organisation, width: 250, show: constant("General\\ValueObject\\Image\\ImageDecoration::SHOW_RAW")}) }}">
<dl>
<dt>{{ translate("txt-type") }}</dt>
<dd>{{ organisation.type }} {{ organisationLink(organisation,'view-admin','icon') }}
{{ organisationLink(organisation,'edit','icon') }}</dd>
<dt>{{ translate("txt-country") }}</dt>
<dd>{{ countryFlag(organisation.country, 15) }}
{{ countryLink(organisation.country,'view', 'name') }}</dd>
{% for web in organisation.web|filter(web => web.isMain()) -%}
{% if loop.first %}
<dt>{{ translate("txt-website") }}</dt>{% endif %}
<dd><a href="{{ web }}">{{ web }}</a></dd>
{% endfor %}
{% for news in organisation.news|filter(news => not news.isHidden()) -%}
{% if loop.first %}
<dt>{{ translate("txt-news-items") }}</dt>{% endif %}
<dd>
<i class="fas fa-bullseye"></i> <a
href="{{ newsLink(news,'view','raw') }}">{{ news }}</a>
({{ news.datePublished|date('d F Y') }})
</dd>
{% endfor %}
</dl>
</div>
</div>
</div>
<div class="bg-light clearfix py-4 my-4">
<div class="container">
<h2>Project participation</h2>
{{ project_list(
{
organisation: organisation.id,
cols: 3,
paginated: false,
search: false,
only_with_award: false,
list_style: 'grid'
}
) }}
</div>
</div>
{% endif %}
Organisation logo
{{ organisation_logo(
{
organisation: organisation
width: 100,
}
) }}
Project list
list_style: grid, carousel
{{ project_list(
{
selection: 1,
country: 'NLD',
organisation: [1,2 3],
challenge: [1,2,4]
cols: 3,
paginated: true,
amount: 8,
amount_per_page: 9,
show_project_description: false,
show_project_leader: false,
search: false,
only_with_award: false,
award_year: [2024]
list_style: 'grid'
}
)
}}
In case a selection is used, the selection object is parsed into the view. This object contains the following properties:
Amount cannot be combined with paginated
Project
If a project page needs to be rendered, first the project variable has to be called via the get_project()
extension.
This can be done in the following way.
{% set project = get_project() }
If the project variable is set, the following helpers are available:
- ````: The title of the project
- ````: Prints the full name of the project: Number + Title
- ````: A helper which prints the header image
- ````: A helper which prints wire-banner with project information
- ````: A helper which shows the project leader and his participation. In this helper also al list of flags is included
- ````: A helper which shows the project participants grouped per country
- ````: A helper which shows a list of all public project documents (news items, magazine articles etc)
Example project page
An example project page could be
{% set project = get_project() %}
{% do headTitle().append(project.parseFullName) %}
{{ project_header({project: project }) }}
{{ project_banner({project: project }) }}
<div class="container pt-4">
{{ project_leader({project: project }) }}
<h2>{{ translate("txt-project-description") }}</h2>
<div class="row">
<div class="col-md-8">
{{ project.description }} {{ projectLink(project,'view-admin','icon') }} {{ projectLink(project,'edit-admin','icon') }}
</div>
<div class="col-md-4">
<span class="float-end">{{ projectLogo(project, 250) }}</span>
</div>
</div>
{% for web in project.web|filter(web => web.isMain()) -%}
<br>
<a title="{{ web }}" href="{{ web }}"
target="_blank">{% if web.label %}{{ web.label }}{% else %}{{ web.web }}{% endif %}</a><br>
{% endfor %}
</div>
<div class="container pt-5">
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="partner-tab" data-bs-toggle="tab" href="#partner" role="tab"
aria-controls="home"
aria-selected="true">{{ translate("txt-partners") }}</a>
</li>
<li class="nav-item">
<a class="nav-link" id="document-tab" data-bs-toggle="tab" href="#document" role="tab"
aria-controls="document"
aria-selected="false">{{ translate("txt-documents") }}</a>
</li>
</ul>
</div>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="partner" role="tabpanel" aria-labelledby="partner-tab">
<div class="container">
{{ project_partners({project: project}) }}
</div>
</div>
<div class="tab-pane fade" id="document" role="tabpanel" aria-labelledby="document-tab">
<div class="container">
{{ project_documents({project: project}) }}
</div>
</div>
Blog message
The extension get_blog_messsage
gets the blog message from the URL
{{ get_blog_message()}}
A default blog page could be created with the following code:
{% set blog = get_blog_message() %}
{% if blog.css %}
{% do headStyle().appendStyle(blog.css) %}
{% endif %}
<div class="container header-container">
<div class="text-muted">
{{ translate("txt-published-on-%s")|format(blog.datePublished|date('d M Y')) }}
{% if blog.subTitle|length > 0 %}
· {{ blog.subTitle }}
{% endif %}
{{ blogLink(blog,'edit','icon') }}
</div>
<h1 class="display-4 mt-0 pb-0">{{ blog.blog }} </h1>
</div>
<div class="container">
{% include template_from_string(blog.bodyText) %}
</div>
Blog comment
A comment field for a blog can be created with the following code.
- blog (required): The blog
{{ blog_comment_form({
blog: blog
}) }}
Latest blog messages
This extension fetches the latest blog messages from the database. The following parameters can be used:
- amount (required): The amount of blog messages to be shown
{{ blog_latest_blogs({
amount: 5
}) }}
Blog list
The handler blog_list
shows blog messages in a list. There are 2 optional parameters:
- limit: The number of blog messages to show
- category: Filter the blog by a specific category
- sort: title or date_published or score
{{ blog_list (
{
amount: 10,
search: true,
paginated: true,
cols: 4,
amount_per_page: 9,
show_highlighted: true,
query: 'Sweden',
sort: 'date_published',
direction: 'asc'
}
)}}
Press article
The extension get_press_article
gets the Press article from the URL
{% set article = get_press_article() %}
A default press message page could be created with the following code:
{% set article = get_press_article() %}
<div class="container">
<div class="border-top border-bottom text-muted py-2">
{{ article.dateReleased|date('d F Y') }} <span class="px-2">·</span>
{{ translate("txt-source") }}: <a
href="{{ article.url }}">{{ article.bureau }}</a> <span class="px-2">·</span> <a
href="{{ pressArticleLink(article, 'download','raw') }}">{{ translate("txt-download-pdf") }}</a>
{% set editPressArticleLink = pressArticleLink(article,'edit','icon') %}
{% if editPressArticleLink %}
<span class="float-end">
{{ translate('txt-admin') }}:
{{ pressArticleLink(article,'view-admin','icon') }}
{{ editPressArticleLink|raw }}
</span>
{% endif %}
</div>
<h1>{{ article.article }}</h1>
<p>{{ article.content|raw }}</p>
</div>
{% if article.project.count() > 0 %}
<div class="bg-light py-5">
<div class="container">
<h2>{{ translate("txt-news-project-list") }}</h2>
<div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4">
{% for project in article.project %}
{% include 'extensions/project/project-grid' with {'project' : project} %}
{% endfor %}
</div>
</div>
</div>
{% endif %}
Press article list
The handler press_article_list
shows press articles in a table. There are 2 optional parameters:
- limit: The number of blog messages to show
- sort: title or date_published or score
{{ press_article_list (
{
amount_per_page: 9,
sort: 'date_published',
direction: 'asc'
}
)}}
Challenge
The extension get_challenge
gets the Press article from the URL
{% set challenge = get_challenge() %}
A default challenge could be created with the following code:
{% set challenge = get_challenge() %}
{% do headTitle().append(challenge.challenge) %}
{% if challenge.css %}
{% do headStyle().appendStyle(challenge.css) %}
{% endif %}
{{ challenge.html|raw }}
<div class="bg-light py-5">
<div class="container">
<h2>Projects related to the challenge {{ challenge.challenge }}</h2>
{{ project_list(
{
challenge: challenge.id,
cols: 3,
paginated: false,
search: false,
only_with_award: false,
list_style: 'grid'
}
) }}
</div>
</div>
Challenge list
The handler challenge_list
shows press articles in a table. There are 2 optional parameters:
- cols: the amount of columns
{{ challenge_list (
{
cols: 2,
}
)}}
Exploitable results
The extension exploitable_result_list
prints a list of exploitable results, which include
The following options can be used
- list_style (string): Style of the list (grid, list)
{{ exploitable_result_list(
{
cols: 3,
paginated: true,
amount: 8,
amount_per_page: 9,
search: false,
list_style: 'grid'
}
)
}}
Amount cannot be combined with paginated
Result
The extension get_exploitable_result
grabs the Exploitable from the URL
{% set exploitableResult = get_exploitable_result() %}
{% include 'project/achievement/exploitable-result/preview/content' %}
Idea Meeting list (workgroup sessions)
The extension idea_meeting_list
grabs the workgroup sessions from the database
{{ idea_meeting_list(
{
tool_id: 12
}
)
}}
Idea Session (Pitch and update sessions) schedule
The extension idea_session
produces a schedule of the pitch and update sessions, per session
{{ idea_session(
{
session_id: 12
}
)
}}
Idea Session (Pitch and update sessions) subscribe
The extension idea_session_subscribe
produces a subscribe form for the pitch, update and result sessions and
country information sessions, per tool
{{ idea_session_subscribe(
{
session: [12, 14, 16, 18, 20]
}
)
}}
Idea status updates
The extension idea_status_updates
grabs the status updates from the database
{{ idea_status_updates(
{
tool_id: 12
}
)
}}
Idea Posters
The extension idea_posters
grabs the posters from the database, per PIT Tool
{{ idea_posters(
{
tool_id: 12
}
)
}}
Idea Videos
The extension idea_videos
grabs the videos from the database, per PIT session
{{ idea_videos(
{
tool_id: 12
}
)
}}
Simple registration form
The extension registration_form
grabs the videos from the database, per PIT session
{{ registration_form(
{
meeting_id: 12,
registration_confirmation_alert: 'Thank you for registering'
}
)
}}
Participant finder
The extension participants_list
grabs the videos from the database, per PIT session
{{ participants_list(
{
meeting_id: 12
}
)
}}
Floor plan
The extension floorplan
renders the floorplan with the project ideas
{{ floorplan(
{
meeting_id: 12
}
)
}}
Video
The extension video
renders the video embedded in a div with play button
{{ video(
{
id: 12
}
)
}}