Changer option des pays

  • Posts: 2687
  • Thank you received: 71
  • Hikashop Business
1 week 3 days ago #372438

-- HikaShop version -- : 6.5

Bonjour
L'enregistrement dans le sélect des pays les options sont sous cette Forme :

<option value="country_Algeria_3" id="address_country_country_Algeria_3">Algeria (الجزائر)</option>

Comment ne garder que le zone_name que je peux traduire en français >algerie<

Dans quel fichier ?

En attendant et en espérant que une mise à jour, ne va pas les réécrire:
UPDATE fr_hikashop_zone
SET zone_name = ''
WHERE zone_type = 'country';


Merci

Last edit: 1 week 2 days ago by erickb.

Please Log in or Create an account to join the conversation.

  • Posts: 85860
  • Thank you received: 14101
  • MODERATOR
1 week 3 days ago #372439

Bonjour,

Le libellé du pays est construit dans back/classes/field.php (fonction setValues, vers la ligne 978) :

$title = $zone->zone_name_english;
if($zone->zone_name_english != $zone->zone_name && !empty($zone->zone_name)){
    $title .= ' ('.$zone->zone_name.')';
}

HikaShop affiche donc le nom anglais (zone_name_english) et n'ajoute le second nom entre parenthèses que lorsque zone_name est différent. Le "(الجزائر)" ne vient pas de HikaShop : c'est le contenu de votre champ zone_name pour l'Algérie dans la table hikashop_zone (le nom en arabe), alors que zone_name_english vaut "Algeria".

Évitez de modifier ce fichier, il serait écrasé à la prochaine mise à jour. La méthode propre se fait en deux temps :

1) Supprimer le second nom. Dans HikaShop, menu Système > Zones, ouvrez le pays et remettez le champ zone_name identique au nom anglais (ou videz-le). La liste n'affichera alors plus qu'un seul nom (ex. "Algeria"). Ne modifiez pas zone_name_english, il sert en interne (imports, correspondances de pays).

2) Traduire en français. À l'affichage, HikaShop passe chaque libellé par sa fonction de traduction : le libellé "Algeria" correspond à la clé ALGERIA. Créez une surcharge de langue côté site (Extensions > Langues > Surcharges), en français : clé ALGERIA, valeur "Algérie". Le pays s'affichera alors "Algérie". Faites de même pour les autres pays voulus (la clé est le nom anglais en majuscules, espaces remplacés par des underscores, par exemple UNITED_STATES).

The following user(s) said Thank You: erickb

Please Log in or Create an account to join the conversation.

  • Posts: 2687
  • Thank you received: 71
  • Hikashop Business
1 week 3 days ago #372442

la liste n est plus ordonnée car elle est triée sur le name English
États unis arrive en dernier par exemple
Polynésie française arrive après Guyane et avant Allemagne

Il faut trier sur les noms en français

J ai essayé avec zone_ordering avec une table intermédiaire, traduite et dans l'ordre mais ça ne marche pas

UPDATE fr_hikashop_zone h
JOIN aa_zone a
    ON a.zone_id = h.zone_id
SET h.zone_ordering = a.zone_ordering;

Merci

Last edit: 1 week 3 days ago by erickb.

Please Log in or Create an account to join the conversation.

  • Posts: 85860
  • Thank you received: 14101
  • MODERATOR
1 week 2 days ago #372452

Bonjour,

Le tri de la liste des pays est fait dans back/types/country.php :

... ORDER BY a.zone_ordering ASC, a.zone_name_english ASC

zone_ordering est donc bien prioritaire, le nom anglais n'est que le critère de départage. Votre idée est la bonne (la liste du checkout passe par cette même requête), il reste juste à remplir zone_ordering correctement.

Deux raisons pour lesquelles votre UPDATE n'a rien changé :

1) La jointure sur zone_id. zone_id est un auto-incrément propre à chaque base : si aa_zone vient d'une autre installation, ses zone_id ne correspondent pas à ceux de fr_hikashop_zone, et la copie tombe à côté. Faites la jointure sur zone_name_english, qui est stable.

2) Il faut une valeur distincte pour CHAQUE pays. Tout pays resté à 0 (la valeur par défaut) remonte en tête, avant vos pays ordonnés, puisque le tri applique zone_ordering en premier. À vérifier :
SELECT COUNT(*) FROM fr_hikashop_zone WHERE zone_type='country' AND zone_ordering = 0;

Une méthode fiable, en numérotant selon le nom français (adaptez le nom de la colonne française de aa_zone) :
-- 1) numéroter aa_zone dans l'ordre français
SET @i := 0;
UPDATE aa_zone
SET zone_ordering = (@i := @i + 1)
WHERE zone_type = 'country'
ORDER BY nom_francais COLLATE utf8mb4_unicode_ci;

-- 2) recopier vers HikaShop en joignant sur le nom anglais (stable)
UPDATE fr_hikashop_zone h
JOIN aa_zone a ON a.zone_name_english = h.zone_name_english
SET h.zone_ordering = a.zone_ordering
WHERE h.zone_type = 'country';

Le COLLATE (utf8mb4_unicode_ci, ou utf8_unicode_ci selon l'encodage de votre table) fait que "États-Unis" ou "Égypte" se trient bien sous E et non en fin de liste.

Pour votre inquiétude sur les mises à jour : la table des zones n'est remplie qu'à la première installation, les mises à jour ne réécrivent pas ses lignes. Vos zone_name vidés et vos zone_ordering sont donc conservés.

The following user(s) said Thank You: erickb

Please Log in or Create an account to join the conversation.

  • Posts: 2687
  • Thank you received: 71
  • Hikashop Business
1 week 2 days ago #372458

Ça marche
Merci

Une petite option qui serait sympa, ça serait de pouvoir grouper par continent avec optgroup et legend

Last edit: 1 week 2 days ago by erickb.

Please Log in or Create an account to join the conversation.

  • Posts: 85860
  • Thank you received: 14101
  • MODERATOR
1 week 2 days ago #372462

Bonjour,

C'est une bonne idée. Je pense que ça devrait même être par défaut.
Nous allons voir cela...

The following user(s) said Thank You: erickb

Please Log in or Create an account to join the conversation.

Time to create page: 0.060 seconds
Powered by Kunena Forum