Здравствуйте,
Я занимаюсь 1с, в php не силен, перестала работать подстановка картинок для цветов товаров (), для решения этой задачи, ранее разработчик со стороны сайта делал скрипт (код ниже). Сейчас связи нет с автором скрипта. В 1с есть несколько свойств где хранятся цвета с ID:
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с мне необходимо выгрузить)? У нас есть у торговых предложений два свойства: цвет и цвет производителя, у товаров тоже есть свойство цвет. Вот код скрипта:
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;
}
}
|