|
|
Добрый день! Вариант есть) По крайней мере у меня работает Создаем в инфоблоке поле "Цена для сортировки" с кодом 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>";
}
?> |
|