Modify ↓
#1550 closed Bug/Fehler (fixed)
check_country_required_zones() gibt true als Standard aus
| Reported by: | Owned by: | Gerhard Waldemair | |
|---|---|---|---|
| Priority: | normal | Milestone: | modified-shop-2.0.5.0 |
| Component: | Shop | Version: | 2.0.4.2 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
Die Funktion check_country_required_zones() gibt als Standard den Wert true zurück. Nur wenn für das jeweilige Land Bundesländer hinterlegt sind, diese aber nicht angezeigt werden (c.required_zones), wird 0 zurückgegeben.
In Shops die nicht den AJAX States Updater nutzen, wird dadurch das Bundesland-Feld auch für Länder ohne Bundesländer angezeigt. Im Demoshop ist es nur über den Quelltext sichtbar, da der States Updater das Bundesland Feld durch ein hidden field ersetzt.
Schritte zur Nachstellung:
- Konfiguration > Kunden Details > Bundesland = Ja
- Konfiguration > Mein Shop > Land = Afhanistan (oder ein anderes ohne Bundesländer)
- Mein Konto > Adressbuch bearbeiten > Neue Anschrift
- Quelltext ansehen (STRG + U)
Vorschlag zur Korrektur:
/inc/check_country_required_zones.inc.php
Suchen nach:
return true;
Ersetzen mit:
return false;
Attachments (0)
Change History (5)
comment:1 by , 7 years ago
| Milestone: | → modified-shop-2.0.5.0 |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
comment:2 by , 7 years ago
Note:
See TracTickets
for help on using tickets.

Nachtrag zum Aufbau der Funktion:
Zuerst wird geprüft, ob für das Land Bundesländer hinterlegt sind. Nur falls ja, wird geprüft, ob diese auch angegeben werden müssen (c.required_zones). So ist es unmöglich ein Bundesland abzufragen, wenn für das Land keine Bundesländer hinterlegt sind.
Bei der Formularprüfung in create_account.php, etc... wird aber immer die Mindestlänge geprüft, falls für das Land keine Bundesländer hinterlegt sind.
if ($entry_state_has_zones == true) { $zone_query = xtc_db_query("SELECT DISTINCT zone_id FROM ".TABLE_ZONES." WHERE zone_country_id = '".(int)$country ."' AND (zone_id = '" . (int)$state . "' OR zone_code = '" . xtc_db_input($state) . "' OR zone_name LIKE '" . xtc_db_input($state) . "%' )"); if (xtc_db_num_rows($zone_query) == 1) { $zone = xtc_db_fetch_array($zone_query); $zone_id = $zone['zone_id']; $state = ''; } else { $error = true; $messageStack->add('create_account', ENTRY_STATE_ERROR_SELECT); } } else { if (strlen($state) < ENTRY_STATE_MIN_LENGTH) { $error = true; $messageStack->add('create_account', ENTRY_STATE_ERROR); } }Des Weiteren wird das Feld zur Eingabe nur angezeigt, wenn $required_zones = true ist. Andernfalls wird ein hidden field erzeugt.
$state_input = xtc_draw_input_fieldNote(array ('name' => 'state', 'text' => ' '. (xtc_not_null(ENTRY_STATE_TEXT) ? '<span class="inputRequirement">'.ENTRY_STATE_TEXT.'</span>' : ''))); if (!$required_zones) { $state_input = '<input type="hidden" value="0" name="state">'; $smarty->assign('display_state', ' style="display:none"'); }Ich nehme an, dass es so gedacht war, dass man mittels c.required_zones festlegen kann, ob für ein Land die Angabe eines Bundeslandes Pflicht ist. Wenn dem so ist, sollte in der Funktion check_country_required_zones() nur c.required_zones geprüft werden, nicht jedoch, ob Bundesländer hinterlegt sind.