Jtl

Search

Backend in the Clerk.io backend

Clerk.io bietet drei verschiedene Suchlösungen, die zusammen oder einzeln verwendet werden können:

In diesem Artikel wird erklärt, wie Sie mit einer Clerk.js-Installation in JTL beginnen.

Instant Search zeigt in Echtzeit Suchergebnisse an, während Kunden tippen, und stellt diese in einem Dropdown unter dem Suchfeld dar.

Design erstellen #

Sie können entweder den Design Editor für eine visuelle Konfiguration nutzen oder Code-Designs verwenden.

Design Editor #

  1. Gehen Sie zu Search > Designs und klicken Sie auf New Design.
  2. Wählen Sie Other designs > Instant Search.
  3. Wählen Sie aus der Liste der Designvorlagen die Vorlage aus, mit der Sie starten möchten.
  4. Geben Sie einen Namen ein und klicken Sie auf Create design.
  5. Nehmen Sie die gewünschten Änderungen am Design vor.

Sie können die Setup-Anleitung SEARCH unter der Option Getting Started verwenden, um schnell Designs und Content zu erstellen, die das Farbschema und den Stil Ihres Webshops übernehmen.

Klicken Sie auf Publish, wenn Sie mit dem Styling zufrieden sind.

Sie können Ihre Designs und Inhalte später einfach unter Designs and Elements im linken Menü ändern. Für Designvorlagen können Sie auch diese Anleitung Template Design to use in Clerk verwenden.

Code-Design #

  1. Gehen Sie zu Search > Designs und klicken Sie auf New Design.
  2. Wählen Sie Other designs > Blank > With code.
  3. Geben Sie einen Namen ein und klicken Sie auf Save.
  4. Erstellen Sie ein eigenes Code-Design mit Liquid code.

Wenn Sie eine Startvorlage benötigen, finden Sie die Instant Search template weiter unten.

Element erstellen #

Hier werden alle Einstellungen vorgenommen, um das Instant Search Dropdown auf Ihrer Website einbettbar zu machen.

  1. Gehen Sie zu Search > Elements.
  2. Klicken Sie auf New Element.
  3. Nennen Sie es “Live Search”.
  4. Wählen Sie im Feld Element type Live-search aus dem Dropdown.
  5. Wählen Sie unter Design das zuvor erstellte Design aus dem Dropdown aus.
  6. Klicken Sie oben auf Save.

Zur Website hinzufügen #

  1. Öffnen Sie in den Element-Einstellungen den Tab Insert into website.
  2. Hier haben Sie zwei Optionen:
    • Mit injection können Sie den Code über einen CSS-Selektor einfügen.
    • Mit embedded code können Sie den Code händisch auf Ihrer Website einfügen.
  3. Wählen Sie die für Sie einfachste Option.
  4. Fügen Sie den Namen des Live Search Elements zu den JTL Plugin-Einstellungen hinzu.

Aktivieren Sie die Live Search, tragen Sie den Elementnamen unter Clerk TemplateName ein und achten Sie darauf, den passenden Klassen-Selektor für Ihr input field zu verwenden. Dadurch wird sichergestellt, dass die Live Search ein Feld zum Rendern hat.

Search Page #

Die Search Page bietet ein vollseitiges Sucherlebnis mit erweiterten Filteroptionen. Damit werden alle Treffer einer Suchanfrage des Kunden angezeigt.

Design erstellen #

Sie können entweder den Design Editor für eine visuelle Konfiguration nutzen oder Code-Designs verwenden.

Design Editor #

  1. Gehen Sie zu Search > Designs und klicken Sie auf New Design.
  2. Wählen Sie Other designs > Search Page.
  3. Wählen Sie aus der Liste der Designvorlagen die Vorlage aus, mit der Sie starten möchten.
  4. Geben Sie einen Namen ein und klicken Sie auf Create design.
  5. Nehmen Sie die gewünschten Änderungen am Design vor.

Sie können die Setup-Anleitung SEARCH unter der Option Getting Started verwenden, um schnell Designs und Content zu erstellen, die das Farbschema und den Stil Ihres Webshops übernehmen.

Klicken Sie auf Publish, wenn Sie mit dem Styling zufrieden sind.

Sie können Ihre Designs und Inhalte später einfach unter Designs and Elements im linken Menü ändern. Für Designvorlagen können Sie auch diese Anleitung Template Design to use in Clerk verwenden.

