'description' => $product->description,
'imageUrl' => self::getProductImageUrl($product->image_id),
'date' => $product->date,
- 'displayName' => $product->display_name,
+ 'displayName' => self::processDisplayName($product->display_name),
'externalImageUrl' => $product->external_image_url ?? self::getProductImageUrl($product->image_id),
'productUrl' => $product->product_url ?? self::getProductLinkByGuid($product->guid),
'flowwowCategory' => $product->flowwow_category,
];
}
+ private static function processDisplayName($displayName)
+ {
+ // Проверяем, есть ли артикул в скобках
+ if (preg_match('/\(([^)]+)\)/', $displayName, $matches)) {
+ $article = $matches[1];
+
+ // Разделяем артикул на буквенную и цифровую части и добавляем дефис
+ $processedArticle = preg_replace('/^([A-Za-z]+)([0-9]+)$/', '$1-$2', $article);
+
+ // Заменяем старый артикул на новый в названии
+ $processedDisplayName = str_replace('(' . $article . ')', '(' . $processedArticle . ')', $displayName);
+
+ return $processedDisplayName;
+ }
+
+ // Если артикула в скобках нет, возвращаем оригинал
+ return $displayName;
+ }
+
+ private static function normalizeArticleInName($name)
+ {
+ // Проверяем, есть ли артикул в скобках
+ if (preg_match('/\(([^)]+)\)/', $name, $matches)) {
+ $article = $matches[1];
+
+ // Если артикул содержит дефис, убираем его
+ if (strpos($article, '-') !== false) {
+ $normalizedArticle = str_replace('-', '', $article);
+
+ // Заменяем артикул с дефисом на артикул без дефиса
+ $normalizedName = str_replace('(' . $article . ')', '(' . $normalizedArticle . ')', $name);
+
+ return $normalizedName;
+ }
+ }
+
+ // Если артикула в скобках нет или он уже без дефиса, возвращаем оригинал
+ return $name;
+ }
+
public static function getProductImageUrl($imageId)
{
$image = Images::findOne($imageId);
// Извлекаем название и количество из второго <td>
$tds = $itemsRow->find('td');
if (count($tds) >= 2) {
- $itemData['name'] = trim(str_replace("\u{00A0}", ' ', strip_tags(preg_replace('/\s+/', ' ', $tds[1]->find('p', 0)->innerText()))));
+ $rawName = trim(str_replace("\u{00A0}", ' ', strip_tags(preg_replace('/\s+/', ' ', $tds[1]->find('p', 0)->innerText()))));
+ $itemData['name'] = self::normalizeArticleInName($rawName);
$itemData['count'] = trim(str_replace(["\u{00A0}", 'шт.'], '', strip_tags(preg_replace('/\s+/', '', $tds[1]->find('p', 1)->innerText()))));
}
// Извлекаем цену из третьего <td>