Ricerca testuale

Il campo di ricerca permette all'utente di trovare le pagine in base ad una stringa. Una volta effettuata la ricerca l'utente si ritroverà a vederne i risultati all'interno della vista search.html. La paginazione dei risultati di ricerca viene regolata dal pannello in Impostazioni > Generali > Ricerca nel campo Risultati per pagina della Ricerca contenuti

In questa pagina viene trattata la ricerca testuale e non la Ricerca Avanzata, né la Ricerca categorie.

Inserire il campo di ricerca

La ricerca testuale in SelfComposer passa in GET alla view search.html la variabile q, che contiene la stringa cercata. È quindi sufficiente creare un form che passi in questo modo la query e che abbia come valore di action l'URL dato da cms::public.search. Questo form può essere inserito in qualsiasi view del tema.

Viene proposta di seguito una macro per semplificare la costruzione del campo di ricerca, utilizzando le etichette fornite da SelfComposer:

{% 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' }) }}    
		<input type="text" name="q" placeholder="{{ placeholder }}" value="{{ input_get('q') }}" required>
		<button type="submit">{{ search_btn }}</button>
	{{ form_close() }}
{% endmacro %}

Mostrare i risultati

I risultati di una ricerca vengono mostrati in search.html utilizzando contents: una collection di pagine. È quindi sufficiente ciclare su questo array per estrarre tutti i risultati, allo stesso modo in cui si estraggono le pagine figlie. Inoltre è possibile utilizzare pagination.links per estrarre la paginazione.

Va considerato anche il caso in cui la ricerca non abbia prodotto risultati, controllando se contents contiene o meno delle pagine. In questo caso è possibile visualizzare l'etichetta predefinita search_no_results.

Infine è possibile anche mostrare la stringa cercata con la variabile terms e il numero totale di risultati trovati con pagination.total, assieme alle rispettive etichette predefinite di SelfComposer search_results e search_results_count.

Il file search.html potrebbe essere quindi strutturato in questo modo:

search.html
<h1>{{ find_label('cms', 'search_results') }}: {{ terms }}</h1> {# Etichetta del CMS per i risultati trovati e variabile "terms" del termine cercato #}
<p>{{ find_label('cms', 'search_results_count') }}: {{ pagination.total }}</p> {# Etichetta del CMS della quantità di risultati trovati e il totale dei risultati #}
 
{# Controllo se ci sono risultati #}
 
{% if contents %}
    {# Mostro la paginazione #}
    <div>
        {{ pagination.links }}
    </div>
 
    {# Ciclo per mostrare ogni pagina trovata #}
    {% for page in contents %}
        <div>
            {% if child.image_url %}
                {# Collegamento all'articolo #}
                <a href="{{ content.url }}">
                    {% if content.image_url %}
                        <img src="{{ content.image_url }}" alt="{{ content.title }}">
                    {% endif %}
                    <h3>{{ content.title }}</h3>
                    <h4>{{content.description}}</h4>
                </a>
            {% endif %}
        </div>
    {% endfor %}
 
{% else %}
 
    {# Se non ci sono risultati, mostro l'etichetta del CMS apposita #}
    <h3>{{ find_label('cms', 'search_no_results') }}</h3>
 
{% endif %}

Voci correlate