Code-Design #

  1. Gehen Sie zu Search > Designs und klicken Sie auf New Design.
  2. Wählen Sie Other designs > Blank > With code.
  3. Geben Sie einen Namen ein und klicken Sie auf Save.
  4. Erstellen Sie ein eigenes Code-Design mit Liquid code.

Wenn Sie eine Startvorlage benötigen, finden Sie die Search Page template weiter unten.

Element erstellen #

Hier werden alle Einstellungen vorgenommen, um die Search Page auf Ihrer bestehenden Suchseite einbettbar anzuzeigen.

  1. Gehen Sie zu Search > Elements.
  2. Klicken Sie auf New Element.
  3. Nennen Sie es “Search Page”.
  4. Wählen Sie im Feld Element type Search page aus dem Dropdown.
  5. Wählen Sie unter Design das zuvor erstellte Design aus dem Dropdown aus.
  6. Klicken Sie oben auf Save.

Zur Website hinzufügen #

  1. Öffnen Sie in den Element-Einstellungen den Tab Insert into website.
  2. Hier haben Sie zwei Optionen:
    • Mit injection können Sie den Code über einen CSS-Selektor einfügen.
    • Mit embedded code können Sie den Code händisch auf Ihrer Website einfügen.
  3. Wählen Sie die für Sie einfachste Option.
  4. Fügen Sie den Namen des Search Page Elements zu den JTL Plugin-Einstellungen hinzu.

Aktivieren Sie die Suchseite und tragen Sie den Elementnamen unter Clerk TemplateName ein.

Facetten hinzufügen #

Hier müssen Sie ein Facettendesign erstellen:

  1. Erstellen Sie ein Design in Clerk (im Clerk.io Backend unter Search → Designs)
  2. Nach der Erstellung muss eine ID im Plugin-Backend hinterlegt werden (Plugins → Installierte Plugins → S360 Clerk → Zahnradsymbol klicken → Einstellungen → Facet Design).

Omnisearch #

Die Omnisearch kombiniert die Instant Search und die Search Page zu einem Overlay, das angezeigt wird, wenn der Nutzer in das Suchfeld klickt.

Design erstellen #

Omnisearch funktioniert nur mit Code-Designs, da es ein komplexeres Layout hat und beliebig angepasst werden kann.

  1. Gehen Sie zu Search > Designs und klicken Sie auf New Design.
  2. Wählen Sie Omni-search.
  3. Wählen Sie aus der Liste der Designvorlagen die Vorlage aus, mit der Sie starten möchten.
  4. Geben Sie einen Namen ein und klicken Sie auf Save.
  5. Nehmen Sie die gewünschten Änderungen am Design vor. Weitere Informationen finden Sie im Omnisearch guide.

Element erstellen #

Hier werden alle Einstellungen vorgenommen, um die Omnisearch auf Ihrer Website einbettbar anzuzeigen.

  1. Gehen Sie zu Search > Elements.
  2. Klicken Sie auf New Element.
  3. Nennen Sie es “Omni-Search”.
  4. Fügen Sie ein Tracking-Label hinzu – dies sollte ebenfalls einfach “Omni-Search” sein.
  5. Wählen Sie im Feld Element type Omni-search aus dem Dropdown.
  6. Wählen Sie unter Design das zuvor erstellte Design aus dem Dropdown aus.
  7. Klicken Sie oben auf Save.

Zur Website hinzufügen #

  1. Öffnen Sie in den Element-Einstellungen den Tab Insert into website.
  2. Hier haben Sie zwei Optionen:
    • Mit injection können Sie den Code über einen CSS-Selektor einfügen.
    • Mit embedded code können Sie den Code händisch auf Ihrer Website einfügen.
  3. Wählen Sie die für Sie einfachste Option.
  4. Wenn Sie die Embedded-Code-Variante nutzen, ersetzen Sie INSERT_CSS_SELECTOR[...] durch eine eindeutige Klasse oder ID Ihres Suchfeldes. Die Omnisearch wird angezeigt, wenn in das passende Suchfeld geklickt wird.

Startvorlagen #

Wenn Sie Code-Designs verwenden möchten, können diese Templates Ihnen den Einstieg erleichtern. Sie enthalten die grundlegenden UI-Elemente für Instant Search und Search Page, die Sie dann nach Ihren Bedürfnissen anpassen können.

