​Как сделать, чтобы плагин имел раздельные настройки для нескольких магазинах в одной установке?

Добрый день.

Возник вопрос по разработке плагина.

У одного из наших клиентов на одной установке ShopScript находится 4 магазина.

Каким образом лучше организовать устройство плагина, если нам необходимо, чтобы:

  • Для каждого магазина плагин имел индивидуальную копию настроек.
  • Для каждого магазина плагин мог определять текущий активный магазин при обработке запросов пользователя.

Есть ли best practice и примеры на эту тему?


2 ответа

  • 1

    Что касается того, где хранить настройки, я вижу один хороший вариант и два плохих. Хороший: создайте таблицу в БД, одна строка = один домен со своими настройками. Плохой: отдельный файл-конфиг в wa-config/apps/shop с массивом вида domain => settings array. Очень плохой: хранить как параметры поселения в wa-config/routing.php. Плохие варианты теоретически возможны, но преимуществ по сравнению с БД я не придумал, а граблей можно найти целый лес.

    Определить текущий активный домен во фронтэнде несложно:

    // Вернёт адрес поселения (например "localhost/wa"), то есть URL до index.php без протокола и без финального слеша
    wa()->getRouting()->getDomain()

    // Вернёт путь внутри поселения (например "shop/"; если магазин поселен в корень, то пустую строку)
    wa()->getRouting()->getRootUrl()

    В бэкэнде это всё, конечно, бессмысленно. Но если есть конкретный заказ, можно определить, с какого поселения он был сделан. В параметры заказа (shop_order_params.name='storefront') сохраняется строка вида 'localhost/wa/shop/' (или 'localhost/wa', без слеша на конце, если магазин поселен в корень). Этого должно быть достаточно, чтобы найти нужный набор настроек плагина.

    Имейте в виду, что не все заказы оформляются из фронтэнда. Если заказ создал оператор в бэкэнде, то параметра 'storefront' не будет.

    • +1

      Ещё в бэкэнде может пригодиться:

      wa()->getRouting()->getByApp('shop')

      Вернёт массив такого же формата, как wa-config/routing.php, (домен => список поселений) но только с записями для приложения shop.

  • 1
    Михаил Ушенин Webasyst 6 января 2015 15:50 #

    Почему бы не хранить в таблице wa_app_settings для вашего плагина сериализованный массив настроек, и в качестве его ключей указывать строку вида domain/route, которая будет использоваться для идентификации витрин при чтении ранее сохранённых настроек из этой таблицы и записи в неё новых настроек.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите