Есть несколько сайтов (s1,s2,s3) на Битриксе. На каждый из сайтов установлен интернет-магазин. Можно ли стандартными средствами сделать, чтобы была общая корзина для всех магазинов? Если да, то как? Подскажите пожалуйста.
А причина такого желания, может это решается по-другому и другими средствами. Вот не могу представить ситуацию, когда именно корзина должна стать общей.
Все заказы в общую кучу - да Клиенты с общей авторизацией на всех магазинах - да. Общий инфоблок но разные цены или валюты вывода - да
То есть вы хотите дать возможность человеку бегать между 3 магазинами и добавлять товары, а в конце в куче все это оформить, в любом из магазинов. Нет, такой возможности из коробки нет.
Можно сделать доступность инфоблоков, в которых содержится товар во всех 3х магазинах, чтобы клиенту не было смысла делать переход с магазина в магазин. Это будут, например разделы с товаром. Он зашёл в один магазин и все оформил, не покидая пределов одного магазина.
Такое вполне возможно. Нужно кастомизировать компоненты корзины и заказа. А зачем - если это требование заказчика и обусловлено требованиями проекта - то все понятно. Причины могут быть разные (какраз с такой технологией "сквозной корзины" сейчас у меня 3 магазина в процессе например - пока не буду раскрывать какие и где )
Допустим есть 2 сайта (интернет магазина) на одной лицензии битрикса (через многосайтовость). Подскажите, как сделать, чтобы у каждого сайта были как свои каталоги товаров, так и общие каталоги?
Старая тема и без решения, А Басыров утверждал что помогут здесь) Нам например это нужно т.к. все сайты это просто разные локализации и на каждом сайте один список товаров.
Как вариант - использовать одну лицензию для нескольких сайтов по схеме псевдомногосайтовости. По идее в таком случае все системные механизмы будут общими для всех сайтов.
Цитата
Псевдомногосайтовость на разных доменах ... Второй вариант Если домены и дизайны двух сайтов разные, и используется одна база для двух сайтов (настройки магазина и т.д. тоже одинаковые), можно использовать такой вариант. Лицензия на второй сайт при этом не используется.
Юрий Волошин написал: А причина такого желания, может это решается по-другому и другими средствами. Вот не могу представить ситуацию, когда именно корзина должна стать общей.
Все заказы в общую кучу - да Клиенты с общей авторизацией на всех магазинах - да. Общий инфоблок но разные цены или валюты вывода - да
Можно более подробно цель такой функции.
Прошло 6 лет...
На дворе март 2019. Делается магазин на 3х языках. Товары одинаковые (один ИБ товаров).
У меня 3 языка (т.е. 3 сайта), один ИБ каталога. На одном домене. Задача была такой: сделать так, чтобы товары добавленные в одной языковой версии (s1) отображались в корзине другой языковой версии (s2 и/или s3).
Решение вопроса в моем случае многосайтовости оказалось очень простым.
При добавлении товара в корзину он "привязывается" к сайту на котором его добавили - ключ массива LID.
Решение заключается в том, чтобы: 1. при загрузке страницы получить список товаров корзины (без привязки к сайту) 2. поменять значение ключа LID (каким бы оно ни было) на SITE_ID
После этой манипуляции товары корзины текущего пользователя как будто добавлены на текущем сайте. При смене языковой версии (по сути перехода на другой сайт) снова переписывается LID на SITE_ID.
Код примерно такой (разместить в init.php) :
Код
if(CModule::IncludeModule("catalog") && CModule::IncludeModule("sale")){
$fuserId = CSaleBasket::GetBasketUserID();
$dbBasketItems = CSaleBasket::GetList(
array(),
array(
"FUSER_ID" => $fuserId,
//"LID" => SITE_ID, // это нам не надо
"ORDER_ID" => "NULL",
//"ID" => $id, // это тоже не надо
),
false,
false,
array('ID', 'DELAY', 'CAN_BUY', 'SET_PARENT_ID', 'TYPE', 'NAME', "PRODUCT_ID", "LID")
);
$arBasket = array();
while($b = $dbBasketItems->Fetch()){
$arBasket[] = $b;
}
foreach($arBasket as $arProduct){
$arFields = array(
"LID" => SITE_ID, // вот здесь и происходит финт ушами
);
CSaleBasket::Update($arProduct["ID"], $arFields);
}
}
Проверено с bitrix:sale.basket.basket в рамках одного домена. Не проверял, но думаю на разных доменах тоже сработает.
Нюанс по скидкам. Если у товара в рамках одного сайта (s1) применяется скидка, а на другом сайте (s2) на этот же товар скидки нет, то при добавлении товара (смена LID) в корзину второго (s2) сайта скидки уже не будет. При возвращении на первый сайт (s1) скидка снова будет применяться. s1 (со скидкой): http://prntscr.com/n11kpc s2 (скидки нет): http://prntscr.com/n11kzy s3 (скидки нет): http://prntscr.com/n11l9b
Юрий Волошин написал: А причина такого желания, может это решается по-другому и другими средствами. Вот не могу представить ситуацию, когда именно корзина должна стать общей.
Все заказы в общую кучу - да Клиенты с общей авторизацией на всех магазинах - да. Общий инфоблок но разные цены или валюты вывода - да
Можно более подробно цель такой функции.
Прошло 6 лет...
На дворе март 2019. Делается магазин на 3х языках. Товары одинаковые (один ИБ товаров).
Попробуйте передать в параметрах компонента корзины параметр CUSTOM_SITE_ID с ID сайта, корзину которого вам надо отображать, например, s1. У меня сработало, версия 1С-Битрикс: Управление сайтом 18.0.6
Нашел этот параметр, просматривая компонент /bitrix/components/bitrix/sale.basket.basket/class.php, хотя в документации по компоненту такого параметра нет. В компоненте есть такой код
Код
public function onPrepareComponentParams($params)
{
if (isset($params['CUSTOM_SITE_ID']))
{
$this->setSiteId($params['CUSTOM_SITE_ID']);
}
У меня не совсем такая ситуация, но очень схожая. 2 сайта, 2 каталога товаров с доступом для обоих сайтов, т.е. на одном сайте товары из одного каталога, на втором из другого. Оформление заказа происходит на одном сайте. Корзина у меня нужна, по-сути, при переходах между сайтами только маленькая. Поэтому использовал код в init.php ваш, Вадим Буторин. Но в момент оформления товаров скидки с каталога второго сайта не видны. Не знаю куда и копать дальше. Тех. поддержка ответила, что функционала сквозной корзины у них не предусмотрено...
Андрей Турланов написал: У меня не совсем такая ситуация, но очень схожая. 2 сайта, 2 каталога товаров с доступом для обоих сайтов, т.е. на одном сайте товары из одного каталога, на втором из другого. Оформление заказа происходит на одном сайте. Корзина у меня нужна, по-сути, при переходах между сайтами только маленькая. Поэтому использовал код в init.php ваш, Вадим Буторин. Но в момент оформления товаров скидки с каталога второго сайта не видны. Не знаю куда и копать дальше. Тех. поддержка ответила, что функционала сквозной корзины у них не предусмотрено...
Андрей, я полагаю, что вам необходимо дублировать скидку на один товар для 2х сайтов. Т.к. при создании скидки ее можно применить только для 1го сайта.
Чтобы выводить товары в корзине и оформлении заказа со всех сайтов, нужно указать параметр "CUSTOM_SITE_ID" => array('s1','s2','s3'), в bitrix:sale.basket.basket и bitrix:sale.order.ajax во всех сайтах
Для решения данного вопроса без помощи стандартного компонента корзины, достаточно передать не выбранный сайт (\Bitrix\Main\Context::getCurrent()->getSite()) , а массив всех сайтов.
Дмитрий Примаков написал: Чтобы выводить товары в корзине и оформлении заказа со всех сайтов,нужно указать параметр "CUSTOM_SITE_ID" => array('s1','s2','s3'),в bitrix:sale.basket.basket и bitrix:sale.order.ajax во всех сайтах
Не корректно работают компоненты при скидках, не правильно показывают скидочные цены.
Андрей Белов написал: Еще бы решить вопрос - чтобы была одна скидка на все сайты, и чтобы один и тот же промо-код работал на всех сайтах
+1 Сейчас действительно как-то с этим не удобно. Вот вроде бы и есть разделение на сайты - многосайтовость. Пробуешь реализовать всё через 1 каталог товаров, просто указывая разные валюты - и сталкиваешься сразу с такими проблемами: 1. промокод для каждого сайта разный, а это сложнее проводить промоакции для проекта 2. скидки тоже привязываются только к конкретному сайту, даже в случае того что каталог один для всех общий 3. ну и вишенка на торте - Битрикс не учитывает ваши разные цены и всё равно высчитывает "оптимальную" по курсам валют.. вопрос зачем это делать, если цены конкретные вбиты..