21 апреля 2010 в 15:22

Как создать несколько магазинов, используя одну установку Magento

CMS*
Это вольный перевод вот этой статьи. Статья предназначена для людей, знакомых с Magento, поэтому многие элементарные вещи из оригинальной статьи были опущены. Существует несколько реализаций решения этой задачи:
  • Как поддиректории основного сайта, например,
    • mall.com/shoes
    • mall.com/shirts
  • Использование разных доменных имен, например,
    • shoes.com
    • shirts.com
  • Использование поддоменов основного сайта, например,
    • mall.com
    • shoes.mall.com
    • shirts.mall.com

В результате получится несколько магазинов, использующих один и тот же код, и управляемых из одной админки.

Добавление еще одного магазина в Magento


Для начала необходимо создать корневую категорию для нового магазина, сделать ее активной и установить значение атрибута Is Anchor в Yes. Далее переходим в раздел админки System -> Manage Stores и создаем новые Website, Store и Store View. Подробней на примере:

Website:
  • Имя – Shoes
  • Код – shoes

Store:
  • Имя – Main Store
  • Из списка Website выбираем Shoes
  • Из списка Root Category выбирает корневую категорию, созданную ранее.

Store View:
  • Из списка Store выбираем Main Store
  • Имя — English (не принципиально, можно написать, что угодно)
  • Код – shoes_en
  • Status – Enabled

Дополнительные магазины создаются аналогично.

Теперь необходимо указать базовые URL’ы для нового магазина. Переходим в раздел System -> Configuration. Current Configuration Scope (расположен слева вверху) меняем значение Default Config на Shoes. На вкладке Web в секциях Secure и Unsecure указываем Base URL. Для каждого случая этот URL будет различным, для примера:
  • Поддиректории – http://mall.com/shoes/
  • Для доменных имен 2-го уровня http://shoes.com/
  • Для доменных имен 3-го уровня http://shoes.mall.com/

Завершающий слеш в каждом URL’е обязателен.

Для того, чтобы можно было уже обращаться по этим URL’ам нужно сделать следующее:

Поддиректори


Итак, нужно, чтобы наш магазин находился в подиректории основного сайта.

Для этого необходимо в корне Magento создать подкаталог shoes и скопировать туда файлы .htaccess и index.php из корневого каталога Magento. После чего нужно отредактировать файл index.php. Ищем строку $mageFilename = 'app/Mage.php' и указываем правильный путь к файлу Mage.php. В данном случае это $mageFilename = '../app/Mage.php'. Еще необходимо добавить два параметра в вызов метода Mage::run().

Исправляем

Mage::run();

на

Mage::run('shoes', 'website');

После этого можно обращаться к магазину Shoes по адресу http://mall.com/shoes/.

Очень подробно эта часть обьясняется в следующих 2-х видео:

Доменные имена


Так как, по сути, у нас будет несколько доменных имен, привязанных к одному серверу, на котором установлена Magento, то придется править уже оригинальный файл index.php. Итак, заменим строку

Mage::run();

на
  1. switch($_SERVER['HTTP_HOST']) {
  2.     case 'shoes.com':
  3.     case 'www.shoes.com':
  4.         Mage::run('shoes', 'website');
  5.     break;
  6.     default:
  7.         Mage::run();
  8.     break;
  9. }

Для большего количества магазинов нужно код изменить следующим образом:
  1. switch($_SERVER['HTTP_HOST']) {
  2.     
  3.     // Shoes.com
  4.     case 'shoes.com':
  5.     case 'www.shoes.com':
  6.         Mage::run('shoes', 'website');
  7.     break;
  8.     
  9.     // Hats.com
  10.     case 'hats.com':
  11.     case 'www.hats.com':
  12.         Mage::run('hats', 'website');
  13.     break;
  14.     
  15.     // Shirts.com (default store)
  16.     default:
  17.         Mage::run();
  18.     break;
  19. }

В общем-то и все. После этих манипуляций магазин будет доступен по адресу http://shoes.com/.

Поддомены


У нас есть основной домен mall.com, нужно поднять 2-й магазин на поддомене shoes.mall.com. Я надеюсь, что все необходимое для конфигурации поддомена уже сделано на хостинге, поэтому перейдем к созданию магазина на этом поддомене.
Как на этапе с поддиректориями необходимо скопировать файлы .htaccess и index.php из корневого каталога Magento в корневой каталог поддомена, после чего можно приступить к редактированию файла index.php. Первое, что нужно сделать – это указать в файле index.php, где лежить файл Mage.php. Итак, заменим в файле index.php, строку

$mageFilename = 'app/Mage.php';

на

$mageFilename = '../public_html/app/Mage.php';

У вас этот путь может быть другим, все зависит от расположения каталогов доменов на вашем хостинге оносительно друг друга.

Далее нужно заменить код Mage::run() на Mage::run('shoes', 'website'), чтобы движок Magento знал, какой из магазинов нужно запускать. И последнее, что нужно сделать – создать символьные ссылки на все основные директории Magento:

ln -s ../public_html/404/ ./404
ln -s ../public_html/app/ ./app
ln -s ../public_html/includes/ ./includes
ln -s ../public_html/js/ ./js
ln -s ../public_html/media/ ./media
ln -s ../public_html/report/ ./report
ln -s ../public_html/skin/ ./skin
ln -s ../public_html/var/ ./var

Теперь магазин будет доступен по адресу http://shoes.mall.com/.

В итоге мы получаем несколько магазинов, управляемых одной установленной системой с любым содержимым, т.е. контент этих магазинов может быть связан между собой, либо не иметь ничего общего. Каждый может использовать тот метод, который ему удобней, результат, в конечном итоге, будет идентичным. Основное преимущество тут – это удобство управления несколькими магазинами и экономия времени менеджеров магазинов.
+2
3229
23
NixGuy 6,5

Комментарии (2)

0
dohtar, #
И последнее, что нужно сделать – создать символьные ссылки на все основные директории Magento
религия не позволяет изменить unsecure/secure base url в System->Config->Web для каждого конкретного сторвью?
0
NixGuy, #
Может быть и позволяет. Вообще, многие вещи (не все конечно) в Magento можно сделать несколькими способами. Так же если вы обратитесь к оригиналу статьи, можете там увидеть дополнительную информацию, которая, возможно, вас заинтересует (или не заинтересует), т.к. я часть статьи опустил, по прчинам, указанным в начале этого топика.

Только зарегистрированные пользователи могут оставлять комментарии.
Войдите, пожалуйста.