Цитата |
---|
Денис Сон написал: Также можете сюда привести весь кусок кода, может где-то очепятка.. |
вот код init.php
<?
//Склоняем числительные инф. $int - число, $expressions - массив н.р. $expressions = Array("0"=>"программа", "1"=>"программы", "2"=>"программ") -->>
function declensionOfWords($int, $expressions)
{
if (count($expressions) < 3) $expressions[2] = $expressions[1];
settype($int, "integer");
$count = $int % 100;
if ($count >= 5 && $count <= 20) {
$result = $expressions['2'];
} else {
$count = $count % 10;
if ($count == 1) {
$result = $expressions['0'];
} elseif ($count >= 2 && $count <= 4) {
$result = $expressions['1'];
} else {
$result = $expressions['2'];
}
}
return $result;
}
// <<-- Склоняем числительные
AddEventHandler('catalog', 'OnBeforePriceUpdate', "OnBeforePriceUpdateHandler");
function OnBeforePriceUpdateHandler($id, &$arFields)
{
CModule::IncludeModule("iblock");
$id_element_arfilds = $arFields["PRODUCT_ID"];
$price_new = $arFields["PRICE"];
if(!empty($id_element_arfilds) && !empty($price_new)){
$arSelect = Array("ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.PROPERTY_PRICE_SORT", "PROPERTY_PRICE_SORT");
$arFilter = Array("ACTIVE" =>"Y", "ID" => $id_element_arfilds);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$id_element = -1;
while($ob = $res->GetNext())
{
if(empty($ob["PROPERTY_CML2_LINK_VALUE"])){
if($ob["PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_PRICE_SORT_VALUE"])){
CIBlockElement::SetPropertyValuesEx(
$id_element_arfilds,
"",
array("PRICE_SORT" => $price_new)
);
}
}elseif($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"])){
CIBlockElement::SetPropertyValuesEx(
$ob["PROPERTY_CML2_LINK_VALUE"],
"",
array("PRICE_SORT" => $price_new)
);
}
}
}
}
AddEventHandler('catalog', 'OnBeforePriceAdd', "OnBeforePriceAddHandler");
function OnBeforePriceAddHandler(&$arFields)
{
CModule::IncludeModule("iblock");
$id_element_arfilds = $arFields["PRODUCT_ID"];
$price_new = $arFields["PRICE"];
if(!empty($id_element_arfilds) && !empty($price_new)){
$arSelect = Array("ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.PROPERTY_PRICE_SORT", "PROPERTY_PRICE_SORT");
$arFilter = Array("ACTIVE" =>"Y", "ID" => $id_element_arfilds);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$id_element = -1;
while($ob = $res->GetNext())
{
if(empty($ob["PROPERTY_CML2_LINK_VALUE"])){
if($ob["PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_PRICE_SORT_VALUE"])){
CIBlockElement::SetPropertyValuesEx(
$id_element_arfilds,
"",
array("PRICE_SORT" => $price_new)
);
}
}elseif($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"])){
CIBlockElement::SetPropertyValuesEx(
$ob["PROPERTY_CML2_LINK_VALUE"],
"",
array("PRICE_SORT" => $price_new)
);
}
}
}
}
AddEventHandler("catalog", "OnProductUpdate", "BXOnStoreProductUpdate");
AddEventHandler("catalog", "OnProductAdd", "BXOnStoreProductUpdate");
function BXOnStoreProductUpdate($ID, $arFields) {
CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
$id_element_arfilds = $ID;
if(!empty($id_element_arfilds)){
$arSelect = array("ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.PROPERTY_PRICE_SORT", "PROPERTY_PRICE_SORT");
$arFilter = array("ACTIVE" =>"Y", "ID" => $id_element_arfilds);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$id_element = -1;
while($ob = $res->GetNext())
{
if(empty($ob["PROPERTY_CML2_LINK_VALUE"])){
//элемент
$arSelect2 = array("ID");
$arFilter2 = array("ACTIVE" =>"Y", "PROPERTY_CML2_LINK" => $id_element_arfilds);
$res2 = CIBlockElement::GetList(Array(), $arFilter2, false, false, $arSelect2);
$ids_offers = array();
while($ob2 = $res2->GetNext())
{
$ids_offers[] = $ob2["ID"];
}
if(!empty($ids_offers)){
$db_res = CCatalogProduct::GetList(
array("SORT" => "ASC"),
array("ACTIVE" =>"Y", "ID" => $ids_offers),
false,
array()
);
$count_zero = 0;
while ($ar_res = $db_res->GetNext())
{
if($ar_res["QUANTITY"] == 0){
$count_zero++;
}
}
$status = "Y";
if($count_zero == count($ids_offers)){
$status = "N";
}
CIBlockElement::SetPropertyValuesEx(
$id_element_arfilds,
"",
array("NOTAVAILEBLE" => $status)
);
}else{
//нет торговых предложений
$db_res = CCatalogProduct::GetList(
array("SORT" => "ASC"),
array("ACTIVE" =>"Y", "ID" => $id_element_arfilds),
false,
array()
);
$status = "Y";
if ($ar_res = $db_res->GetNext())
{
if($ar_res["QUANTITY"] == 0){
$status = "N";
}
}
CIBlockElement::SetPropertyValuesEx(
$id_element_arfilds,
"",
array("NOTAVAILEBLE" => $status)
);
}
}else{
//offers
$id_element_arfilds = $ob["PROPERTY_CML2_LINK_VALUE"];
$arSelect2 = array("ID");
$arFilter2 = array("ACTIVE" =>"Y", "PROPERTY_CML2_LINK" => $id_element_arfilds);
$res2 = CIBlockElement::GetList(Array(), $arFilter2, false, false, $arSelect2);
$ids_offers = array();
while($ob2 = $res2->GetNext())
{
$ids_offers[] = $ob2["ID"];
}
if(!empty($ids_offers)){
$db_res = CCatalogProduct::GetList(
array("SORT" => "ASC"),
array("ACTIVE" =>"Y", "ID" => $ids_offers),
false,
array()
);
$count_zero = 0;
while ($ar_res = $db_res->GetNext())
{
if($ar_res["QUANTITY"] == 0){
$count_zero++;
}
}
$status = "Y";
if($count_zero == count($ids_offers)){
$status = "N";
}
CIBlockElement::SetPropertyValuesEx(
$id_element_arfilds,
"",
array("NOTAVAILEBLE" => $status)
);
}else{
//нет торговых предложений
$db_res = CCatalogProduct::GetList(
array("SORT" => "ASC"),
array("ACTIVE" =>"Y", "ID" => $id_element_arfilds),
false,
array()
);
$status = "Y";
if ($ar_res = $db_res->GetNext())
{
if($ar_res["QUANTITY"] == 0){
$status = "N";
}
}
CIBlockElement::SetPropertyValuesEx(
$id_element_arfilds,
"",
array("NOTAVAILEBLE" => $status)
);
}
}
}
}
}
function dump($var, $die = false) {
echo '<pre>';
print_r($var);
echo '</pre>';
if ($die) die;
}
if(!function_exists("array_column"))
{
function array_column($array,$column_name, $column = '')
{
return array_map(function($element) use($column_name){return $element[$column_name];}, $array);
}
}