Jump to content

[Astuce] Boutiques multiples sur même serveur


Recommended Posts

Petit partage d'expérience (n'ayant pas trouvé ce genre de problème et de solution sur le forum):

Nous avons développé un site de e-commerce avec plusieurs interfaces se connectant à la même base.
Pour chaque interface nous avons une instance de prestashop avec un thème différent. Contrainte: toutes les interfaces sont sur le même serveur.

Dûs à des problèmes de connexion/déconnexion mal gérés, nous avons dû donner un nom différent aux cookies des différents sites; remplacement de tous les appels à "new Cookie('ps')" dans tous les scripts concernés:

Remplacement:

– "new Cookie('ps')"

Par
– "new Cookie('ps1')" pour la première boutique
– "new Cookie('ps2')" pour la deuxième boutique
etc...

Je suppose que ce type de solution s'applique quand plusieurs boutiques doivent être installés sur un même serveur...
J'ai déposé une "request feature" pour que le nom du cookie soit géré dans settings.inc.php

Link to comment
Share on other sites

Merci jplt,

Je suis également intéressé par connecter plusieurs interfaces à une même base.
N'étant pas très affuté en développement, pourrais-tu expliquer plus précisément la marche à suivre... pas à pas si possible ! ;-)
N'hésites pas à me contacter en PM.

D'avance merci.

Link to comment
Share on other sites

Voici la démarche effectuée pour l'installation de 3 prestashop attaquant la même base:

- Création de 3 sous-domaines dans mon hébergement. Les 3 sites sont au même niveau d'arborescence afin d'éviter les éventuels problèmes d'include (car j'ai eu besoin de créer des liens symboliques).
- Installation de prestashop sur l'une des arborescences que l'on appelera "reference"
- Une fois prestashop installé sur "reference", recopier tout le dossier contenant le système prestashop dans les 2 autres arborescences en effaçant le répertoire d'administration (qui ne sera présent que sur le site de référence)
- Même si mes 3 sites sont dans un répertoire différent, comme ils sont dans des sous-domaines j'ai dans le fichier settings.inc.php la config suivante: define('__PS_BASE_URI__', '/'); En fait mes 3 fichiers settings.inc.php sont les mêmes !
- Faire une recherche de tous les fichiers contenant new Cookie('ps') et remplacer 'ps' par un nom spécifique à chaque site, par exemple 'ps1' pour le premier, 'ps2' pour le deuxième, etc...
Sous Unix, par exemple, faire

find . * | xargs grep "new Cookie"


- Même si les 3 sites sont différents, les images des produits gérés en backoffice seront forcément les mêmes. J'ai donc créé un lien symbolique des répertoires "c", "p", "m" et "s" présents dans le répertoire "img" vers mon site de référence:

ln -s ../../reference/img/c


- Adaptation des fichiers template de chaque site pour un affichage différencié

Link to comment
Share on other sites

Merci beaucoup mais personnellement je n'ai pas compris la partie avec le code sous Unix et le lien symbolique. Où dois-je saisir le code ?

Si je crée des domaines différents dans le même hébergement et au même niveau d'arborescence bien sûr, est-ce que la démarche est la même ? Ne doit-on pas dans le fichier setting.inc.php mettre define(’PS_BASE_URI‘, ‘/nomdurepertoire’); plutôt que define(’PS_BASE_URI‘, ‘/’); ?

Pour les images, peux-tu me dire où je dois taper le code ?

D'avance merci pour ton aide

Link to comment
Share on other sites

Concernant le paramètre dans settings.inc.php tu as raison. De toute façon il suffit de faire le test pour vérifier que ta configuration est la bonne. Moi j'ai laissé "/" mis car c'est ce qui correspondait à mon environnement.

Concernant les liens symboliques il s'agit d'une astuce pour ne pas avoir à effectuer de manipulations suite à la création d'un produit. En effet prestashop créé des images dans différents répertoires sous "img" chaque fois que tu en rajoutes dans le catalogue. Celles-ci sont du genre "50-264-home.jpg" ou "50-264-large.jpg". Le problème est que si tu as plusieurs prestashop, tous les liens vers les images seront les mêmes dans tes pages publiques. Tu verras normalement les images dans ton site "référence" car le lien ira ver "img/p/50-264-large.jpg" et cette image existera bien mais dans ton deuxième site tu auras le même lien sans que l'image existe car prestashop ne l'aura pas créée.

