@JyriG

Как сделать так, чтобы скрипт импорта не тупил?

На данный момент, скрипт импорта товара в Woocommerce магазине считывает размеры с SKU. Например, с SKU “MN1001331023/064_L” сначала убирается всё, что слева / и берется Размер L в конце. Итог - товару присвоен размер L, однако,

Есть такие SKU как ADRA0000344_157cm. С ними на данный момент ничего не делается, а надо, чтобы в них обрабатывался 157cm и вносился в размеры. Надо дополнить в скрипт правило, что если в sku есть “/”, то тогда SKU обрабатывается нужным образом. Если нету данного символа, то тогда значение справа после символа “_” пойдет дальше по скрипту так же, как и значение L в первом варианте.

Несколько отвечающих за это строк импорта:
foreach ($products as $k => $p)
{
	$r['sku'] = mb_trim(mb_strtoupper(gd($p, 'code')));
	$r['sizes'] = [];
	$arr = explode('/', $r['sku']);
	$r['sku'] = mb_trim(array_shift($arr));
	
	if ($arr)
	{
		$arr = explode('_', array_pop($arr));

		array_shift($arr);
		if ($arr) 
		{
			$arr = explode('_', array_shift($arr));
			if (sizeof($arr) > 1) [$from, $to] = $arr;
			else $from = $to = $arr[0];

			$finded_sizes[$from] = $finded_sizes[$to] = true;
			
			$found = false;
			foreach ($all_sizes as $size)
			{
				$size = mb_trim($size);
				if ($size == $from) $found = true;
				if ($found) 
				{
					$r['sizes'][] = $size;
					$used_sizes[slugify($size)] = $size;
				}
				if ($size == $to) break;
			}
		}
	}
...


Если кто-то действительно может помочь мне и дать рабочее решение, то он будет официально считаться королем php :)
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Блииииии-и-и-и-ииин... Ну нельзя же так!

foreach ($products as $k => $p)
{
    if (preg_match("/^([A-Z0-9]+)\/([0-9]+)_L$/si", $p, $arr) OR preg_match("/^([A-Z0-9]+)_([0-9]+)cm$/si", $p, $arr))
    {
        [$from, $to] = [$arr[1], $arr[2]];
        //.........
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
XXXXPro
@XXXXPro
Fullstack Web developer
Регулярные выражения вам в помощь. Код примерно такой (добавлять в конец приведённого фрагмента):
if (strpos($r['sku'],'/')===false && preg_match('|_(\d+cm)$|',$r['sku'],$match) {
  $r['sizes'][]=$match[1];
}

Если я правильно понял, что размеры нужно собрать в $r['sizes'], а не в $size, и размеры могут быть только в cm, а не в каких-то других единицах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы