Jump to content
ladOK

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

Recommended Posts

На о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, чтобы поисковики всё поняли, как надо. В итоге яндексу и гуглу это понравилось, с индексацией проблем не возникло, а трафик и позиции выросли нормально

 

Edited by ladOK

Share this post


Link to post
Share on other sites
9 минут назад, ladOK сказал:

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

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

Share this post


Link to post
Share on other sites
В 16.08.2018 в 00:15, dexion сказал:

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

 

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

 

Share this post


Link to post
Share on other sites
В 16.08.2018 в 04:01, ladOK сказал:

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

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

 

Share this post


Link to post
Share on other sites
3 часа назад, art2make сказал:

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

 

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

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

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

Share this post


Link to post
Share on other sites
В 27.08.2018 в 18:10, ladOK сказал:

 

Edited by bravo14

Share this post


Link to post
Share on other sites
В 27.08.2018 в 18:10, ladOK сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.