]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Добавляем и убираем разделитель
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 2 Oct 2025 13:43:01 +0000 (16:43 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 2 Oct 2025 13:43:01 +0000 (16:43 +0300)
erp24/services/MarketplaceService.php

index 34c00bac032b9577cdb5918bbb42fd0281ebada6..0781b17cfde3a44c3cf65caf0100aa69f26d7e90 100644 (file)
@@ -635,7 +635,7 @@ class MarketplaceService
             '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,
@@ -644,6 +644,46 @@ class MarketplaceService
         ];
     }
 
+    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);
@@ -2007,7 +2047,8 @@ class MarketplaceService
                     // Извлекаем название и количество из второго <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>