Instant Search Code #

Dies enthält die HTML- und CSS-Teile für die Darstellung eines Instant Search Dropdowns. Fügen Sie diese zu einem Code-Design in my.clerk.io hinzu.

HTML #

<div id="clerk-template-live-search" style="background: white">
    <div class="clerk-live-search">
        <div class="row">
            <div class="col-12 col-sm-8 clerk-live-search-products">
                {% if products.length != 0 %}
                    <div class="h4 headline-style">{{ snippets.headlineProducts }}</div>
                    {% for product in products %}
                        <div class="product clerk-instant-search-key-selectable">
                            <a href="{{ product.url }}" class="d-block product-link link-discreet">
                                <div class="row align-items-center">
                                    <div class="col-2 text-center product-image-wrapper">
                                        <img src="{{ product.image }}" class="product-image img-fluid" />
                                    </div>
                                    <div class="col-7">
                                        <div class="product-name productbox-title et-mb-0">{{ product.name }}</div>
                                    </div>
                                    <div class="col-3">
                                        <div class="price_wrapper text-right">
                                            {% if product.has_variations or product.bulk_prices != 0 %}
                                                <span class="price_label pricestarting">
                                                    {{ snippets.priceStarting }}
                                                </span>
                                            {% endif %}

                                            {% if product.on_sale %}
                                                <span class="instead-of old-price">
                                                    <small class="text-muted-util">
                                                        <del class="value">{{ product.original_price | money_eu }} {{ globals.currency_symbol }}</del>
                                                    </small>
                                                </span>
                                            {% endif %}

                                            <span class="price productbox-price {% if product.on_sale %} special-price{% endif %}">
                                                <span>{{ product.price | money_eu }} {{ globals.currency_symbol }} <span class="footnote-reference">*</span></span>
                                            </span>

                                            {% if product.base_price > 0 %}
                                                <div class="price-note">
                                                    <span class="value">{{ product.base_price | money_eu }} {{ globals.currency_symbol }} {{ snippets.vpePer }} {{ product.base_price_unit }}</span>
                                                </div>
                                            {% endif %}
                                        </div>
                                    </div>
                                </div>
                            </a>
                        </div>
                    {% endfor %}
                    <div class="text-center">
                        <a href="{{ snippets.searchUrl }}?query={{ query }}" class="btn btn-secondary btn-lg">
                            {{ snippets.showAllResults }}
                        </a>
                    </div>
                {% else %}
                    <div class="text-center">
                        {{ snippets.textNoResults | replace '###QUERY###' query | highlight query 'clerk-live-search-highlight' }}
                    </div>
                {% endif %}
            </div>

            <div class="col col-sm-4 clerk-live-search-others">
                {% if suggestions.length != 0 %}
                    <div class="h4 headline-style">{{ snippets.headlineSuggestions }}</div>
                    <div class="clerk-live-search-others-wrapper clerk-suggestion">
                        {% for suggestion in suggestions %}
                            <a href="{{ snippets.searchUrl }}?query={{ suggestion }}">
                                {{ suggestion }}
                            </a>
                        {% endfor %}
                    </div>
                {% endif %}
                {% if categories.length != 0 %}
                    <div class="h4 headline-style">{{ snippets.headlineCategories }}</div>
                    <div class="clerk-live-search-others-wrapper clerk-category">
                        {% for category in categories %}
                            <a href="{{ category.url }}">
                                {{ category.name }}
                            </a>
                        {% endfor %}
                    </div>
                {% endif %}
                {% if pages.length != 0 %}
                    <div class="h4 headline-style">{{ snippets.headlinePages }}</div>
                    <div class="clerk-live-search-others-wrapper clerk-pages">
                        {% for page in pages %}
                            <a href="{{ page.url }}">
                                {{ page.title }}
                            </a>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>
        </div>
    </div>
</div>

CSS #

#clerk-template-live-search {
    background: var(--white);
    padding: 1rem;
    box-shadow: 0 0 1.5rem rgba(0, 0, 0, 0.2);
}
#clerk-template-live-search .product {
    margin-bottom: 1rem;
}

.clerk-live-search-container .clerk-live-search-others a {
    text-decoration: none;
    display: block;
    margin-bottom: 0.3125rem;
}

