Поддомены в качестве городов



  • Здравствуйте, возможно ли настроить shopker для работы на поддоменах для каждого города: msk.site.ru spb.site.ru но чтобы при этом карточка товара была только одна (без дублирования на каждый город)?



  • Здравствуйте. Мультидоменность у Shopker (точнее Symfony) есть. К примеру можно создать несколько сайтов, которые будут использовать один PHP-код, но разные шаблоны и базы данных.

    Но в данном случае не совсем понятно. По описанию похоже, что у Вас одинаковый контент для разных доменов. Проблем в этом не вижу, это возможно для любого сайта и движка. Или Вы хотите выводить списки товаров с фильтрацией по городу в зависимости от домена? Есть Twig-функция "contentList" https://shopker.org/documentation/content-display там есть возможность фильтрации по полям. В любом случае это не сложно реализовать, с более подробным описанием я бы смог помочь.



  • admin, спасибо за ответ!
    Подробнее суть задачи:
    Сайт с товарами для основного города Москва site.ru
    Нужно сделать поддомен spb.site.ru как копию site.ru, но чтобы в шаблоне менялись контакты, адреса, телефон в шапке и в футере. На страницах категорий товаров и самих товаров все что касается Москвы менялось бы на Санкт-Петербург.

    На примере тега <h1> на странице товара "Слон белый с доставкой по Москве" заменялось бы на "Слон белый с доставкой по Санк-Петербургу".
    Кроме <h1> естественно много где еще чтобы информация локализовалась под конкретный город поддомена.
    Но фактически, чтобы была всего одна карточка товара, чтобы поменял цену в ней, и она изменилась для всех городов.



  • В шаблоне Вы можете делать так:

    {% if app.request.getHttpHost() == 'spb.site.ru' %}
        по Санкт-Петербургу
    {% else %}
        по Москве
    {% endif %}
    

    Другой более удобный вариант это создать глобальные переменные в шаблонах. Для этого нужно положить в папку "src/App/EventSubscriber/" файл "CustomTwigFieldsSubscriber.php" с примерно таким содержанием:

    <?php
    
    namespace App\EventSubscriber;
    
    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Symfony\Component\HttpKernel\Event\RequestEvent;
    use Symfony\Component\HttpKernel\KernelEvents;
    
    class CustomTwigFieldsSubscriber implements EventSubscriberInterface
    {
        protected $container;
    
        public function __construct(ContainerInterface $container)
        {
            $this->container = $container;
        }
    
        public function onKernelRequest(RequestEvent $event)
        {
            $request = $event->getRequest();
            $host = $request->getHttpHost();
    
            $cityString = $host === 'spb.site.ru' ? 'по Санкт-Петербургу' : 'по Москве';
    
            /** @var \Twig\Environment $twig */
            $twig = $this->container->get('twig');
            $twig->addGlobal('cityString', $cityString);// Добавляем глобальную переменную в шаблон
        }
    
        public static function getSubscribedEvents()
        {
            return [
               KernelEvents::REQUEST => [['onKernelRequest', 10]]
            ];
        }
    }
    

    Этот подписчик автоматически будет использоваться после очистки кэша сайта. Тогда в любом шаблоне будет доступна переменная {{ cityString }}, которая будет выводить нужную строку.

    Как назначить несколько доменов одному сайту Вы наверно и так знаете.


Авторизуйтесь, чтобы ответить