1 Отредактировано Ярослав (16.09.2015 19:05:35)

Тема: Несколько складов в разных городах. Реализация.

Здравствуйте!
Имеется основной склад и несколько складов в разных городах.
Все работают с одной базой 1с, то есть у товарах цены для всех одни и те же, меняется только наличие на том или ином складе.
Получается, клиенты видят товары, которые отсутствуют на складе их города, но есть на других складах.
Возможно ли сделать так, чтобы отбирались только товары выбранного пользователем склада?

Я предполагаю сделать так:
Вариант 1.
1. Добавлю функцию фильтрации по остаткам на складе в Catalog\Model\api.php (пусть whFilter)
2. Добавлю новое поле пользователя "склад по-умолчанию" (запрашивается при регистрации).
3. В шаблоне фильтра  жестко задам включение фильтра по складам (или отключение фильтрации, если пользователь не авторизован).


Вариантом 2 рассматриваю многосайтовость.
1. Отдельный домен для каждого склада
2. Несколько профилей 1с для выгрузки с каждого склада по отдельности. У каждого профиля соответствующий адрес сайта склада.


Верным ли я путем иду, товарищи?  Свет в конце туннеля будет?))

Re: Несколько складов в разных городах. Реализация.

У Вас комплектации будут на сайте, или всё отдельными товарами?

Re: Несколько складов в разных городах. Реализация.

У нас есть в планах добавить нужный Вам функционал. Скорее всего он появится уже в этом году, точную дату не скажу, но течении ближайших месяцев я думаю будет. Теперь по существу.
Оба варианта правильные.
Но надо учесть что во втором, надо правильно указать гуглу и яндексу что это зеркала, чтобы он за дубли Вас не наказал. Почитать как это сделать можно в документации самого яндекса. Плюсом будет второго метода, то что если цены по филиалам изменятся, то они будут правильно отображены, и можно указывать свои контакты под каждый сайт филиала.
В первом случае, реализовать такое тоже можно, Вы идёте в верном направлении. Но надо учесть то что при обновлении все файлы стандартные перезаписываются и Вам нужно если вы правите .inc.php файлы сделать их копии, только с другим окончанием (.my.inc.php), тогда будут подхватываться именно Ваши файлы. Либо реализовать всё через Ваш отдельный модуль. Остатки по складам храняться в таблице комплектаций, а не товаров. Если у Вас будет только одна комплектация(товар без дополнительных комплектаций). То можно просто делать INNER JOIN из таблицы комплектаций, чтобы фильтровать.
Плюсом будет отсутствие дублей.

Поэтому мне кажется более приемлимый 1 вариант, хотя и гемморойнее.

Ну либо дождаться когда выйдет наше решение. Но это не скоро.

Re: Несколько складов в разных городах. Реализация.

Город выбранный можно запоминать и в куках. Если пользователь не выбрал город, то подставлять какой-либо главный по умолчанию.
Кстати как будете добавлять поле? Через свой модуль? Или просто правкой файла?

Re: Несколько складов в разных городах. Реализация.

Спасибо за ответы, Александр!  Планируемый функционал будет востребован. 
Интересно, что к нам за разработкой пришли заказчики из головной компании после того, как был реализован магазин для дилера) И уходят с Bitrix!
Я уточню у заказчиков структуру базы. У дилера база изначально верно наполнялась в 1с с комплектациями (размер). Возможно у них на каждый размер своя карточка товара.

Доп.функционал и доп.поля стараюсь делать отдельными модулями.

Еще вопросик. Если идти не будем изменения файла, а созданием собственного модуля, то каким образом перехватить в своем модуле фильтрацию товаров?

Re: Несколько складов в разных городах. Реализация.

С битрикс уход это хорошо.
Если вы будете реализовывать собственным модулем, что правильно, то надо будет свой фронт контроллер назначить на отображение товаров. Т.к. у нас в системе действует система маршрутов, то каждому маршруту(тупо шаблон адреса) можно назначить обработку на свой фронт контроллер. Его можно отнаследовать от стандартного фронт контроллера каталога товаров, тогда надо будет поправить всего один метод.
Сделать это можно путём вписывания метода getRoute в Вашем файле handlers.inc.php в папке модуля config.

Например так:

function init()
    {
        $this
            ->bind('getroute',null,null,1); //Назначение прослушки хука с высоким приоритетом (1)
    }
    
    /**
    * Возвращает маршруты данного модуля
    */
    public static function getRoute(array $routes) 
    {        
        //Страница оформления заказа
        $routes[] = new Router\Route('catalog-front-listproducts', array(
            '/catalog/{category}/',
            '/catalog/'
        ), array(
            'controller' => 'Папка Вашего модуля-front-listproducts', // Устанавливаем какой контроллер обрабатывает маршруты
        ), t('Просмотр категории свой'));
        
        return $routes;
    }

'Папка вашего модуля-front-listproducts' - будет искать файл listproducts.inc.php в Вашем модуле

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

А вообще в очень скором времени мы откроем возможность добавления behavior функций и тогда можно будет вообще навесить свои методы дополниельно к классу апи. Например у апи каталога товаров можно будет назначить из Вашего модуля свой метод, который появится у этого апи. И его можно будет вызывать как обычный метод.

Re: Несколько складов в разных городах. Реализация.

Ура, функционал сделан в Мегамаркете!