Markus Michalski FAQ

ALTCHA: Storefront-Integration

ALTCHA Spam-Schutz für Sylius - Widget in eigene Formulare einbauen per Twig-Funktion oder Hook, Verhalten bei Theme-Overrides und der Hook-Präfix-Fallstrick

English Version

Zurück zur Übersicht

ALTCHA: Storefront-Integration

Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net

Die eingebauten Formulare bekommen ihr Widget über Twig-Hooks, die dieses Plugin registriert. Dafür ist nichts weiter zu tun.

Bei jedem anderen Formular platzierst du das Widget einmalig im Template. Dafür gibt es zwei gleichwertige Wege:

Mit dem Plugin als Abhängigkeit

Rufe die Twig-Funktion direkt auf. Sie gibt nur dann etwas aus, wenn das Schutzziel im aktuellen Channel tatsächlich geschützt ist. Andernfalls bleibt sie leer, deshalb kann der Aufruf dauerhaft im Template stehen bleiben:

{{ mmd_altcha_widget('<target code>') }}

Ohne Abhängigkeit zum Plugin

Zum Beispiel in einem Template, das ein anderes Plugin mitbringt: Rendere stattdessen einen Hook. Ein nicht definierter Hook gibt nichts aus, daher ist das auch dort unproblematisch, wo dieses Plugin nicht installiert ist:

{% hook 'mmd_altcha.widget.support_form' %}
{% hook 'mmd_altcha.widget.newsletter' %}
{% hook 'mmd_altcha.widget' with { target: 'custom_order_form' } %}

Als <target code> bzw. target verwendest du bei den beiden Schwester-Plugins support_form und newsletter, bei einem eigenen Formular den Code, den du im Admin vergeben hast (Präfix custom_). Hake das Schutzziel in den Channel-Einstellungen erst an, wenn das Widget im Template steht (siehe Konfiguration).

Ob die beiden Schwester-Plugins das Widget schon ausgeben, hängt von ihrer Version ab. Prüfe vor dem Anhaken von support_form oder newsletter, ob ihre Templates {% hook 'mmd_altcha.widget.support_form' %} bzw. {% hook 'mmd_altcha.widget.newsletter' %} enthalten.

Wenn ein Theme ein Formular-Template ersetzt

Ersetzt dein Theme das Template eines eingebauten Formulars (zum Beispiel den Sylius-Hook sylius_shop.contact.contact_request.content.form) und gibt das Widget dadurch nicht mehr aus, wird jede Absendung dieses Formulars abgelehnt, denn die eingebauten Schutzziele sind von Anfang an angehakt. Entferne dann entweder den Haken oder baue das Widget wieder in das Template ein.

Am einfachsten ist die Twig-Funktion. Die Codes der eingebauten Formulare sind contact, registration, login und password_reset_request:

{{ mmd_altcha_widget('contact') }}

Hook aus einem Hook-Template: _prefixes: []

Rufst du einen Hook aus einem Template auf, das selbst von einem Hook gerendert wird, übergib _prefixes: []. Sylius stellt dem Namen des inneren Hooks sonst den Namen des äußeren voran (hier sylius_shop.contact.contact_request.content.form.mmd_altcha.widget). Diesen Hook gibt es nicht, deshalb wird stillschweigend nichts ausgegeben und es gibt keinen Fehler:

{% hook 'mmd_altcha.widget' with { target: 'contact', _prefixes: [] } %}

Dasselbe gilt für mmd_altcha.widget.support_form und mmd_altcha.widget.newsletter, wenn sie aus einem von einem Hook gerenderten Template aufgerufen werden.

Öffne das Formular nach jeder Änderung im Shop und prüfe, ob das Widget tatsächlich erscheint. Bei Problemen siehe Fehlerbehebung.