Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Сms битрикс. Скрипт php подстановки картинок для цветов  [new]
konst1231
Member

Откуда:
Сообщений: 18
Здравствуйте,
Я занимаюсь 1с, в php не силен, перестала работать подстановка картинок для цветов товаров (), для решения этой задачи, ранее разработчик со стороны сайта делал скрипт (код ниже). Сейчас связи нет с автором скрипта. В 1с есть несколько свойств где хранятся цвета с ID:

const COLOR_OLD_ID_GOOD = 796;
    const COLOR_OLD_ID_OFFER = 835;
    const COLOR_NEW_ID_GOOD = 742;
    const COLOR_NEW_ID_OFFER = 788;
    const COLOR_HB_ID = 3;


Мне нужно эти свойства правильно заполнить, чтобы картинка для цвета подставлялась, раньше работало, а теперь это знание утеряно). Может кто подскажет при каких условиях скрипт подставялет картинку (что из 1с мне необходимо выгрузить)? У нас есть у торговых предложений два свойства: цвет и цвет производителя, у товаров тоже есть свойство цвет. Вот код скрипта:

AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("AddColorClass", "OnBeforeIBlockElementAddHandler"));
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("AddColorClass", "OnBeforeIBlockElementAddHandler"));
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("AddBrandClass", "OnBeforeIBlockElementAddHandler"));
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("AddBrandClass", "OnBeforeIBlockElementAddHandler"));

use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;

class AddColorClass
{
    const CATALOG_IBLOCK_ID = 52; //вместо 12 подставить ID инфоблока Каталога
    const CATALOG_IBLOCK_ID_OFFER = 53;
    const COLOR_OLD_ID_GOOD = 796;
    const COLOR_OLD_ID_OFFER = 835;
    const COLOR_NEW_ID_GOOD = 742;
    const COLOR_NEW_ID_OFFER = 788;
    const COLOR_HB_ID = 3;
                       
    public static function translit($str) {
        $rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я',' ','(',')','.',',','/','"','\'','+','"');
        $lat = array('a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', '-', '', '','-','-','-','','','-','');
        return mb_strtolower(str_replace($rus, $lat, $str));
    }
    
    function OnBeforeIBlockElementAddHandler(&$arFields)
    {
        //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($arFields, true), FILE_APPEND);
        if(($arFields["IBLOCK_ID"] == self::CATALOG_IBLOCK_ID))
        {
            $elementId = $arFields['ID'];
            $colorName = '';
            
            //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log1.txt", var_export($arFields, true), FILE_APPEND);
            foreach ($arFields['PROPERTY_VALUES'][self::COLOR_OLD_ID_GOOD] as $value) 
            {                
               if (strlen($value['VALUE'])>0)
                    $colorName = $value['VALUE'];
                //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($colorName, true), FILE_APPEND);
            }
                        
            $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::CATALOG_IBLOCK_ID, "PROPERTY_ID"=>self::COLOR_OLD_ID_GOOD));
            $arProp = array();
            while($enum_fields = $property_enums->GetNext())
            {                   
                $arProp[$enum_fields["ID"]] = $enum_fields["VALUE"];
            }

            if(isset($arProp[$colorName]) && !empty($arProp[$colorName]))
                $colorName = $arProp[$colorName];
                            
