Ermöglicht Kunden die Auswahl von Standard-Farben oder die Eingabe eigener RAL-Farbcodes auf der Produktseite.
- Standard-Farben: Klickbare Farbswatches mit Vorschau, konfigurierbar im Backend
- Eigener RAL-Code: Optionales Freitext-Feld für individuelle RAL-Eingabe; Live-Preview gibt den Farbnamen lokalisiert (DE/EN) aus
- Pro Variante: Aktivierung über Custom Field
ruhrcoder_color_picker_enabled - Warenkorb: Gewählte Farbe mit Farbquadrat in Cart, Checkout und Bestellbestätigung
- Bestell-Mail: Farbdaten werden in Order-CustomFields übertragen
- Positions-Trennung: Unterschiedliche Farben erzeugen separate Warenkorb-Positionen
- Plugin-Kompatibilität: Funktioniert standalone und mit RcDynamicPrice, RcCustomFields, RcCartSplitter
- Shopware 6.7 oder 6.8
- PHP 8.2+
# Plugin installieren und aktivieren
bin/console plugin:refresh
bin/console plugin:install --activate RcColorPicker
bin/console cache:clear
bin/build-storefront.sh| Einstellung | Beschreibung | Standard |
|---|---|---|
| Standard-Farben | Eine Farbe pro Zeile: RAL-Code;Name;Hex |
8 Farben |
| Eigene RAL-Eingabe | Erlaubt Freitext-Eingabe neben Standard-Farben | Aktiv |
| Farbauswahl Pflicht | Warenkorb-Button deaktiviert ohne Farbauswahl | Aktiv |
Am Produkt oder an der Variante das Feld "Farbauswahl aktivieren" (ruhrcoder_color_picker_enabled) auf true setzen.
RcColorPicker nutzt das generische Suffix-Protokoll (form.dataset.rcColorSuffix). Andere Ruhrcoder-Plugins beziehen diesen Suffix automatisch in ihre LineItem-ID-Berechnung ein.
| Kombination | Verhalten |
|---|---|
| Standalone | Eigene LineItem-ID bei unterschiedlicher Farbe |
| + RcDynamicPrice | Farbe + Länge → separate Positionen |
| + RcCustomFields | Farbe im Hash berücksichtigt |
| + RcCartSplitter | Farbe im TMMS-Hash berücksichtigt |
Die Migration Migration1779600000UpdateOrderConfirmationMailColorBlock patcht beim plugin:update das Default-order_confirmation_mail-Template (HTML + Plaintext) automatisch. Bedingungen:
- Der Inhalt enthält den exakten Shopware-Default-Label-Anchor (
{{ nestedItem.label|u.wordwrap(80) }}bzw.{{ lineItem.label|u.wordwrap(80) }}). - Der Marker
{# RcColorPicker:mail-color-block-v1 #}ist noch nicht vorhanden.
Wurde das Mail-Template im Admin inhaltlich angepasst, lässt die Migration es unberührt. In diesem Fall den folgenden Block direkt nach der Label-Ausgabe im jeweiligen Template einfügen.
HTML (innerhalb der LineItem-Schleife, direkt nach <div>{{ nestedItem.label|u.wordwrap(80) }}</div>):
{# RcColorPicker:mail-color-block-v1 #}
{% set cpRal = nestedItem.payload.rcColorPickerRal|default(nestedItem.customFields.ruhrcoder_color_picker_ral|default('')) %}
{% set cpName = nestedItem.payload.rcColorPickerName|default(nestedItem.customFields.ruhrcoder_color_picker_name|default('')) %}
{% set cpHex = nestedItem.payload.rcColorPickerHex|default(nestedItem.customFields.ruhrcoder_color_picker_hex|default('')) %}
{% if cpRal %}
<div style="font-size:11px;color:#666;margin-top:4px;">
{{ 'rcColorPicker.cartLabel'|trans }}:
{% if cpHex %}<span style="display:inline-block;width:10px;height:10px;background:{{ cpHex }};border:1px solid #ccc;vertical-align:middle;margin-right:4px;"></span>{% endif %}
{{ cpRal }}{% if cpName %} – {{ cpName }}{% endif %}
</div>
{% endif %}Plaintext (direkt nach Beschreibung {{ lineItem.label|u.wordwrap(80) }},):
{# RcColorPicker:mail-color-block-v1 #}
{% set cpRal = lineItem.payload.rcColorPickerRal|default(lineItem.customFields.ruhrcoder_color_picker_ral|default('')) %}
{% set cpName = lineItem.payload.rcColorPickerName|default(lineItem.customFields.ruhrcoder_color_picker_name|default('')) %}
{% if cpRal %}
{{ 'rcColorPicker.cartLabel'|trans }}: {{ cpRal }}{% if cpName %} – {{ cpName }}{% endif %},
{% endif %}Der OrderColorSubscriber fängt Fehler beim DAL-Schreiben in einen strukturierten Error-Log (context: ruhrcoder_color_picker.order_color_subscriber) mit Order-ID, betroffener LineItem-Anzahl und Exception-Klasse. Danach wird eine RcColorPickerException geworfen, damit Shopware den Bestellprozess nicht still mit inkonsistenten Custom-Fields fortsetzt. Logs finden sich im konfigurierten PSR-3-Handler (default: var/log/*.log).
Zwei Suites, getrennt ausführbar:
| Suite | Befehl | Voraussetzung |
|---|---|---|
| Unit | composer test:unit |
keine — läuft ohne Datenbank |
| Integration | composer test:integration |
MySQL/MariaDB + DATABASE_URL-Env |
Die Integration-Suite nutzt Shopwares IntegrationTestBehaviour mit Test-Kernel und DB-Rollback je Test. Der TestBootstrapper benötigt eine komplette Shopware-Installation (addCallingPlugin() löst nur dort auf) — Integration-Tests laufen daher auf einer Shopware-Test-Instanz, nicht im Plugin-Solo-Repo. In GitHub Actions läuft nur der quality-Job (Audit, CS-Fixer, PHPStan, Unit-Tests).
- CS-Fixer lokal: PHP CS Fixer benötigt
ext-intl. Auf Windows-PHP-Builds ohne intl-Extension lokal nicht ausführbar — stattdessen auf DevBox (ssh devbox 'cd /workspace/plugins/RcColorPicker && composer cs-check') oder im CI laufen lassen. - PHP-Versions-Range: Plugin testet gegen 8.2 / 8.3 / 8.4 (Shopware-6.7-/-6.8-Matrix). PHP 8.5 funktioniert für Runtime, CS-Fixer ist dort noch nicht offiziell freigegeben.
| Änderung | Befehl |
|---|---|
| Nur PHP/Twig | bin/console cache:clear |
| JS oder SCSS | bin/build-storefront.sh |
| Erstinstallation | bin/build-storefront.sh erforderlich |
In v2.0.0 wurden die Custom-Field-Namen auf das Vendor-Schema umgestellt:
| v1.x | v2.x |
|---|---|
rc_color_picker (Set) |
ruhrcoder_color_picker |
rc_color_picker_enabled |
ruhrcoder_color_picker_enabled |
| `rc_color_picker_ral | name |
Die Migration Migration1777248000RenameCustomFields läuft beim Plugin-Update automatisch und verschiebt sowohl die Definitionen als auch die JSON-Werte in product.custom_fields und order_line_item.custom_fields. Sie ist idempotent (zweiter Lauf ändert nichts) und forward-only — ein Downgrade auf v1.x wird nicht unterstützt.
# Vor dem Update Backup erstellen
bin/console plugin:update RcColorPicker
bin/console cache:clearMIT