При создании магазина столкнулся с такой интересной задачей, в карточке товара необходимо было сделать вывод похожих товаров. Похожесть товаров определялась так , товар должен был быть из такой же категории, инфоблока и так же у него должно совпадать максимальное количество свойств с товаром в карточке которого мы находимся. Писать отдельный компонент для этой задачи я не увидел смысла, поэтому кастомизировал текущий , приступим Для начала нам надо дать возможность в комплексном компоненте каталога bitrix:catalog указывать по каким свойствам надо определять похожесть, для этого в файле .parameters.php (у меня он находится тут bitrix/templates/.default/components/bitrix/catalog/.default/.parameters.php ) создадим возможность для выбора свойств добавим код
Далее нам надо создать файл result_modifier.php (если его нет) ,в нем будет логика выборки у меня он находился тут bitrix/templates/.default/components/bitrix/catalog/.default/bitrix/catalog.element/.default/result_modifier.php
if($arParams['DETAIL_PROPS_ANALOG']) {
// сделаем вывод похожих товаров
$arSelect = Array(
"ID",
"LANG_DIR",
"IBLOCK_CODE",
"IBLOCK_ID",
"IBLOCK_SECTION_ID",
"CODE",
"NAME",
"PREVIEW_PICTURE",
"DETAIL_PICTURE",
"DETAIL_PAGE_URL"
);
// это для того что бы определить какую цену выбирать из базы
foreach($arParams['PRICE_CODE'] as $price) {
$dbPriceType = CCatalogGroup::GetList(
array("SORT" => "ASC"),
array("NAME" => $price)
);
while ($arPriceType = $dbPriceType->Fetch()){
$arSelect[] = 'CATALOG_GROUP_'.$arPriceType['ID'];
$arResult['PRICE_ID'][] = $arPriceType['ID'];
}
}
// для выборки свойств по которым будем сравнивать
foreach($arParams['DETAIL_PROPS_ANALOG'] as $det_props) {
if($det_props != ''){
$arSelect[] = 'PROPERTY_'.$det_props;
}
}
$arSelect[] = 'PROPERTY_PRODUCT_NAME';
// фильтрование, в данном случае из того же инфоблока , раздела, активные и только с картинками
$arFilter = Array(
"IBLOCK_ID"=>$arResult["IBLOCK_ID"] ,
"SECTION_ID" => $arResult["SECTION"]["ID"], "ACTIVE"=>"Y" ,
"!ID" => $arResult["ID"],
"!DETAIL_PICTURE" => false
);
$arr_analogs = CIBlockElement::GetList(Array("RAND" => "ASC"), $arFilter, false, false, $arSelect);
$analog_count_id = array();
while($arr_analog = $arr_analogs->GetNextElement())
{
$element = $arr_analog->GetFields();
// теперь сравним товарары
$i = 0;
foreach($arParams['DETAIL_PROPS_ANALOG'] as $analog_propers) {
if($arResult['PROPERTIES'][$analog_propers]['VALUE'] == $element['PROPERTY_'.$analog_propers.'_VALUE']) {
$i++;
}
}
$analog_count_id[$element['ID']] = $i;
// этот код нужен для создания не превью товара
if($element["PREVIEW_PICTURE"]) {
$more_element_img = CFile::ResizeImageGet(
$element["PREVIEW_PICTURE"],
array("width" => 65, "height" => 70),
BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
true
);
}
elseif($element["DETAIL_PICTURE"]) {
$more_element_img = CFile::ResizeImageGet(
$element["DETAIL_PICTURE"],
array("width" => 65, "height" => 70),
BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
true
);
}
$element['PICTURE']['WIDTH'] = $more_element_img["width"];
$element['PICTURE']['HEIGHT'] = $more_element_img["height"];
$element['PICTURE']['SRC'] = $more_element_img["src"];
unset($more_element_img);
$analog[$element['ID']] = $element;
}
arsort($analog_count_id);
foreach($analog_count_id as $k => $v) {
$arResult["ANALOG"][$k] = $analog[$k];
}
}
Теперь последний этап сделать вывод уже в шаблоне детальной карточки товара в цикле
foreach($arResult["ANALOG"] as $analog):
//ваш шаблон
endforeach;
1.выводит товары не только похожие-но и у которых свойство не совпадают. // теперь сравним товарары $i = 0; foreach($arParams['DETAIL_PROPS_ANALOG'] as $key => $analog_propers) { //.strtoupper($analog_propers) для тех кто прописывает символьный код свойства при создании маленькими буквами if($arResult['PROPERTIES'][$analog_propers]['VALUE'] == $element['PROPERTY_'.strtoupper($analog_propers).'_VALUE']) { $i++; } else{} } // if ($i!=0) если количество найденых свойст не равно 0 if ($i!=0){ $analog_count_id[$element['ID']] = $i; } 2.неплохо было при выводе похожих товаров,выводить значения свойств не только по которым мы отбирали похожие товары
Здравствуйте! Не подскажете, в .parameters.php Вы присваиваете значения для $arProperty_N, $arProperty_X и $arProperty_Y, а далее нигде эти массивы не используются. Но зачем они тогда нужны?
Здравствуйте. Дошёл до последнего шага и не понял в какой файл вставлять данный код foreach($arResult["ANALOG"] as $analog): //ваш шаблон endforeach;
А можно ли сие чудо заставить выводиться под каждым товаром в списке товаров категории, например после нажатия на кнопку показать похожие товары По доработке куда писать?
При создании магазина часто приходится делать ajax корзину, то что есть в стандарте меня не совсем устраивает, поэтому мы делаем свою простую гибкую корзину, с возможностью удалять товары и изменять их количество Первым делом нам надо будет загрузуть jquery , грузить мы будем его с хранилища гугла .
Теперь нам надо написать скрипт который будет передавать и забирать данные о состоянии корзины с помощью ajax, удаление товаров которые уже в корзине, изменение количества товаров.
<script type="text/javascript">
/* Function for ours ajax inquiry */
function ajaxpostshow(urlres, datares, wherecontent ){
$.ajax({
type: "POST",
url: urlres,
data: datares,
dataType: "html",
success: function(fillter){
$(wherecontent).html(fillter);
}
});
}
$('.input-basket-submit').live("click",function(){
var addbasketid = $(this).attr('id');
ajaxpostshow("/include/ajax/basket.php", addbasketid, ".basket" );
return false;
});
/* Inquiry ajax at removal of the goods from a basket */
$('.basket .basket-list-delete').live("click",function(){
var deletebasketid = $(this).attr('id');
ajaxpostshow("/include/ajax/basket.php", deletebasketid, ".basket" );
return false;
});
/* Inquiry ajax at change of quantity of the goods */
$(".basket .basket-count-update").live("change", function(){
var countbasketid = $(this).attr('id');
var countbasketcount = $(this).val();
var ajaxcount = countbasketid + '&ajaxbasketcount=' + countbasketcount;
ajaxpostshow("/include/ajax/basket.php", ajaxcount, ".basket" );
return false;
});
</script>
Далее создадим файл который будет принимать и обрабатывать данные приходящие в корзину назовем его basket.php , разместим его в папке /include/. В нем у нас находится три обработчика ajax: добавление в корзину, изменение количества и удаление товара из корзины.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
?>
<?
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
/* Addition of the goods in a basket at addition in a basket */
if($_POST["ajaxaddid"] && $_POST["ajaxaction"] == 'add'){
Add2BasketByProductID($_POST["ajaxaddid"], 1, array());
}
/* Goods removal at pressing on to remove in a small basket */
if($_POST["ajaxdeleteid"] && $_POST["ajaxaction"] == 'delete'){
CSaleBasket::Delete($_POST["ajaxdeleteid"]);
}
/* Changes of quantity of the goods after receipt of inquiry from a small basket */
if($_POST["ajaxbasketcountid"] && $_POST["ajaxbasketcount"] && $_POST["ajaxaction"] == 'update'){
$arFields = array(
"QUANTITY" => $_POST["ajaxbasketcount"]
);
CSaleBasket::Update($_POST["ajaxbasketcountid"], $arFields);
}
?>
<?$APPLICATION->IncludeComponent(
"bitrix:sale.basket.basket.small",
"smallbasker",
Array(
"PATH_TO_BASKET" => "/personal/cart/",
"PATH_TO_ORDER" => "/personal/order/"
)
);?>
В конце мы вызываем компонент , в нем можем стилизовать вывод корзины, так же в коде у меня присутствует вызов шаблона компонента вот код самого шаблона вы его естественно украсите под свои нужды
В шаблоне компонента корзины мы создали ссылку на удаление товара из корзины и изменение количества товаров. Так же еще необходимо создать в шаблоне страницы место для вывода корзины .
Добрый вечер, на летней конференции был задан вопрос партнерам, по поводу кнопки "Быстро с 1С-Битрикс", сложно ли им продавать сайты с этой кнопкой? Стоит ли убрать этот порог в 300 тысяч рублей?
Очень большая часть зала выразила единодушное мнение, что надо дать возможность убирать кнопку бесплатно, либо за цену куда более низкую. Я был в том числе кто тоже поддержал это единодушное мнение. Сергей Рыжиков сказал, что подумает еще на счет этого, ему явно не очень нравится такой настрой партнеров.
Я размышлял над этим после конференции, изменив в итоге точку зрения по этому вопросу. Технология "композитный сайт", которую сделал Битрикс, реально ускоряет сайт, это будет видеть пользователь, но это не главное.
Главное что это будут видеть владельцы бизнесов которые хотят себе сделать сайт, сейчас как они выбирают систему? В основном потому что им ее предложил компания разработчик, либо друг посоветовал, либо где то слышал, но он не узнает о Битриксе когда просто серфит по интернету.
С данной кнопкой появится еще один хороший канал привлечения клиентов, "Битрикс будет на слуху", бренд "Битрикс" станет более популярным, люди переходят по ссылкам с подвала это факт.
Мы как партнеры, от кнопки "Быстро с 1С-Битрикс" только выиграем, у нас будет больше желающих работать с нами, так как мы партнеры "Битрикс", ведь сайты на нем летают.
Что же нам мешает? Мое мнение, что это СТРАХ.
На конференциях 1С-Битрикс я вижу яркую тенденцию обращений к партнерам "Повышайте свои цены", Сергей Рыжиков это лично продвигает.
Он не боится того что если мы будем "брать больше", люди просто перестанут использовать 1С-Битрикс. Он знает, что у клиентов просто нет выбора по сути, 1С-Битрикс это лидер в сегменте e-commerce, все остальные курят в сторонке.
Мы тут диктуем цены, если мы все будем "стоить дороже" у клиента не будет выбора, для этого надо забыть про "демпинг", что же мешает, опять СТРАХ.
Я лично призываю быть нормальными партнерами, кнопка "Быстро с 1С-Битрикс" нам нужна. Нужно только убрать сомнения и страхи, учится ее ставить клиентам, по итогу мы отхватим еще больший кусок с рынка веб-разработки.
Конечно надо еще повышать свои цены, но это уже отдельный разговор
Я считаю, что цена на продукт и доля рынка итак достаточно высоки. И разработчики сами сделали продукт неповоротливым, и теперь выдают решение проблемы производительности как фишку. Т.е. продукту в любом случае требовалась оптимизация. По сему не вижу смысла вообще платить за эту технологию, она должна входить в стандартные возможности больших дистрибутивов без каких либо условий, но мы все понимаем, что это "крючок", по сему нужно просто дать выбор, показывать кнопку или нет.
Привет дорогие читатели , не давно делал интеграцию 1С и bitrix , это было мое первое знакомство с 1С , склад в магазине заполняли с нуля , их кладовщик не знал 1С поэтому мне надо было составить инструкцию как ему настроить ее для того что бы интеграция прошла легко и безболезненно. Товары были с характеристикой размер которая влияла на цену продукта, размеры выгружались в товарные предложения , собственно сама инструкция. Запись товаров в 1С должны быть в определенном виде , для нормальной интеграции 1с Управление торговлей и сайта на системе администрирования 1С bitrix Для начала нам надо сделать административные настройки 1С , переходим на вкладку Административные -> настройки -> настройки параметров учета Заполняем пункты как на скриншотах Общие настройки 1.jpg Маркетинг 2.jpg НСИ 3.jpg Оптовые продажи 4.jpg Розничные продажи 5.jpg Запасы и закупки 6.jpg Финансы 7.jpg Органайзер 8.jpg Обмен данными 9.jpg Дальше мы начнем создавать виды номенклатуры , в них как раз мы и будем определять будут ли свойства или нет у того или иного товара Далее делаем по пунктам как на скриншоте 10.jpg 1) Проходим на вкладку ‘Нормативно справочная документация’ 2) Жмем виды номенклатуры 3) Жмем создать 4) Заполняем наименование номенклатуры (например ‘Головные уборы’) и тип в нашем случае это всегда ‘Товар’ ВАЖНО !!!! 5) Заполняем будут ли характеристики у товара с данной номенклатурой если нет выбираем ‘не используются’ если да ‘Индивидуальные для номенклатуры’ (эти настройки более гибкие) Далее запись После создания номенклатуры надо переходить к созданию свойств и характеристик для новой номенклатуры . 11.jpg 1) Переходим на вкладку ‘администрирование’ 2) Жмем по пункту ‘Наборы дополнительных реквизитов и сведений ’ 3) Тут есть две папки которые нам будут нужны ‘Номенклатура’ и ‘Характеристики номенклатуры’ “Номенклатура” – эти характеристики будут отображается в создание товара . “Характеристики номенклатуры” - он необходим для одинаковых товаров где отличается только размер, каждый размер это ценовое предложение . Жмем на ‘’Характеристики номенклатуры” 1)Начнем с создания свойства ‘размер ’ например для номенклатуры обувь 2) Жмем на кнопку подбор - она необходима для выбора свойства 3) Если у нас еще не создано свойство размер то нам надо будет его ‘создать’ (кнопка создать), если оно создано то просто жмем на него и кнопку ‘добавить в набор’ 4) Заполняем наименование свойства 5) По умолчанию поле ‘Значение свойства объекта’ оно нам и необходимо , так как в нем мы можем указать уже стандартные свойства 6) Если мы выбрали выбор свойств то мы увидим выбор стиля поля 7) Тут нам надо будет создать свойства для размера (38, 39, 40 и т.д.) Далее нам надо будет сделать шаблоны характеристик что бы они отображались в ценовых позициях , видах номенклатуры , проводить на складе и т.д. 13.jpg 1) Заходим в ‘Нормативно-справочную информацию ‘ 2) Следуем в ‘Виды номенклатуры’ 3) Жмем тот вид номенклатуры в котором необходимо составить ценовые предложения 4) Заходим в характеристики номенклатуры 5) Жмем создать 6) Вносим наименование характеристики, желательно сделать его интуитивно понятным например ‘размер 38’ 7)Выбираем свойство из ранее созданных Так же мы можешь создать свойства для заполнения в самом товаре для этого нам надо зайти в папку номенклатуры (рис 11.jpg) делаем идентично как мы создавали характеристики как на рисунке 12.jpg , эти свойства будут у основного товара а не у его ценовых предложений Далее необходимо создать сам товар 14.jpg 1) Жмем ‘продажи’ 2) Заходим в номенклатуру 3) Жмем кнопку создать 4) Вносим наименование например ‘кпепка’ 5) Жмем на ‘вид номенклатуры’ 6) Выбираем необходимый вид номенклатуры с характеристиками, Так же заполняем все поля далее, если были созданы свойства для номенклатуры, у вас появится в товаре вкладка ‘Дополнительные реквизиты’ , в ней так же можно внеси необходимые параметры. Теперь нам останется внести ценовые предложения для созданного товара 15.jpg 1) Следуем в маркетинг 2) Жмем цена номенклатуры 3) Создаем новую либо редактируем ту которая уже была создана 4) Добавляем товар который только создали в 5) Добавляем цены на характеристики для товара, те характеристики которые не нужны удаляем из списка Сохраняем В товаре который мы создали можем увидеть созданные нами ценовые предложения на рисунке 16.jpg .
Вот собственно и все , надеюсь эта инструкция еще кому то будет полезна при тестировании интеграции либо при наполнении . Для тех кто хочет расширить функционал интеграции рекомендую модуль 1с инструменты. Первоисточник тут. Если нужна помощь по настройке обращайтесь.
Бонус к статье: Видео урок: Интеграция каталога 1С УТ 11 и 1С-Битрикс за 30 минут.
Есть 1С УТ, учет в ней ведется по артикулам уже два года, за это время много документов и так далее. Работа с поставщиками выстроена таким же образом. Хотим сделать сайт на Битриксе. Товары на сайт будут выгружаться из этой 1С. Нюанс, на сайте товары должны быть объединены по сериям(общему доп реквизиту). Как лучше это организовать, чтобы не перепиливать половину функционала Битрикса и при этом оставить учет в 1С в том же виде?
Когда у вас есть живой интернет-магазин и на нем идут постоянные покупки "заглянувшими" покупателями, не хочется чтобы это была его первая и последняя покупка, поэтому было бы не плохо предложить ему подписаться на новости и акции , вдруг его еще что нибудь заинтересует
Для этого в шаблоне компонента sale.order.ajax в файле props.php разместим код, галку в checkbox по умолчанию оставим включенной.
Его вы можете разместить в любом месте , главное что бы он был в теге <fo rm> , эта строка GetMessage("SOA_NEWS" служит за вывод фразы "Подпишитесь на акции" .
Далее в файле init.php разместим обработчик, который подпишет пользователя на все рубрики , вы можете подписать естественно на одну или две по своему желанию, просто выставив свои id в массиве $RUB_ID .
// подпишем пользователя при его согласии
AddEventHandler('sale', 'OnSaleComponentOrderOneStepComplete', 'Subscrible');
function Subscrible($ID, &$arFields)
{
// если галка на подписку стоит
if($_REQUEST['NEWSCHECKED'] == 'Y') {
// в моей форме email находилось именно в поле с именем ORDER_PROP_2
$EMAIL = $_REQUEST['ORDER_PROP_2'];
$USER = $arFields['USER_ID'];
// получим все активные рубрики
CModule::IncludeModule("subscribe");
$RUB_ID = array();
$rsRubric = CRubric::GetList(array(), array("ACTIVE" => "Y"));
while($arRubric = $rsRubric->GetNext()) {
$RUB_ID[] = $arRubric['ID'];
}
/* создадим массив на подписку */
$subscr = new CSubscription;
$arFields = Array(
"USER_ID" => $USER,
"FORMAT" => "html/text",
"EMAIL" => $EMAIL,
"ACTIVE" => "Y",
"RUB_ID" => $RUB_ID,
"SEND_CONFIRM" => "N",
"CONFIRMED" => "Y"
);
$idsubrscr = $subscr->Add($arFields, SITE_ID);
}
}
Вот собственно и все , используйте на здоровье только не мучайте пользователей спамом Первоисточник тут.
Компания «Сотбит» представляет вашему вниманию видео-урок: Интеграция каталога 1С УТ 11 и 1С-Битрикс за 30 минут. Интеграция 1С с интернет-магазином задача очень частая, 1С-битрикс постарался сделать ее как можно проще, но у пользователей возникает постоянно много сложностей. Именно поэтому мы решили сделать данный урок, мы покажем насколько просто можно организовать интеграцию 1С с нуля, на это нам потребуется всего лишь 30 минут.
Семенцов Николай, а если товары были независимо заведены в 1С и в магазине. Жертвовать чем-то нельзя. Я сейчас в заполнил XML_ID на сайте кодами из XML выгрзуки 1C'a. Этого достаточно для интеграции?
Спасибо за урок! Подскажите в видео-уроке сказано при настройке свойств товара выставлять Тип значения "Строка". Почему не использовать, как в реквизитах характеристик товара "Дополнительное значение"?
Модуль Почта России/EMS - расчет и отслеживание уже существует более 2 лет, за это время у нас появилось более сотни платных клиентов. Вначале модуль просто рассчитывал цену доставки, делали это благодаря сервису postcalc.ru, он стабилен и выдает корректные цены, что еще надо для счастья.
При общении с клиентами мы увидели потребность в отслеживание посылок и автоматическом изменение статусов. В начале 2015 года, было внедрено отслеживание посылок, что не могло не радовать текущих и будущих клиентов.Совсем недавно в модуль была включена возможность работы с отгрузками, этот функционал довольно свежий у Битрикс.
Модуль растет, функций становится больше, поэтому для того чтобы разобраться в нем, стало требоваться больше времени.Чтобы упростить освоение модуля мы записали видео-курс по всем возможностям модуля, очень надеемся что он ускорит процесс освоения модуля.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».
// теперь сравним товарары
$i = 0;
foreach($arParams['DETAIL_PROPS_ANALOG'] as $key => $analog_propers) {
//.strtoupper($analog_propers) для тех кто прописывает символьный код свойства при создании маленькими буквами
if($arResult['PROPERTIES'][$analog_propers]['VALUE'] == $element['PROPERTY_'.strtoupper($analog_propers).'_VALUE']) {
$i++;
}
else{}
}
// if ($i!=0) если количество найденых свойст не равно 0
if ($i!=0){
$analog_count_id[$element['ID']] = $i;
}
2.неплохо было при выводе похожих товаров,выводить значения свойств не только по которым мы отбирали похожие товары
Не подскажете, в .parameters.php Вы присваиваете значения для $arProperty_N, $arProperty_X и $arProperty_Y, а далее нигде эти массивы не используются.
Но зачем они тогда нужны?
Дошёл до последнего шага и не понял в какой файл вставлять данный код
foreach($arResult["ANALOG"] as $analog): //ваш шаблон
endforeach;
А можно ли сие чудо заставить выводиться под каждым товаром в списке товаров категории, например после нажатия на кнопку показать похожие товары
По доработке куда писать?