Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MultiDomain same server same Thelia #2381

Closed
wants to merge 4 commits into from
Closed

Conversation

zzuutt
Copy link
Contributor

@zzuutt zzuutt commented Apr 29, 2017

If you configure Thelia in multi-language multi-domain but its domains
are on the same server, same resource Thelia, the translation of the url
is not done.
This PR allows to select the domains that are on the same server as the
default language to perform the translation
2017-04-29_11-42-56

I add 'same_server' column in url table
en espérant ne pas avoir oublié de fichier :)

If you configure Thelia in multi-language multi-domain but its domains
are on the same server, same resource Thelia, the translation of the url
is not done.
This PR allows to select the domains that are on the same server as the
default language to perform the translation
add same_server param in the loop Lang
@roadster31
Copy link
Contributor

Je ne comprends pas cette PR. À part ajouter un champ à la table lang, ellle a quel objectif ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 3, 2017

Si tu utilises Thelia en multilangue multidomaine sur le même serveur, même ressource, la traduction des url ne se fait pas
exemple :
www.domaine.fr langue fr
www.domaine.com langue en
pour la page: http://www.domaine.fr/mapage
l'url pour la langue en est http://www.domaine.fr/mapage?lang=en_US
le visiteur est renvoyé vers http://www.domaine.com vu que la langue n'est pas sur le même domaine

avec cette PR la traduction se fait et le visiteur part sur la page traduite

PS: merci j'avais oublié le fichier principal !

@zzuutt
Copy link
Contributor Author

zzuutt commented May 4, 2017

Ajout de la redirection si la demande est pour la home page
sinon traduction

Après plusieurs tests tout à l'air bon maintenant.

@roadster31
Copy link
Contributor

Les tests (Travis...) ne passent pas.

@zzuutt
Copy link
Contributor Author

zzuutt commented May 11, 2017

l'erreur vient de l'activation du module colissimo
il fait une requête sur la table Lang avec le nouveau champ SAME_SERVER
Mais si le nouveau champ n'a pas été rajouté avant

+ALTER TABLE `lang` ADD `same_server` TINYINT(1) NULL DEFAULT '0' AFTER `url`;

l'erreur est normale.
le rajout je l'ai mis dans setup/update/sql/2.4.0-alpha1.sql
Comment faire en sorte que ALTER.... soit pris en compte ?

@roadster31
Copy link
Contributor

En fait, je ne suis pas sûr de comprendre le problème résolu par ta PR. Tu peux me l'expliquer en français ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 15, 2017

Je vais essayer de l'expliquer :)
Le problème que j'ai rencontré.
J'utilise Thelia en multi domaine / multi langue sur le même serveur.
De base, lorsque l'on change de langue sur la page d'un produit, on est renvoyé sur la page d’accueil de la langue choisi. La traduction ne se fait pas.
Cette PR permet d'indiquer les langues se trouvant sur le même serveur que la langue par défaut et ainsi permettre de réaliser la traduction.

Si on est sur la page FR du produit 1 et que l'on change de langue EN. Grace a cette PR on est renvoyé sur la page EN du produit 1

je ne sais pas si j'ai été clair.

@roadster31
Copy link
Contributor

Tu as été clair, merci pour les précisions. As-tu pu déterminer pourquoi dans ces conditions (multi domaine / multi langue sur le même serveur), le basculement vers la langue ne se fait pas ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 16, 2017

dans le fichier core/lib/Thelia/Core/Stack/ParamInitMiddleware.php
vers la ligne 132

// if each lang has its own domain, we redirect the user to the proper one.
             if (ConfigQuery::isMultiDomainActivated()) {
                 $domainUrl = $lang->getUrl();

                if (! empty($domainUrl)) {
                    // if lang domain is different from current domain, redirect to the proper one
                    if (rtrim($domainUrl, "/") != $request->getSchemeAndHttpHost()) {
                        // TODO : search if http status 302 is the good one.
                        return new RedirectResponse($domainUrl, 302);
                    } else {
                        //the user is currently on the proper domain, nothing to change

Si on est en multidomain, on recupère l'url et s'il est different du domain actuel on redirige dessus

Ma PR rajoute un champ SameServer

// if each lang has its own domain, we redirect the user to the proper one.
             if (ConfigQuery::isMultiDomainActivated()) {
                 $domainUrl = $lang->getUrl();
                $sameServer = $lang->getSameServer();

                if(null === $sameServer) {
                   if (! empty($domainUrl)) {
......
                   }
                return null;
               }

Si le champ SameServer est true, j'indique a Thelia que l'on est sur le même domaine en retournant null
la traduction se fait alors

@roadster31
Copy link
Contributor

roadster31 commented May 16, 2017

Du coup, ne vaudrait-il pas mieux rechercher pourquoi rtrim($domainUrl, "/") != $request->getSchemeAndHttpHost() n'est pas vérifié quand plusieurs domaines sont hébergés sur la même machine ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 16, 2017

Fonctionnement standard de Thelia
(multi domaine / multi langue sur le même serveur)
exemple:
le nom de domaine par defaut est www.domaine.fr langue 'fr'
nom de domaine pour la langue 'en' est www.otherdomaine.com

le visiteur est sur la page http://www.domaine.fr/produit1
il change de langue pour 'en'
$domainUrl = 'http://www.otherdomaine.com'
rtrim($domainUrl, "/") = 'http://www.otherdomaine.com'
la requete se faisant de l'url 'http://www.domaine.fr/produit1&lang=en_US'
$request->getSchemeAndHttpHost() va retourné 'http://www.domaine.fr'
'http://www.otherdomaine.com' est différent de 'http://www.domaine.fr'
donc on redirige sur $domainUrl

l'idéal serait que pour la page 'http://www.domaine.fr/produit1'
{url path="{navigate to="current"}" lang={$LOCALE}}
renvoie pour la langue 'en'
'http://www.otherdomaine.com/product1
au lieu de 'http://www.domaine.fr/produit1&lang=en_US'
mais là je suis encore entrain de décortiquer Thelia et je ne trouve pas

@roadster31
Copy link
Contributor

Ok donc le problème se situe juste au niveau de la génération des URL dans les templates ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 16, 2017

oui et non

dans mon cas, j'utilise les langues pour renvoyer le visiteurs vers d'autres sites qui ne sont pas sur mon serveur. C'est pour cela que j'ai rajouter le champ SAME_SERVER.
Pour les domaines étant sur le serveur par defaut il faudrait faire la traduction, pour les autres non.

il faudrait que la génération des URL dans les templates en prenne compte.

@roadster31
Copy link
Contributor

OK, donc c'est un besoin spécifique à ta boutique, il n'y a pas de bug Thelia à corriger ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 16, 2017

si il y a un bug !
la traduction ne se fait pas si on est en multidomaine / multilangue sur le même serveur Thelia
Pour le reste je m'en débrouillerai

@roadster31
Copy link
Contributor

roadster31 commented May 16, 2017

Je lis et relis ce que tu a expliqué, et je ne vois pas de problème :

le visiteur est sur la page http://www.domaine.fr/produit1
il change de langue pour 'en'
$domainUrl = 'http://www.otherdomaine.com'
rtrim($domainUrl, "/") = 'http://www.otherdomaine.com'
la requete se faisant de l'url 'http://www.domaine.fr/produit1&lang=en_US'
$request->getSchemeAndHttpHost() va retourné 'http://www.domaine.fr'
'http://www.otherdomaine.com' est différent de 'http://www.domaine.fr'
donc on redirige sur $domainUrl

Donc on redirige sur http://www.otherdomaine.com (puisque $domainUrl = 'http://www.otherdomaine.com'), qui est l'adresse de la version 'en' de la boutique.

C'est bien ce qu'on veut, non ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 16, 2017

non cela correspond au fonctionnement standard de Thelia voir le debut de la ou tu as copié

on veut que le client qui est sur la page 'http://www.domaine.fr/produit1' et
qui demande la version 'en' soit redirigé sur 'http://www.otherdomaine.com/product1'

vu que l'on est sur le même serveur Thelia

@zzuutt
Copy link
Contributor Author

zzuutt commented May 16, 2017

j'ai appliqué la PR sur mon serveur
Comme tu pourras voir si tu es sur une page d'un produit fr et que tu demandes la langue en ou es
tu seras redirigé vers la page du même produit dans la langue demandée

@roadster31
Copy link
Contributor

roadster31 commented May 16, 2017

  1. Qu'est-ce que tu veux dire par "même serveur" ?

  2. C'est quoi ce qui ne te va pas le dans fonctionnement standard de Thelia ? C'est ce que je n'arrive pas à comprendre.

@zzuutt
Copy link
Contributor Author

zzuutt commented May 17, 2017

ok je vais essayer d'expliquer
par "même serveur" je veux dire que les différents domaines partagent, pointent le même Thelia, même ressources, même site.

## Thelia actuellement v2.3.3 gère : (avec rewriting_enable = 1)

1. un site multilangue avec un seul nom de domaine

  • Le visiteur qui est sur la page d'un produit, peut visualiser cette même page sur les différentes langues proposées

2. un site multilangue, multidomaine

  • Le visiteur qui sur la page d'un produit lorsqu'il change de langue, est redirigé sur la page d'accueil de la langue demandée
    • page du produit en 'fr' : http://www.domaine_fr.com/produit-1
    • le visiteur change de langue pour 'en'
    • il est redirigé sur la page d'accueil du domaine de la langue 'en' : http://www.domaine_en.com
    • la traduction ne se fait pas
      Thelia considère que les domaines sont intallés sur différents serveurs, ressources.....

## Avec ce PR
Je rajoute une option 'SAME_SERVER'
En cochant cette case, on indique a Thelia que les différents domaines (qui ont cette option active) partagent le même serveur, les mêmes ressources, le même Thelia.

1. un site multilangue avec un seul nom de domaine

  • Le visiteur qui est sur la page d'un produit, peut visualiser cette même page sur les différentes langues proposées
    • Rien ne change, la traduction s'effectue bien

2. un site multilangue, multidomaine (SAME_SERVER = false)

  • Le visiteur qui sur la page d'un produit lorsqu'il change de langue, est redirigé sur la page d'accueil de la langue demandée
    • page du produit en 'fr' : http://www.domaine_fr.com/produit-1
    • le visiteur change de langue pour 'en'
    • le domaine a 'SAME_SERVER' = false
    • il est redirigé sur la page d'accueil du domaine de la langue 'en' : http://www.domaine_en.com
    • la traduction ne se fait pas
      Thelia considère que les domaines sont intallés sur différents serveurs, ressources.....

3. un site multilangue, multidomaine (SAME_SERVER = true)

  • Le visiteur qui est sur la page d'un produit, peut visualiser cette même page sur les différentes langues proposées
    • page du produit en 'fr' : http://www.domaine_fr.com/produit-1
    • le visiteur change de langue pour 'en'
    • le domaine a 'SAME_SERVER' = true
    • il est redirigé sur la page du produit de la langue 'en' : http://www.domaine_en.com/product-1
    • la traduction s'effectue bien

@roadster31
Copy link
Contributor

roadster31 commented May 17, 2017

OK, merci d'avoir pris le temp de bien expliquer, je crois que je comprends.

Je synthétise. Ce qui te pose problème c'est que :

  1. L'utilisateur soit redirigé vers l'index du site 'en' au lieu de la version 'en' de la page actuelle.
  2. Thelia ne force pas la locale 'en' lors de la redirection vers le site 'en'.
  3. l'URL générée en front pour changer de langue n'est pas l'URL de la page courante du site 'en'

J'ai bien compris cette fois ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 17, 2017

OUI c'est bien ça :)
ça pose problème à tous ceux qui sont dans le même cas
multidomaine multilangue sur le même Thelia

@roadster31
Copy link
Contributor

roadster31 commented May 17, 2017

Je suppose qu'on peut régler tout ça sans qu'il soit nécessaire d'ajouter un paramètre à la configuration des langues.

En effet, dans tous les cas, qu'on soit sur même serveur ou non, il faut rediriger vers la page courante et non pas vers l'index, et il faut afficher la boutique dans la langue désirée.
De même pour le point 3, il faut que la ré-écriture tienne compte de la configuration des langues.

Je pense qu'il faudrait plutôt intervenir sur ces points là.

Qu'en penses-tu ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 18, 2017

Ok je comprends
si on arrive pas à traduire l'adresse pour la page demandée, on renvoie sur la page d'accueil de la nouvelle langue
il faut dans ce cas regarder sur la partie template ?
{url path="{navigate to="current"}" lang={$LOCALE}}

@roadster31
Copy link
Contributor

Oui, ça me semble une bonne idée, ça résoudrait le problème de manière assez simple, qu'en penses-tu ?

@zzuutt
Copy link
Contributor Author

zzuutt commented May 19, 2017

je vais essayer d'aller dans ce sens
pour le moment je cherche ou est fait la traduction de l'url, je ne trouve pas

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants