powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сms битрикс. Скрипт php подстановки картинок для цветов
1 сообщений из 1, страница 1 из 1
Сms битрикс. Скрипт php подстановки картинок для цветов
    #39767851
konst1231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
Я занимаюсь 1с, в php не силен, перестала работать подстановка картинок для цветов товаров (), для решения этой задачи, ранее разработчик со стороны сайта делал скрипт (код ниже). Сейчас связи нет с автором скрипта. В 1с есть несколько свойств где хранятся цвета с ID:

Код: php
1.
2.
3.
4.
5.
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с мне необходимо выгрузить)? У нас есть у торговых предложений два свойства: цвет и цвет производителя, у товаров тоже есть свойство цвет. Вот код скрипта:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
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;
    }
}
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сms битрикс. Скрипт php подстановки картинок для цветов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]