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