Trois solutions alors (peut-être davantage):
1- recopier régulièrement le contenu des différents répertoires images dans le 2ème et 3ème site. Pas très pratique...
2- changer les codes dans les templates du 2ème et 3ème site pour aller chercher les images sur le site "reference" (changer tous les codes "{$img_ps_dir}" pour quelque chose du genre "http://www.reference.com"). En faisant ça on casse un peu la mécanique prestashop...
3- faire des liens symboliques comme je l'ai fait. Pour ça il faut avoir accés à ton hébergement en mode "ligne de commande" et connaître un peu Unix.

Link to comment
Share on other sites

N'ayant aucune connaissance Unix, j'opterais pour la 2ème solution.

Pour éviter d'avoir à modifier les chemins vers les images dans tous les templates, je pensais plutôt modifier les define("_PS_XX_IMG_DIR","http://www.reference.com/img/xx"); dans le fichier config.inc.php de chacun des sites.

Qu'en penses-tu ? Est-ce que cela poserait un problème ?

Link to comment
Share on other sites

Je n'avais pas pensé à cette option mais en effectuant quelques tests je me suis rendu compte que ça posait certains problèmes en cas d'url rewriting (comme c'est le cas dans notre environnement). Je pense que ta solution doit marcher dans un environnement sans url rewriting, il faut tester...

Il y une 4ème solution, celle de configurer le .htaccess des sites secondaires pour que le serveur Apache aille chercher l'image au bon endroit. Voici un extrait issu de la configuration du .htaccess de notre deuxième site par exemple:

RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$  /reference/img/p/$1-$2$3.jpg [L,E]



Tout ceci requiert bien évidemment quelques tests pour coller à ton environnement...

Link to comment
Share on other sites

  • 1 month later...

Bonjour jplt

génial ton astuce

mais pour moi, j'ai besoin que le panier soit le meme qu'elle que soit le site visité. donc, le client peut rajouter des objets du site 1, 2 et 3 au même panier et tout retrouvé sur un seul espace client.

si ton système gère cela, alors c'est super..

donc, ça le fais ou pas?

Link to comment
Share on other sites

Si tu veux que ton client ait le même panier quel que soit le site, ma solution va à l'encontre de ce que tu veux faire en fait.

Mais pour répondre à ta question, j'ai fait quelques tests et il est possible de faire ce que tu veux (sous contrôle des experts PS qui pourraient nous lire) en effectuant les actions suivantes:

- tes différents sites doivent être sur le même serveur.
- ne pas modifier les "new Cookie('ps')" originaux.
- modifier la fonction "__construct()" dans le fichier classes/Cookie.php en faisant en sorte que l'initialisation du path soit le même sur tes différents sites. A titre d'exemple j'ai mis "$this->_path = '/'" sur mes différents sites pour les tests.

Link to comment
Share on other sites

merci jplt

meme si j'ai pas tout saisi. et pour les produits? il n'y aura pas un probleme si j'en rajoute sur un, il va apparaitre sur le deuxieme site non?

chez moi les 2 boutiques ont un catalogue différent http://fnac.com on peut acheter soit dans la boutique soit en téléchargement qui remplit le meme panier mais au moment du paiement on choisi quel paniers produits payés.

je suis dans le meme cas, une boutique de DVD matériel et une plateforme de téléchargement. je veux surtout eviter une double inscription et si la gestion du meme panier suit et de l'espace client est la meme yes

des idées?

Link to comment
Share on other sites

Si je ne me trompe pas Prestashop ne fait pas encore de multi-boutiques et nativement tu ne pourras pas éviter de faire apparaître tes produits sur les 2 sites, même si tu as une seule inscription et un seul panier.

Si tu veux pouvoir afficher 2 catalogues différents sur 2 sites différents il faudra rentrer un peu dans le code et mettre un marqueur sur les catégories indiquant le site auquel elles sont rattachées. Ensuite il faudra modifier un peu les fonctions de récupération des catégories pour que chaque site ramène les siennes et pas les autres.

C'est juste une idée. Je n'ai fait aucun test mais ça me semble possible...

Link to comment
Share on other sites

Bonjour Jplt

j'ai créé 3 boutiques différents qui pointe sur la meme BDD. j'ai gardé les admins de chaque boutique actifs.
malgré que j'ai utilisé les memes donnés cookie_key et cookie _IV, d'un theme a l'autre les paniers ne sont pas pris en compte et lorsque je me connecte sur une boutique je le suis pas sur les autres.

j'utilise de sous domaines mais créé directement à partir du plesk donc j'ai des liens FTP différents mais je suis sur le meme serveur dédié.

sur le cookie.php, quels est la ligne que je dois changer?

Sinon, ça te dirais une petite prestation sur ce point?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...