Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Мультимагазин на 5 поддоменов. Полноценное решение


ladOK
 Поделиться

Рекомендованные сообщения

На оcstore 1.5.4 в прошлом году сделал строительный мультимагазин. Но время идёт, а опенкарт развивается и видоизменяется. Интересно как можно было бы решить подобную задачу, используя новшества версий 2 и 3 движка или иные подходы. Распишу подробно, как поступил я, а вы уже, как говорится, вставьте своих пять копеек. 

 

1)  Для всех магазинов использую одни и те же схемы. Уже не помню, но вроде бы убрал какой-то sql-запрос для обращения к схемам по ИД магазина, т. е. Не стало разделения по принципу: например, common/home только у магазина 1, а product/category только у магазина2, магазина3. Хотя можно было написать sql-запрос, который проставил каждой схеме «галочки» всех созданных магазинов.

 

2) С помощью алиасов в конфигах apache к основному домену мультимагазина site.ru привязал поддомены остальных магазинов shop2.site.ru, shop3.site.ru, shop4.site.ru и т.д.  

В настройках в админке магазина добавил новые магазины и прописал им алиасы из предыдущего пункта

 

3) Создал под  тайтлы, мета-теги, seo товаров отдельные таблицы product_description_shop1,product_description_shop2, product_description_shop3...,product_description_subdomain, связанные с таблицей product по id. Т.е. используются на всех доменах одни и те же товары, но в зависимости от поддомена проставляются свои тайтлы, мета-теги, seo 

4)  Тоже самое сделал для категорий; появились таблицы вида category_description_shopN 

 

5)в config.php поставил константу UNDERDOMAIN, в которую сохраняется subdomain магазина из url. Там прописал такой код  

$url = explode('.',$_SERVER['SERVER_NAME']); 

$underdm =''; 

if (count($url)==3){     

define('UNDER_DOMAIN',$url[0]); 

$underdm = $url[0].'.'; 

} 

 

Вот ещё строки оттуда, которые изменились 

define('HTTP_SERVER', 'http://' .$underdm .'site.ru/'); 

define('HTTP_IMAGE', 'http://' .$underdm .'site.ru/image/'); 

define('HTTP_ADMIN', 'http://' .$underdm .'site.ru/admin-rd/'); 


 

// HTTPS 

define('HTTPS_SERVER', 'http://' .$underdm .'site.ru/'); 

define('HTTPS_IMAGE', 'http://' .$underdm .'site.ru/image/');

 

Это я сделал, чтобы в sql-запросах на получение инфы о товарах/категориях из БД подставлялся subdomain в качестве суффикса к названию таблиц. Например, 

$suffix = '_'.UNDER_DOMAIN; 

$query= $this->db->query("SELECT * FROM product_description".$suffix ." WHERE product_id = '" .$product_id ."'"); 

 

7) Написал скрипт синхронизации и добавил в админку№2(скопировал файлы admin, изменил конфиг, назначил своих администраторов от новой пользовательской группы). Его задачи:

во-первых,добавить записи  в таблицы product_to_store, category_to_store  - для привязки всех товаров/категорий к поддоменам;

во-вторых, сгенерировать уникальные тайтлы, метатеги, seo в описания товаров/категорий для каждого магазина, подставляя города, регионы в разных склонениях из таблицы store 

 

8) Для установки разных цен, скидок, акций на товары создал таблицы product_discount_shopN, product_special_shopN . Цена прописывается в таблицах product_decrition_shopN . Если цены, скидки, акции не прописаны у какого-то товара, то берутся значения из основного магазина по адресу site.ru. 

Вся эта информация для доменов отправляется в БД из 1С напрямую через sql-запросы один раз в день. 

 

9) Для сохранения всяких дополнительных настроек магазинов (например, ID метрик и счётчиков, склонения городов по падежам и т.п.) я добавил в БД ещё одну таблицу store_option 

 

10) Подгрузку разных телефонов, контактных данных для каждого магазина и выбор города я предоставил модулю geoip. Кстати, этот модуль пришлось допиливать, чтобы показывал правильно город, а то была такая проблема, что при заходе с поисковика или по прямой ссылке, например, при заходе по ссылке piter.site.ru на сайте отображался, например, воронеж, т.е. нарушалось соответствие url и того, что видим в качестве выводимого города.

 

