1. Шаблон кастомизирован мною внешне, никаких изменений в функционал не вносилось.
Вот init.php
<?
/*
You can place here your functions and event handlers
AddEventHandler("module", "EventName", "FunctionName");
function FunctionName(params)
{
//code
}
*/
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');
}
}
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'];
}
}
}
?>
Это откуда-то из местных блогов, для передачи веса в предложения.
Вообще в сайт вносилось много изменений. из последнего, это добавление фильтр и сортировки в каталог, но сильно сомневаюсь в том, что это могло повлиять + изменения в компонент фильтра (сортировка выпадающего списка по алфавиту)