Ich habe gesehen, dass dieses Thema schon diskutiert wurde, habe aber für mich noch nicht die optimale Lösung gefunden:
Scheinbar gibt es ja keine Bestrebungen seitens Shopware (nach einem halben Jahr), diese Konfigurations-Option wieder einzufügen.
Jetzt könnte ich das ganze Twig mit der alten Version überschreiben, was dann aber vermutlich in einem der nächsten Updates mir wieder auf die Füße fällt.
Mir hätte es gereicht, wenn ich in dem Block einfach plz und city tauschen könnte. Jetzt ist aber die vorgegebene Block-Struktur dermaßen bescheiden, dass ich die ganze Logik auch noch mitkopieren muss.
{% block component_address_form_zipcode_city %}
{% set zipcodeField %}
{% set zipcodeValue = formViolations.getInputData()['zipcode'] ?? data.get('zipcode') %}
{% if formViolations.getViolations('/zipcode') is not empty %}
{% set violationPath = '/zipcode' %}
{% elseif formViolations.getViolations("/#{prefix}/zipcode") is not empty %}
{% set violationPath = "/#{prefix}/zipcode" %}
{% else %}
{% set requiredMessage = 'error.VIOLATION::IS_BLANK_ERROR'|trans({ '%field%': 'address.zipcodeLabel'|trans|sw_sanitize }) %}
{% endif %}
{% block component_address_form_zipcode_label %}
<label class="form-label"
for="{{ idPrefix ~ prefix }}AddressZipcode">
{{ 'address.zipcodeLabel'|trans|sw_sanitize }}<span class="d-none" id="zipcodeLabel">{{ 'general.required'|trans|sw_sanitize }}</span>
</label>
{% endblock %}
{% block component_address_form_zipcode_input %}
<input type="text"
class="form-control{% if violationPath %} is-invalid{% endif %}"
autocomplete="{% if prefix == 'shippingAddress' %}shipping {% elseif prefix == 'billingAddress' %}billing {% endif %}postal-code"
id="{{ idPrefix ~ prefix }}AddressZipcode"
placeholder="{{ 'address.zipcodePlaceholder'|trans|striptags }}"
name="{{ prefix }}[zipcode]"
value="{{ zipcodeValue }}"
data-input-name="zipcodeInput"
>
{% endblock %}
{% block component_address_form_zipcode_error %}
{% if violationPath %}
{% sw_include '@Storefront/storefront/utilities/form-violation.html.twig' %}
{% endif %}
{% endblock %}
{% endset %}
{% set cityField %}
{% if formViolations.getViolations('/city') is not empty %}
{% set violationPath = '/city' %}
{% elseif formViolations.getViolations("/#{prefix}/city") is not empty %}
{% set violationPath = "/#{prefix}/city" %}
{% else %}
{% set requiredMessage = 'error.VIOLATION::IS_BLANK_ERROR'|trans({ '%field%': 'address.cityLabel'|trans|sw_sanitize }) %}
{% set violationPath = null %}
{% endif %}
{% block component_address_form_city_label %}
<label class="form-label"
for="{{ idPrefix ~ prefix }}AddressCity">
{{ 'address.cityLabel'|trans|sw_sanitize }}{{ 'general.required'|trans|sw_sanitize }}
</label>
{% endblock %}
{% block component_address_form_city_input %}
<input type="text"
class="form-control{% if violationPath %} is-invalid{% endif %}"
autocomplete="{% if prefix == 'shippingAddress' %}shipping {% elseif prefix == 'billingAddress' %}billing {% endif %}address-level2"
id="{{ idPrefix ~ prefix }}AddressCity"
placeholder="{{ 'address.cityPlaceholder'|trans|striptags }}"
name="{{ prefix }}[city]"
value="{{ data.get('city') }}"
data-form-validation-required
{% if requiredMessage is defined %}data-form-validation-required-message="{{ requiredMessage }}"{% endif %}
required="required">
{% endblock %}
{% block component_address_form_city_error %}
{% if violationPath %}
{% sw_include '@Storefront/storefront/utilities/form-violation.html.twig' %}
{% endif %}
{% endblock %}
{% endset %}
<div class="form-group col-md-4 col-8">
{{ cityField }}
</div>
<div class="form-group col-md-2 col-4">
{{ zipcodeField }}
</div>
{% endblock %}
Warum programmiert SW da in den Block component_address_form_zipcode_city komplette Variablen mit Logik und Zeugs rein? Hätte man nicht die Ausgabe mit den beiden divs in einen eigenen Block packen können, den man dann einfach überschreiben kann?
Wie macht ihr das? Überschreibt ihr wirklich den ganzen Block oder gar die ganze Datei? Habt ihr da keine Angst, dass euch das beim nächsten Update um die Ohren fliegt?
Oder gibt es eine Methode, wie ich die Variable zipcodeField aus dem parent übernehmen kann, wenn ich den Block überschreibe?