11) Сделал так, чтобы модуль ocfilter корректно фильтровал товары по ценам независимо от того, где их фильтрует пользователь (основной магазин или поддомены). Это пришлось реализовывать, потому что цены для разных магазинов я записал в отдельные таблицы

 

12) Правки кода для реализации полноценного многодоменного мультимагазина я вносил через скрипты vqmod. В основном понадобилось подменять sql-запросы, чтобы в зависимости от поддомена получать разные тайтлы, мета, seo товаров/категорий, цены, скидки,акции, также чтобы правильно фильтровались товары по ценам, ещё кое-где нужно было заменять url страниц c  инфой по доставкам, контактам  

 

14) Сделал под каждый поддомен/магазин отдельные robots.txt(на самом деле это robots.php + директивы htaccess) и sitemaps, чтобы поисковики всё поняли, как надо. В итоге яндексу и гуглу это понравилось, с индексацией проблем не возникло, а трафик и позиции выросли нормально

 

Изменено пользователем ladOK
Ссылка на комментарий
Поделиться на других сайтах

9 минут назад, ladOK сказал:

10) Подгрузку разных телефонов, контактных данных для каждого магазина и выбор города я предоставил модулю geoip. Кстати, этот модуль пришлось допиливать, чтобы показывал правильно город, а то была такая проблема, что при заходе с поисковика или по прямой ссылке, например, при заходе по ссылке piter.site.ru на сайте отображался, например, воронеж, т.е. нарушалось соответствие url и того, что видим в качестве выводимого города.

А можно чуть подробней, что именно допиливать? Эта проблема еще исправлена в текущих версиях модуля?

Ссылка на комментарий
Поделиться на других сайтах

В 16.08.2018 в 00:15, dexion сказал:

А можно чуть подробней, что именно допиливать? Эта проблема еще исправлена в текущих версиях модуля?

 

я покупал непрофессиональную версию в прошлом году осенью. Исправили или нет не могу сказать, потому что новые версии не скачивал. Но модуль этой редакции обновляется судя по графе Обновлено Четверг в 11:41. Если интересует, то могу покапаться в коде и найти изменения. Но вроде бы после перехода на https эта проблема снова появилась

 

Ссылка на комментарий
Поделиться на других сайтах

В 16.08.2018 в 04:01, ladOK сказал:

14) Сделал под каждый поддомен/магазин отдельные robots.txt(на самом деле это robots.php + директивы htaccess) и sitemaps, чтобы поисковики всё поняли, как надо. В итоге яндексу и гуглу это понравилось, с индексацией проблем не возникло, а трафик и позиции выросли нормально

А как вы настроили редирект в .htaccess?
У меня после добавления правила  - RewriteRule ^robots.txt$ robots.php - выдает ошибку в Яндекс Вебмастере: Сервер отвечает редиректом на запрос /robots.txt

 

Ссылка на комментарий
Поделиться на других сайтах


3 часа назад, art2make сказал:

А как вы настроили редирект в .htaccess?
У меня после добавления правила  - RewriteRule ^robots.txt$ robots.php - выдает ошибку в Яндекс Вебмастере: Сервер отвечает редиректом на запрос /robots.txt

 

Вот так отдельно прописывал для каждого поддомена  и самого домена

RewriteCond  %{HTTP_HOST} ^undomain.domain.ru$
Rewriterule ^robots.txt$ robots.php [L]

и проблем не было

Ссылка на комментарий
Поделиться на других сайтах

  • 3 месяца спустя...
В 27.08.2018 в 18:10, ladOK сказал:

Вот так отдельно прописывал для каждого поддомена  и самого домена

RewriteCond  %{HTTP_HOST} ^undomain.domain.ru$
Rewriterule ^robots.txt$ robots.php [L]

и проблем не было

На возмездной основе занимаетесь реализацией такого функционала (региональные поддомены по описанной схеме)? 

Ссылка на комментарий
Поделиться на других сайтах


  • 1 год спустя...

image.thumb.png.cbfac9176366bb138356d8da22300d96.png

 

Реализовывал на 1 из проектов.

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.