# Ort und PLZ tauschen in address-form.html.twig

**URL:** <https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733>\
**Category:** Programmierung\
**Created:** [4. November 2024 um 09:19 UTC](https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733 "2024-11-04T09:19:40Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![runi](https://avatars.discourse-cdn.com/v4/letter/r/f475e1/32.png) [@runi](https://forum.shopware.com/u/runi)\
**Post date:** [4. November 2024 um 09:19 UTC](https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733/1 "2024-11-04T09:19:40Z")

</div>

Ich habe gesehen, dass dieses Thema schon diskutiert wurde, habe aber für mich noch nicht die optimale Lösung gefunden:

> [@Im Registrierungsformular steht Ort vor PLZ](https://forum.shopware.com/t/im-registrierungsformular-steht-ort-vor-plz/103671):
>
> Hallo, seit ein paar Tagen haben wir immer wieder Kunden die bei der Registrierung die Angaben für PLZ und Ort vertauschen. Wie ich jetzt gerade erst gesehen habe, steht im Frontend das Feld Ort vor dem Feld PLZ. Für den Workflow ist das natürlich falsch, weshalb die Kunden wohl auch den Fehler machen. Vermutlich kam diese Änderung mit einem der letzten Updates (wir haben 6.6.0.2 installiert). Im Backend, in den Ländereinstellungen, werden die beiden Felder in der korrekten Reihenfolge angez…

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.

```auto
{% 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?

---

<div class="post-metadata">

**Author:** ![art2media](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/art2media/32/22881_2.png) [@art2media](https://forum.shopware.com/u/art2media)\
**Post date:** [5. November 2024 um 11:52 UTC](https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733/2 "2024-11-05T11:52:15Z")

</div>

Hilft nichts, du musst den kompletten Block kopieren und bei Updates immer brav die Upgrade-Guidelines lesen.

Wir haben schon etliche Templates und Blocks überschrieben, teilweise mit noch absurderem Boilerplate-Code, der wegen Logik-Spaghetti gefälligst in PHP gehört.

Ist halt Shopware, ein deutsches System, das wie die deutsche Politik Dinge lieber unnötig verkompliziert.

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [6. November 2024 um 11:08 UTC](https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733/3 "2024-11-06T11:08:42Z")

</div>

Hallo,

je nachdem, wie „wichtig“ dir ein korrekter tabIndex ist, könnte man das Ganze (beispielsweise für die Registrierung) auch nur über CSS lösen:

```auto
.register-address .row .form-group.col-md-4 {
     order: 3;
}

```

Grüße  
Sebastian

---

<div class="post-metadata">

**Author:** ![runi](https://avatars.discourse-cdn.com/v4/letter/r/f475e1/32.png) [@runi](https://forum.shopware.com/u/runi)\
**Post date:** [18. November 2024 um 12:28 UTC](https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733/4 "2024-11-18T12:28:31Z")

</div>

Danke. Manchmal hilft es auch, wenn man bestätigt bekommt, dass es einfach nicht anders geht 😉

---

<div class="post-metadata">

**Author:** ![runi](https://avatars.discourse-cdn.com/v4/letter/r/f475e1/32.png) [@runi](https://forum.shopware.com/u/runi)\
**Post date:** [18. November 2024 um 12:32 UTC](https://forum.shopware.com/t/ort-und-plz-tauschen-in-address-form-html-twig/105733/5 "2024-11-18T12:32:53Z")

</div>

Danke für die Idee. Das wäre vielleicht auch ein Ansatz.
