Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


ladOK

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

 

Змінено користувачем 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 months later...
В 27.08.2018 в 18:10, ladOK сказал:

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

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

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

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

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.