.clerk-live-search-others-wrapper .clerk-category {
    display: flex;
    flex-wrap: wrap;
}

Search Page Code #

Dies enthält die HTML-Teile für die Darstellung einer Search Page. Fügen Sie diese zu einem Code-Design in my.clerk.io hinzu.

Search Page (EasyTemplate) #

<div id="result-wrapper" data-wrapper="true">
    {% if products.length %}
        <div class="et-product-list-products-wrapper">
            <div class="row product-list row-cols-2 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-4 layout-gallery" data-products-per-row='{"xs":2,"sm":2,"md":3,"lg":4,"xl":4}' id="product-list">
                {% for product in products %}
                <div class="product-wrapper col">
                    <div id="result-wrapper_buy_form_{{ product.id }}" data-wrapper="true" class="productbox productbox-show-variations et-item-box productbox-column">
                        <div class="productbox-inner">
                            <div class="row">
                                <div class="col col-12">
                                    <div class="productbox-image">
                                           
                                           
                                        {% if product.top_article and product.top_article != false %}
                                            <div class="ribbon ribbon-4 productbox-ribbon">
                                                {{ snippets.ribbons.4 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.on_sale and product.on_sale != false %}
                                            <div class="ribbon ribbon-2 productbox-ribbon">
                                                {{ snippets.ribbons.2 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.in_stock and product.in_stock != false %}
                                            <div class="ribbon ribbon-8 productbox-ribbon">
                                                {{ snippets.ribbons.8 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.in_stock and product.in_stock <= 0 %}
                                            <div class="ribbon ribbon-7 productbox-ribbon">
                                                {{ snippets.ribbons.7 }}
                                            </div>
                                        {% endif %}
                                        
                                        
                                        {% if product.age and product.age <= snippets.settings.newProductmaxDays %}
                                            <div class="ribbon ribbon-3 productbox-ribbon">
                                                {{ snippets.ribbons.3 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.average_rating and product.average_rating <= snippets.settings.topProductMinStars %}
                                            <div class="ribbon ribbon-6 productbox-ribbon">
                                                {{ snippets.ribbons.6 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.age and product.age < 0 %}
                                            <div class="ribbon ribbon-5 productbox-ribbon">
                                                {{ snippets.ribbons.5 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.vorbestellbardate and product.vorbestellbardate > 0 %}
                                            <div class="ribbon ribbon-9 productbox-ribbon">
                                                {{ snippets.ribbons.9 }}
                                            </div>
                                        {% endif %}
                                        
                                        {% if product.age and product.age > 0 and product.stock <= 0 %}
                                            <div class="ribbon ribbon-5 productbox-ribbon">
                                                {{ snippets.ribbons.5 }}
                                            </div>
                                        {% endif %}
                                        
                                        <div class="productbox-images list-gallery">
                                            <a href="{{ product.url }}" title="{{ product.name }}">
                                                <div class="productbox-image square square-image">
                                                    <div class="inner">
                                                        <picture>
                                                            <img src="{{ product.image }}" class="img-fluid" loading="lazy" alt="{{ product.name }}" />
                                                        </picture>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                    </div>
                                </div>

                                <div class="col col-12">
                                    <div class="productbox-caption">
                                        <div class="et-item-box-manufacturer productbox-manufacturer">
                                            <span>{% if snippets.settings.showBrand %}{{ product.brand }}{% endif %}</span>
                                        </div>

                                        <div class="et-item-box-title productbox-title">
                                            <a href="{{ product.url }}" class="text-clamp-2 link-discreet">
                                                {{ product.name }}
                                            </a>
                                        </div>

                                        <div class="et-item-box-rating productbox-rating">
                                        {% if product.average_rating > 0 %}
                                            <a class="rating" href="{{ product.url }}#tab-votes" title="{{ snippets.productRating }}: {{ product.average_rating }}/5">
                                            {% if product.average_rating >= 5 %}
                                                <i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i>
                                            {% else %}
                                                {% if product.average_rating >= 4 %}
                                                    <i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i>{% if product.average_rating > 4 %}<i class="{{ snippets.icons.ratingHalf }}"></i>{% else %}<i class="{{ snippets.icons.ratingEmpty }}"></i>{% endif %}
                                                {% else %}
                                                    {% if product.average_rating >= 3 %}
                                                        <i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i>{% if product.average_rating > 3 %}<i class="{{ snippets.icons.ratingHalf }}"></i>{% else %}<i class="{{ snippets.icons.ratingEmpty }}"></i>{% endif %}<i class="{{ snippets.icons.ratingEmpty }}"></i>
                                                    {% else %}
                                                        {% if product.average_rating >= 2 %}
                                                            <i class="{{ snippets.icons.rating }}"></i><i class="{{ snippets.icons.rating }}"></i>{% if product.average_rating > 2 %}<i class="{{ snippets.icons.ratingHalf }}"></i>{% else %}<i class="{{ snippets.icons.ratingEmpty }}"></i>{% endif %}<i class="{{ snippets.icons.ratingEmpty }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i>
                                                        {% else %}
                                                            {% if product.average_rating >= 1 %}
                                                                <i class="{{ snippets.icons.rating }}"></i>{% if product.average_rating > 1 %}<i class="{{ snippets.icons.ratingHalf }}"></i>{% else %}<i class="{{ snippets.icons.ratingEmpty }}"></i>{% endif %}<i class="{{ snippets.icons.ratingEmpty }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i>
                                                            {% else %}
                                                                {% if product.average_rating > 0 %}
                                                                    <i class="{{ snippets.icons.ratingHalf }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i><i class="{{ snippets.icons.ratingEmpty }}"></i>
                                                                {% endif %}
                                                            {% endif %}
                                                        {% endif %}
                                                    {% endif %}
                                                {% endif %}
                                            {% endif %}
                                            </a>
                                        {% endif %}
                                        </div>
                                        
                                        {% if product.in_stock %}
                                        
                                            {% if product.stock >= snippets.settings.storageLightsGreen%}
                                            
                                            <div class="delivery-status">
                                                <ul class="list-unstyled">
                                                    <li>
                                                        <span class="status status-2"> 
                                                            <span class="{{snippets.settings.storageLightIcon}} status-icon"> </span>
                                                            <span class="status-text">{{snippets.settings.storageLightTextGreen}}</span>
                                                        </span>
                                                    </li>
                                                </ul>
                                            </div>
                                            
                                            {% endif %}
                                            
                                            {% if product.stock > snippets.settings.storageLightsRed and product.stock < snippets.settings.storageLightsGreen %}
                                            
                                            
                                            <div class="delivery-status">
                                                <ul class="list-unstyled">
                                                    <li>
                                                        <span class="status status-1"> 
                                                            <span class="{{snippets.settings.storageLightIcon}} status-icon"> </span>
                                                            <span class="status-text">{{snippets.settings.storageLightTextYellow}}</span>
                                                        </span> 
                                                    </li>
                                                </ul>
                                            </div>
                                               
                                            {% endif %}
                                            
                                            {% if product.stock == snippets.settings.storageLightsRed%}
                                            
                                                <div class="delivery-status">
                                                    <ul class="list-unstyled">
                                                        <li>
                                                           <span class="status status-0"> 
                                                                <span class="{{snippets.settings.storageLightIcon}} status-icon"> </span>
                                                                <span class="status-text">{{snippets.settings.storageLightTextRed}}</span>
                                                            </span>
                                                        </li>
                                                    </ul>
                                                </div>
                                            
                                            {% endif %}
                                            
                                        {% endif %}

                                        <div class="et-item-box-price">
                                            <div class="price_wrapper">
                                                {% if product.has_variations or product.bulk_prices != 0 %}
                                                    <span class="price_label pricestarting">
                                                        {{ snippets.priceStarting }}
                                                    </span>
                                                {% endif %}

                                                <div class="price productbox-price {% if product.on_sale %} special-price{% endif %}">
                                                    <span>{{ product.price | money }} {{ globals.currency_symbol }} <span class="footnote-reference">*</span></span>
                                                </div>

                                                {% if product.on_sale %}
                                                    <div class="price-note et-old-price">
                                                        <div class="instead-of old-price">
                                                            <small class="text-muted-util">
                                                                <del class="value">{{ product.original_price | money }} {{ globals.currency_symbol }}</del>
                                                            </small>
                                                        </div>
                                                    </div>
                                                {% endif %}

                                                {% if product.base_price > 0 %}

#### Suchseite (Nova)
{% if products.length %}