Sortierung der Ländernamen (Dirty, aber klappt)

Thema wurde von Oli (realsmoke.de), 19. April 2014 erstellt.

  1. Oli (realsmoke.de)

    Oli (realsmoke.de) Erfahrener Benutzer

    Registriert seit:
    4. März 2014
    Beiträge:
    112
    Danke erhalten:
    19
    Danke vergeben:
    6
    #1 Oli (realsmoke.de), 19. April 2014
    Zuletzt bearbeitet: 20. April 2014
    Hallo,

    Wir versenden in die gesamte EU wobei der Hauptteil der Kunden aus DACH kommt. Daher wollten wir das in der Länderauswahl in der Kundenregistrierung und in der Versandkostenberechnung eben DE, AT und CH als erstes erscheinen.

    Blöderweise sortiert Gambio ja nur nach Ländernamen und hat keine Funktion einer Sortierung der Länderreihenfolge. :mad:

    Unsere Lösung ist zwar nicht ganz die feine Art (weil nicht updatesicher und keine Bearbeitung über das Backend) aber sie funktioniert wenigstens.

    Was haben wir gemacht?


    1) In der Datenbank in der Tabelle countries eine weitere Spalte angelegt
    Code:
    ALTER TABLE `countries` ADD `countries_sort` INT(2) NOT NULL DEFAULT '99' ;
    2) Die Datei inc/xtc_get_countries.inc.php wie folgt umgeschrieben
    PHP:
    <?php
    /* --------------------------------------------------------------
       xtc_get_countries.inc.php 2013-07-08 gm
       Gambio GmbH
       http://www.gambio.de
       Copyright (c) 2013 Gambio GmbH
       Released under the GNU General Public License (Version 2)
       [http://www.gnu.org/licenses/gpl-2.0.html]
       --------------------------------------------------------------
     
     


       http://www.xtc-webservice.de
       info@xtc-webservice.de
       -----------------------------------------------------------------------------------------
       based on: 
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(general.php,v 1.225 2003/05/29); www.oscommerce.com 
       (c) 2003     nextcommerce (xtc_get_countries.inc.php,v 1.3 2003/08/13); www.nextcommerce.org
       (c) 2003 XT-Commerce - community made shopping http://www.xt-commerce.com ($Id: xtc_get_countries.inc.php 899 2005-04-29 02:40:57Z hhgag $)

       Released under the GNU General Public License 
       ---------------------------------------------------------------------------------------*/

    function xtc_get_countriesList($countries_id ''$with_iso_codes false$only_active true)
    {
        
    $countries_array = array();
        if (
    xtc_not_null($countries_id))
        {
            if (
    $with_iso_codes == true)
            {
                
    $countries xtc_db_query("select countries_name, countries_iso_code_2, countries_iso_code_3 from " TABLE_COUNTRIES " where countries_id = '" . (int)$countries_id "'" . ($only_active " and status = '1'" "") . " order by countries_name");
                
    $countries_values xtc_db_fetch_array($countries);
                
    $countries_array = array('countries_name' => $countries_values['countries_name'],
                                         
    'countries_iso_code_2' => $countries_values['countries_iso_code_2'],
                                         
    'countries_iso_code_3' => $countries_values['countries_iso_code_3']);
            }
            else
            {
                
    $countries xtc_db_query("select countries_name from " TABLE_COUNTRIES " where countries_id = '" . (int)$countries_id "'" . ($only_active " and status = '1'" ""));
                
    $countries_values xtc_db_fetch_array($countries);
                
    $countries_array = array('countries_name' => $countries_values['countries_name']);
            }
        }
        else
        {
            if(
    $with_iso_codes == true)
            {
                
    $countries xtc_db_query("select countries_id, countries_name, countries_iso_code_2, countries_iso_code_3 from " TABLE_COUNTRIES . ($only_active " where status = '1'" "") . " order by countries_name");
                while (
    $countries_values xtc_db_fetch_array($countries))
                {
                    
    $countries_array[] = array('countries_id' => $countries_values['countries_id'],
                                                
    'countries_name' => $countries_values['countries_name'],
                                                
    'countries_iso_code_2' => $countries_values['countries_iso_code_2'],
                                                
    'countries_iso_code_3' => $countries_values['countries_iso_code_3']);
                }
            }
            else
            {
                
    $countries xtc_db_query("select countries_id, countries_name, countries_sort from " TABLE_COUNTRIES . ($only_active " where status = '1'" "") . " order by countries_sort, countries_name");
                while (
    $countries_values xtc_db_fetch_array($countries))
                {
                    
    $countries_array[] = array('countries_id' => $countries_values['countries_id'],
                                               
    'countries_name' => $countries_values['countries_name']);
                }
            }
        }

        return 
    $countries_array;
    }
    ?>
    Nun kann man in der DB im Feld countries_sort die Reihenfolge der Länder entsprechend seinen Vorstellungen anpassen. Alle Länder die keinen Wert erhalten werden dann wie gewohnt nach Namen sortiert.

    In unserem Fall haben wir DE auf 1, AT auf 2 und CH auf 3 gesetzt. Alle anderen bleiben auf 99. Jetzt wird bei uns in den Dropdowns entsprechen die Reihenfolge DE, AT, CH und dann der Rest alphabetisch angezeigt.

    So sieht das ganze dann im Frontend aus..

    laendersortierung.jpg

    LG
    Oli
     
  2. Lightrider

    Lightrider Mitglied

    Registriert seit:
    18. April 2012
    Beiträge:
    5
    Danke erhalten:
    0
    Danke vergeben:
    2
    #2 Lightrider, 12. Mai 2015
    Zuletzt bearbeitet: 12. Mai 2015
    Hallo Oli,

    Danke für diesen Ansatz! Haben ihn nun ebenfalls bei uns umgesetzt. Allerdings ist bei uns Deutschland nicht auf 1 ("Bitte wählen" ist 1), wird aber dennoch standardmäßig vorselektiert. Weißt Du, wo ich dies ändern kann?

    Besten Dank & viele Grüße
    Jonas

    edit:
    Wenn ich
    Code:
    {if $country_data.countries_id == $form_data.country.value} selected="selected"{/if} 
    in der create_account(_guest).html entferne, wird zwar standardmäßig der erste Eintrag genommen, allerdings funktioniert die Affenformular-Logik dann nicht mehr richtig. Es wird dann bei jeder Prüfung erneut der erste Eintrag gesetzt anstatt das bereits ausgewählte Land beizubehalten.
     
  3. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.771
    Danke erhalten:
    939
    Danke vergeben:
    302
    Hat einer eine Lösung für die sprachlich korrekte Darstellung der Ländernamen?
    Ich hätte die Liste gerne auf deutsch, englisch und französisch dargestellt, je nach Auswahl der Shopsprache.