THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour à tous et meilleurs voeux pour cette nouvelle année 2024 !!!

Un de mes clients souhaite s'internationaliser et donc traduire son site dans d'autres langues que le french : ça, OK, je gère :-)

Par contre, il souhaiterait que ce site, dans les autres langues, ne soit qu'un site vitrine, sans possibilité de commande. Et c'est là que ça se complique, car il faudrait inhiber certaines fonctionnalités suivant la langue (tunnel de la commande, ses catégories de produits, les liens de création de compte, connexion, ...)

Auriez-vous une idée à me suggérer SVP ?

Merci de votre aide.

Offline


Bonjour et bonne année !

Je te suggère de faire un template spécifique, qui hérite de ton template "e-commerce", et dans lequel tu vas supprimer ce que tu ne veux pas faire apparaitre.

Ensuite, installer le module TemplateSwitcher : https://github.com/roadster31/TemplateSwitcher . Tu disposeras alors d'un moyen de basculer d'un template à l'autre, soit avec une URL, soit avec un évènement. Je vois alors deux solutions différentes.

1. Tu bricoles les URLs de changement de langue, pour que lorsuqi'on change de langue, on bascule sur le "bon" template. Exemple :

fr => http://tonsite.com/ts/nom_de_ton_templa … lang=fr_FR
en => http://tonsite.com/ts/nom_de_ton_templa … lang=en_US
es => http://tonsite.com/ts/nom_de_ton_templa … lang=es_ES
etc.

Ainsi, en même temps que tu change de langue, tu change de template.

Autre stratégie, beaucoup plus sûre, écrire un petit bout de module qui met en place le bon template en fonction de la langue courante. Tu peux faire ça dans un RequestListener, exemple (attention, code non testé) :

<?php

namespace MonModule\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use TemplateSwitcher\Events\TemplateSwitcherEvent;
use Thelia\Core\Template\TemplateDefinition;

class RequestListener implements EventSubscriberInterface
{

    public function checkTemplateSwitch(RequestEvent $event): void
    {
        /** @var \Thelia\Core\HttpFoundation\Session\Session $session */
        $session = $event->getRequest()->getSession();

        $locale = $session->getLang()->gertLocale();

        if ($locale === 'fr_FR') {
            $templateName = 'nom_de_ton_template_ecommerce';
        } else {
            $templateName = 'nom_de_ton_template_vitrine';
        }

        $event = (new TemplateSwitcherEvent($templateName))
            ->setTemplateType(TemplateDefinition::FRONT_OFFICE);

        $this->eventDispatcher->dispatch(
            TemplateSwitcherEvent::SWITCH_TEMPLATE_EVENT,
            $event
        );
    }
    
    /**
     * {@inheritdoc}
     * api.
     */
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::REQUEST => ['checkTemplateSwitch', 100],
        ];
    }
}

OpenStudio Toulouse

Offline


Merci beaucoup Franck de ta réponse, je viens de dupliquer le template et je commence le dev du module :-)

Last edited by Triumph31 (09-01-2024 11:43:18)