default.html

Il file default.html include le macro utilizzate nel tema, non è un file necessario e può avere un nome differente. Per funzionare deve essere importato nelle viste, in genere si sceglie di fare l'importazione in base.html per essere usato ovunque nel tema.

Per collegare il file delle macro, va inserito il comando {% import 'macro.default' as macro %} e possiamoutilizzarle usando la variabile macro definita con as. Il file contiene solo macro di Twig, ognuna di queste può essere richiamata attraverso il tag {% macro NOMEMACRO() %}.

Riportiamo qui un esempio di alcune macro che possono essere inserite in "default" contenente diverse funzioni utili, nell'ordine: menu, breadcrumb, ricerca, Tag, form contatti, visualizzazione dei form pagina in una tabella, form newsletter.

default.html
{# ---------------------------------------------------
	MENU
--------------------------------------------------- #}
{% macro menu(menu, submenu) %} {# Es. macro chiamata "menu", con due parametri: "menu" e "submenu" #}
	{% if menu.contents %}
		{% set menu = menu.contents %}
	{% endif %}
 
	{% for menu_item in menu %}
		{% if menu_item.childrens|length %}
			<li class="{{ submenu ? 'dropdown-submenu' : 'dropdown' }} {{ menu_item.has_active ? 'active' : '' }}">
				<a href="{{ menu_item.url }}" class="dropdown-toggle" data-toggle="dropdown">
					{{ menu_item.title }}
					{% if not submenu %}<b class="caret"></b>{% endif %}
				</a>
 
				<ul class="dropdown-menu">
					{{ _self.menu(menu_item.childrens , true) }}
				</ul>
			</li>
		{% else %}
			<li class="{{ menu_item.is_active ? 'active' : '' }}">
				{% if menu_item.is_external %}
					<a target="_blank" href="{{ menu_item.url }}">{{ menu_item.title }}</a>
				{% else %}
					<a href="{{ menu_item.url }}">{{ menu_item.title }}</a>
				{% endif %}
			</li>
		{% endif %}
	{% endfor %}
{% endmacro %}
 
 
{# ---------------------------------------------------
	BREADCRUMB
--------------------------------------------------- #}
{% macro breadcrumb() %}
	<ol class="breadcrumb">
		{% set home_label = find_label('cms', 'home') %}
 
		{% if home_label %}
		<li><a href="/{{ lang.code }}">{{ home_label }}</a></li>
		{% endif %}
 
		{% for parent in content.parents %}
		<li><a href="{{ parent.url }}">{{ parent.title }}</a></li>
		{% endfor %}
 
		<li class="active">{{ content.title }}</li>
	</ol>
{% endmacro %}
 
 
{# ---------------------------------------------------
	RICERCA
--------------------------------------------------- #}
{% macro search() %}
	{% set placeholder = find_label('cms', 'search_label') %}
	{% set search_btn  = find_label('cms', 'search_btn') %}
 
	{{ form_open({ route: 'cms::public.search', method: 'GET' }) }}
		<div class="input-group">
			<input type="text" name="q" class="form-control" placeholder="{{ placeholder }}" value="{{ input_get('q') }}">
 
			<span class="input-group-btn">
				<button class="btn btn-default" type="submit">{{ search_btn ?: '<span class="glyphicon glyphicon-search"></span>' }}</button>
			</span>
		</div>
	{{ form_close() }}
{% endmacro %}
 
{% macro advanced_search(search_form, parameters = { align: 'vertical' }) %}
	{{ _self.form_bootstrap(search_form, parameters) }}
{% endmacro %}
 
 
{# ---------------------------------------------------
	TAGS
--------------------------------------------------- #}
{% macro tag_cloud(tags, class) %}
	{% if tags %}
	<div class="tagcloud">
		{% for tag in tags %}
		<a class="tag-link" href="{{ tag.url }}">
			<span class="{{ class|default('label label-success') }}" title="{{ tag.occurrences }}" style="font-size: {{ tag.percentage - 90 }}pt;">{{ tag.value }}</span>
		</a>
		{% endfor %}
	</div>
	{% endif %}
{% endmacro %}
 
 
{# ---------------------------------------------------
	FORMS
--------------------------------------------------- #}
{% macro form_bootstrap(form, parameters) %}
 
	{% set fill        = parameters.fill %}
	{% set align       = parameters.align|default('horizontal') %}
	{% set label_class = (align == 'horizontal') ? 'control-label col-md-3' : null %}
 
	{% if form %}
	<div class="form-cont">
 
		{# ---- NOTIFICHE ---- #}
		{% if form.success %}
			<div class="alert alert-success">{{ form.success }}</div>
		{% endif %}
 
		{# ---- TITOLO FORM ---- #}
		{% if form.title %}
			<h4 class="page-header">{{ form.title }}</h4>
		{% endif %}
 
		{# ---- DESCRIZIONE FORM ---- #}
		{% if form.description %}
			<div class="page-subtitle">{{ form.description }}</div>
		{% endif %}
 
		{{ form.open({ class: "form-#{align}" }) }}
			{% for field in form.fields %}
 
				{% if field.is_hidden %}
					{% if field.info.name in fill|keys %}
						{{ field.input({ value: fill[field.info.name] }) }}
					{% else %}
						{{ field.input }}
					{% endif %}
 
				{% else %}
					<div class="form-group {{ field.error ? 'has-error' : '' }}">
 
						{# ---- ETICHETTA CAMPO ---- #}
						{{ field.label({ class: label_class }) }}
 
						{% if align == 'horizontal' %}
						<div class="controls col-md-7">
						{% endif %}
 
							{# ---- CAMPO ---- #}
							{% if field.info.name in fill|keys %}
								{{ field.input({ value: fill[field.info.name] }) }}
							{% else %}
								{{ field.input }}
							{% endif %}
 
							{# ---- ERRORI DI VALIDAZIONE E DESCR CAMPO ---- #}
							{% if field.error %}<span class="help-inline text-danger" >{{ field.error }}</span>{% endif %}
							{% if field.descr %}<span class="help-block">{{ field.descr }}</span>{% endif %}
 
						{% if align == 'horizontal' %}
						</div>
						{% endif %}
					</div>
				{% endif %}
 
			{% endfor %}
 
 
			{# ---- PULSANTI FORM ---- #}
			{% if form.fields %}
				{% if align == 'horizontal' %}
					<div class="form-group form-actions">
						<div class="col-md-7 col-md-offset-3">
							{{ form.submit({ class: 'btn btn-primary' }) }}
						</div>
					</div>
				{% else %}
					<div class="form-group form-actions">
						{{ form.submit({ class: 'btn btn-primary btn-block' }) }}
					</div>
				{% endif %}
			{% endif %}
		{{ form.close }}
	</div>
	{% endif %}
{% endmacro %}
 
{% macro form_page(page_forms) %}
	{% set page_forms = (page_forms is iterable) ? page_forms : [page_forms] %}
 
	{% for form in page_forms %}
	<h4>{{ form.title }}</h4>
 
	<div class="table-responsive">
		<table class="table table-bordered table-striped">
			<tbody>
				{% for field in form.fields %}
					{% if field.type != 'hidden' %}
					<tr>
						<td>{{ field.label }}</td>
						<td>
							{% if field.value is iterable %}
								{{ field.value|join('<br />') }}
							{% else %}
								{% if field.value and 'email' in field.rules %}
									{{ html_mailto(field.value) }}
								{% elseif field.value and 'url' in field.rules %}
									{{ html_link(field.value, field.value, { target: '_blank' }) }}
								{% else %}
									{{ field.value }}
								{% endif %}
							{% endif %}
						</td>
					</tr>
					{% endif %}
				{% endfor %}
			</tbody>
		</table>
	</div>
	{% endfor %}
{% endmacro %}
 
{% macro form_newsletter(form) %}
	{% if form %}
		{% if form.success %}
		<div class="alert alert-success">
			{{ form.success }}
		</div>
		{% endif %}
 
		{{ form.open() }}
			{% for field in form.fields %}
				{% if field.info.type != 'hidden' %}
				<div class="form-group {{ field.error ? 'has-error' : '' }}">
					{{ field.label({ class: 'control-label' }) }}
 
					<div class="controls">
						{{ field.input }}
 
						{% if field.error %}
						<span class="help-inline text-danger" >{{ field.error }}</span>
						{% endif %}
 
						{% if field.descr %}
						<span class="help-block">{{ field.descr }}</span>
						{% endif %}
					</div>
				</div>
				{% else %}
					{{ field.input }}
				{% endif %}
			{% endfor %}
 
			{% if form.fields %}
			<div class="form-actions">
				{{ form.submit({ class: 'btn btn-sm btn-primary' }) }}
			</div>
			{% endif %}
		{{ form.close }}
	{% endif %}
{% endmacro %}