Добрый день!
Вариант есть) По крайней мере у меня работает
Создаем в инфоблоке поле "Цена для сортировки" с кодом PRICE
Создаем файл pricing.php например
76 - id инфоблока предложений
68 - id инфоблока основного каталога
CATALOG_PRICE_448 - 448 - id цены
Поскольку мне нужно, чтобы так же передавался вес (для расчета доставки), использую код найденный здесь (в init.php)
плюс проставление автоматом "Уменьшать количество при заказе" 1ccatalog.php
Вариант есть) По крайней мере у меня работает
Создаем в инфоблоке поле "Цена для сортировки" с кодом PRICE
Создаем файл pricing.php например
| Код |
|---|
<?
if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
if (!CModule::IncludeModule('iblock') or !CModule::IncludeModule('catalog'))
{
die ('Ошибка в загрузки модулей...');
}
?>
<?
$main_cat_res = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => 68),
false
);
while($main_cat = $main_cat_res->Fetch())
{
$id_pod = $main_cat['ID'];
$arSelect = Array("PRICE_MATRIX", "CATALOG_PRICE_448", "IBLOCK_ID");
$arFilter = Array("IBLOCK_ID"=>76, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_CML2_LINK"=>array($id_pod), ">CATALOG_PRICE_448" =>0);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while ($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$mprops = CIBlockElement::GetProperty(68, $main_cat['ID'], Array("sort"=>"asc"), Array("CODE"=>"PRICE"));
while($main_cat_props = $mprops->Fetch())
{
//echo $main_cat['ID'].' - ';echo $arFields["CATALOG_PRICE_448"].' - ';echo $main_cat_props['VALUE'].'<br/>';
if($main_cat_props['VALUE'] != $arFields["CATALOG_PRICE_448"])
{
CIBlockElement::SetPropertyValues(
$main_cat['ID'],
68,
$arFields["CATALOG_PRICE_448"],
PRICE
);
}
}
}
}
?>
|
76 - id инфоблока предложений
68 - id инфоблока основного каталога
CATALOG_PRICE_448 - 448 - id цены
Поскольку мне нужно, чтобы так же передавался вес (для расчета доставки), использую код найденный здесь (в init.php)
| Код |
|---|
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "SaveWeightToProp_1с");
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "SaveWeightToProp_1с");
AddEventHandler("sale", "OnProductAdd", "GetWeightFromProp_1с");
AddEventHandler("catalog", "OnBeforeProductUpdate", "GetWeightFromProp_1с_");
function SaveWeightToProp_1с(&$arFields)
{
//передаётся ли значение веса? импорт из 1С?
if ((isset($arFields['BASE_WEIGHT']))&&(@$_REQUEST['mode']=='import'))
{
// а место куда можно сохранить имеется?
$properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("IBLOCK_ID"=>$arFields['IBLOCK_ID'],"CODE"=>'PROP_WEIGHT'));
if(!$prop_fields = $properties->Fetch())
{
//нет свойства, придётся добавить
$arFields = Array(
"NAME" => "Вес",
"ACTIVE" => "Y",
"SORT" => "100",
"CODE" => "PROP_WEIGHT",
"PROPERTY_TYPE" => "S",
"IBLOCK_ID" => $arFields['IBLOCK_ID']
);
$ibp = new CIBlockProperty;
$PropID = $ibp->Add($arFields);
}
//значение веса передаётся и место куда сохранить тоже есть - сохраняем=)
CIBlockElement::SetPropertyValues($arFields['ID'], $arFields['IBLOCK_ID'], $arFields['BASE_WEIGHT'], 'PROP_WEIGHT');
}
global $USER;
if(!is_object($USER))
{
$USER = new CUser;
}
require_once($_SERVER['DOCUMENT_ROOT'].'/1ccatalog.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/pricing.php');
unset($USER);
}
function GetWeightFromProp_1с(&$ID,$Fields)
{
CModule::IncludeModule('catalog');
$res=CIBlockElement::GetByID($ID);
$res_ar=$res->Fetch();
$db_props = CIBlockElement::GetProperty($res_ar['IBLOCK_ID'], $ID,"sort", "asc", Array("CODE"=>'CML2_LINK'));
if ($prop=$db_props->GetNext())
{
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"),Array("ID"=>$prop['VALUE']),false, Array(),Array("IBLOCK_ID","PROPERTY_PROP_WEIGHT"));
if($res_ar=$res->GetNext())
{
$w=$res_ar['PROPERTY_PROP_WEIGHT_VALUE'];
$ProductFields=Array('WEIGHT'=>$w);
CCatalogProduct::Update($ID,$ProductFields);
}
}
}
function GetWeightFromProp_1с_(&$ID,$Fields)
{
CModule::IncludeModule('catalog');
$res=CIBlockElement::GetByID($ID);
$res_ar=$res->Fetch();
$db_props = CIBlockElement::GetProperty($res_ar['IBLOCK_ID'], $ID,"sort", "asc", Array("CODE"=>'CML2_LINK'));
if ($prop=$db_props->GetNext())
{
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"),Array("ID"=>$prop['VALUE']),false, Array(),Array("IBLOCK_ID","PROPERTY_PROP_WEIGHT"));
if($res_ar=$res->GetNext())
{
$Fields['WEIGHT']=$res_ar['PROPERTY_PROP_WEIGHT_VALUE'];
}
}
}
|
плюс проставление автоматом "Уменьшать количество при заказе" 1ccatalog.php
| Код |
|---|
<?
if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
//
// Загрузка модулей Битрикса
//
if (!CModule::IncludeModule('iblock') or !CModule::IncludeModule('catalog'))
{
die ('Ошибка в загрузки модулей...');
}
//
// work.qtrace -> Конфигурация запроса
//
$e = false;
$arFilter = array (
"IBLOCK_ID" => 76,
"IBLOCK_TYPE" => "1c_catalog",
);
$arSelect = array("ID");
//
// work.qtrace -> Запрос
//
$getQuery = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
//
// work.qtrace -> Обновляем параметры
//
if ($getQuery->SelectedRowsCount() > 0)
{
while ($arFields = $getQuery->GetNext())
{
$arProperty = array
(
'QUANTITY_TRACE' => 'Y',
);
if (!CCatalogProduct::Update($arFields['ID'], $arProperty))
{
$e = true;
echo "<p style='font: 1.3em Trebuchet MS, Tahoma, Sans-serif; color: #ff0000;'>Error — ".$arFields['ID']."</p>";
}
}
}
else
{
echo "<p style='font: 1.3em Trebuchet MS, Tahoma, Sans-serif; color: #ff0000;'>Not found elements...</p>";
}
if ($e === false)
{
echo "<p style='font: 1.3em Trebuchet MS, Tahoma, Sans-serif; color: #666666;'>Complete...</p>";
}
?> |