            if (strlen($colorName)>0)
            {
                CModule::IncludeModule('highloadblock');
                CModule::IncludeModule('iblock');

                global $APPLICATION;

                $hlblock = HL\HighloadBlockTable::getById(self::COLOR_HB_ID)->fetch();
                $entity = HL\HighloadBlockTable::compileEntity($hlblock);
                $entity_data_class = $entity->getDataClass();
                
                $name = trim($colorName);
                $link_name = AddColorClass::translit($name);
    
                $vendors_res = $entity_data_class::getList(array(
                    'filter' => array('UF_XML_ID' => $link_name),
                    'select' => array('ID'),
                    'order' => array()
                )); 
                
                               
                if($vendors_ob = $vendors_res->Fetch()){}
                else
                {
                    $result = $entity_data_class::add(array(
                        'UF_NAME'     => $name,
                        'UF_XML_ID'   => $link_name,
                    ));
                }

                foreach ($arFields['PROPERTY_VALUES'][self::COLOR_NEW_ID_GOOD] as $k => $value) {
                    $arFields["PROPERTY_VALUES"][self::COLOR_NEW_ID_GOOD][$k] = array('VALUE' => $link_name);
                }              
                
                return true;
            }
        }
        
        if(($arFields["IBLOCK_ID"] == self::CATALOG_IBLOCK_ID_OFFER))
        {
            $elementId = $arFields['ID'];
            $colorName = '';
            
            foreach ($arFields['PROPERTY_VALUES'][self::COLOR_OLD_ID_OFFER] as $value) 
            {                
               if (strlen($value['VALUE'])>0)
                    $colorName = $value['VALUE'];
            }
                        
            $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::CATALOG_IBLOCK_ID_OFFER, "PROPERTY_ID"=>self::COLOR_OLD_ID_OFFER));
            $arProp = array();
            while($enum_fields = $property_enums->GetNext())
            {                   
                $arProp[$enum_fields["ID"]] = $enum_fields["VALUE"];
            }

            if(isset($arProp[$colorName]) && !empty($arProp[$colorName]))
                $colorName = $arProp[$colorName];
                            
            if (strlen($colorName)>0)
            {
                CModule::IncludeModule('highloadblock');
                CModule::IncludeModule('iblock');

                global $APPLICATION;

                $hlblock = HL\HighloadBlockTable::getById(self::COLOR_HB_ID)->fetch();
                $entity = HL\HighloadBlockTable::compileEntity($hlblock);
                $entity_data_class = $entity->getDataClass();
                
                $name = trim($colorName);
                $link_name = AddColorClass::translit($name);
    
                $vendors_res = $entity_data_class::getList(array(
                    'filter' => array('UF_XML_ID' => $link_name),
                    'select' => array('ID'),
                    'order' => array()
                )); 
                
                               
                if($vendors_ob = $vendors_res->Fetch()){}
                else
                {
                    $result = $entity_data_class::add(array(
                        'UF_NAME'     => $name,
                        'UF_XML_ID'   => $link_name,
                    ));
                }

                foreach ($arFields['PROPERTY_VALUES'][self::COLOR_NEW_ID_OFFER] as $k => $value) {
                    $arFields["PROPERTY_VALUES"][self::COLOR_NEW_ID_OFFER][$k] = array('VALUE' => $link_name);
                }              
                
                return true;
            }
        }
        return;
    }
}

class AddBrandClass
{
    const CATALOG_IBLOCK_ID = 52; //вместо 12 подставить ID инфоблока Каталога
    const COLOR_OLD_ID_GOOD = 794;
    const COLOR_NEW_ID_GOOD = 784;
    const COLOR_HB_ID = 4;
                       
    public static function translit($str) {
        $rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я',' ','(',')','.',',','/','"','\'','+','"');
        $lat = array('a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', '-', '', '','-','-','-','','','-','');
        return mb_strtolower(str_replace($rus, $lat, $str));
    }
    
    function OnBeforeIBlockElementAddHandler(&$arFields)
    {
        //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($arFields, true), FILE_APPEND);
        if(($arFields["IBLOCK_ID"] == self::CATALOG_IBLOCK_ID))
        {
            $elementId = $arFields['ID'];
            $colorName = '';
            
            //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log1.txt", var_export($arFields, true), FILE_APPEND);
            
            foreach ($arFields['PROPERTY_VALUES'][self::COLOR_OLD_ID_GOOD] as $value) 
            {                
               if (strlen($value['VALUE'])>0)
                    $colorName = $value['VALUE'];
                //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($colorName, true), FILE_APPEND);
            }
                        
            $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::CATALOG_IBLOCK_ID, "PROPERTY_ID"=>self::COLOR_OLD_ID_GOOD));
            $arProp = array();
            while($enum_fields = $property_enums->GetNext())
            {                   
                $arProp[$enum_fields["ID"]] = $enum_fields["VALUE"];
            }

            if(isset($arProp[$colorName]) && !empty($arProp[$colorName]))
                $colorName = $arProp[$colorName];
                            
            if (strlen($colorName)>0)
            {
                CModule::IncludeModule('highloadblock');
                CModule::IncludeModule('iblock');

                global $APPLICATION;

                $hlblock = HL\HighloadBlockTable::getById(self::COLOR_HB_ID)->fetch();
                $entity = HL\HighloadBlockTable::compileEntity($hlblock);
                $entity_data_class = $entity->getDataClass();
                
                $name = trim($colorName);
                $link_name = AddColorClass::translit($name);
    
                $vendors_res = $entity_data_class::getList(array(
                    'filter' => array('UF_XML_ID' => $link_name),
                    'select' => array('ID'),
                    'order' => array()
                )); 
                
                               
                if($vendors_ob = $vendors_res->Fetch()){}
                else
                {
                    $result = $entity_data_class::add(array(
                        'UF_NAME'     => $name,
                        'UF_XML_ID'   => $link_name,
                    ));
                }

                foreach ($arFields['PROPERTY_VALUES'][self::COLOR_NEW_ID_GOOD] as $k => $value) {
                    $arFields["PROPERTY_VALUES"][self::COLOR_NEW_ID_GOOD][$k] = array('VALUE' => $link_name);
                }              
                
                return true;
            }
        }
        return;
    }
}
31 янв 19, 23:50    [21799226]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить