Задача: Сделать поиск более вариантивным, потому что кто-то артикул пишет не целиком, кто-то с пробелами, кто-то с тире, чтобы поиск норм подбирал товары. Решение: Добавить тегов в товар |
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "MyOnBeforeIBlockElementAdd"); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "MyOnBeforeIBlockElementUpdate"); function MyOnBeforeIBlockElementAdd(&$arFields){ AddTags($arFields); } function MyOnBeforeIBlockElementUpdate(&$arFields){ AddTags($arFields); } function AddTags(&$arFields){ if(($arFields["IBLOCK_ID"] == IBLOCK_ID)&&($arFields["ACTIVE"]=="Y")){ $name = $arFields["NAME"]; $alph = 'abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьюэя'; $alph1 = str_split($alph); $numbers = '1234567890'; $name = str_replace(array("(",")",",","/",";")," ", $name); $name = str_replace(" "," ",$name); $name = str_replace(" "," ",$name); $name = str_replace(" "," ",$name); $arS1 = explode(" ", strtolower($name)); $arS = array(); foreach ($arS1 as $s) { // echo $s; $s = trim($s); $s2 = str_split($s); $flA = false; $flN = false; foreach ($s2 as $w) { if(in_array($w, $alph1)){ $flA = true; } elseif(stripos($numbers, $w)!==false){ $flN = true; } if($flN && $flA){ $arS[] = $s; break; } } } $arS1 = array(); foreach ($arS as $s) { //echo $s."<br>"; $s1 = str_split($s); $s2 = ''; $flA = false; $flN = false; $i = 0; foreach ($s1 as $w) { if(in_array($w, $alph1)){ //if(stripos($alph, $w) !== false){ if(!$flA){ $flA = true; $flN = false; if($s2 != ''){ $arS1[] = $s2; $arS1[] = substr($s, 0,$i); $arS1[] = substr($s, $i); } $s2 = ''; } $s2 .= $w; } elseif(stripos($numbers, $w) !== false){ if(!$flN){ $flN = true; $flA = false; if($s2 != ''){ $arS1[] = $s2; $arS1[] = substr($s, 0,$i); $arS1[] = substr($s, $i); } $s2 = ''; } $s2 .= $w; } else{ $flA = false; $flN = false; if($s2 != ''){ $arS1[] = $s2; $s2 = ''; } } $i++; } if($s2 != ''){ $arS1[] = $s2; $s2 = ''; } if(stripos($s, "-") !== false){ $arS1 = array_merge($arS1, explode("-",$s)); } } $s = implode(" ", array_unique($arS1)); $arFields["TAGS"] = $s; } } |