-
+
{{ attr.name }}
{{ attr.text }}
@@ -134,15 +123,19 @@
style="padding-bottom: calc(0.5rem + env(safe-area-inset-bottom));">
-
@@ -163,11 +156,15 @@
>
-
-
+
+
-
-
+
+
{{ btnText }}
@@ -197,32 +194,25 @@
-
-
-
diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Handlers/ProductsHandler.php b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Handlers/ProductsHandler.php
index 09086e6..99dffb2 100755
--- a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Handlers/ProductsHandler.php
+++ b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Handlers/ProductsHandler.php
@@ -66,4 +66,24 @@ class ProductsHandler
'data' => $product,
]);
}
+
+ public function getProductImages(Request $request): JsonResponse
+ {
+ $productId = (int) $request->get('id');
+
+ try {
+ $images = $this->productsService->getProductImages($productId);
+ } catch (EntityNotFoundException $exception) {
+ return new JsonResponse([
+ 'message' => 'Product with id ' . $productId . ' not found',
+ ], Response::HTTP_NOT_FOUND);
+ } catch (Exception $exception) {
+ $this->logger->error('Could not load images for product ' . $productId, ['exception' => $exception]);
+ $images = [];
+ }
+
+ return new JsonResponse([
+ 'data' => $images,
+ ]);
+ }
}
diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/ProductsService.php b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/ProductsService.php
index bd3df24..02ec6f0 100755
--- a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/ProductsService.php
+++ b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/ProductsService.php
@@ -149,10 +149,19 @@ class ProductsService
$productsImagesMap = [];
foreach ($productsImages as $item) {
- $productsImagesMap[$item['product_id']][] = [
- 'url' => $this->image->make($item['image'])->contain($imageWidth, $imageHeight)->url(),
- 'alt' => 'Product Image',
- ];
+ $productId = $item['product_id'];
+
+ // Ограничиваем количество картинок для каждого товара до 3
+ if (!isset($productsImagesMap[$productId])) {
+ $productsImagesMap[$productId] = [];
+ }
+
+ if (count($productsImagesMap[$productId]) < 2) {
+ $productsImagesMap[$productId][] = [
+ 'url' => $this->image->make($item['image'])->cover($imageWidth, $imageHeight)->url(),
+ 'alt' => 'Product Image',
+ ];
+ }
}
$debug = [];
@@ -234,10 +243,6 @@ class ProductsService
$this->oc->load->model('catalog/review');
$this->oc->load->model('tool/image');
- $imageThumbWidth = 500;
- $imageThumbHeight = 500;
- $imageFullWidth = 1000;
- $imageFullHeight = 1000;
$configTax = $this->oc->config->get('config_tax');
$product_info = $this->oc->model_catalog_product->getProduct($productId);
@@ -271,35 +276,7 @@ class ProductsService
$data['stock'] = $this->oc->language->get('text_instock');
}
- $allImages = [];
- if ($product_info['image']) {
- $allImages[] = $product_info['image'];
- }
- $results = $this->oc->model_catalog_product->getProductImages($productId);
- foreach ($results as $result) {
- $allImages[] = $result['image'];
- }
-
- $images = [];
- foreach ($allImages as $imagePath) {
- try {
- [$width, $height] = $this->image->make($imagePath)->getRealSize();
- $images[] = [
- 'thumbnailURL' => $this->image
- ->make($imagePath)
- ->contain($imageThumbWidth, $imageThumbHeight)
- ->url(),
- 'largeURL' => $this->image->make($imagePath)->resize($imageFullWidth, $imageFullHeight)->url(),
- 'width' => $width,
- 'height' => $height,
- 'alt' => Str::htmlEntityEncode($product_info['name']),
- ];
- } catch (Exception $e) {
- $this->logger->error($e->getMessage(), ['exception' => $e]);
- }
- }
-
- $data['images'] = $images;
+ $data['images'] = [];
$price = $this->priceCalculator->format($product_info['price'], $product_info['tax_class_id']);
$priceNumeric = $this->priceCalculator->getPriceNumeric($product_info['price'], $product_info['tax_class_id']);
@@ -441,4 +418,49 @@ class ProductsService
->where('product_to_category.product_id', '=', $productId)
->firstOrNull();
}
+
+ public function getProductImages(int $productId): array
+ {
+ $imageThumbWidth = 500;
+ $imageThumbHeight = 500;
+ $imageFullWidth = 1000;
+ $imageFullHeight = 1000;
+
+ $product_info = $this->oc->model_catalog_product->getProduct($productId);
+
+ if (! $product_info) {
+ throw new EntityNotFoundException('Product with id ' . $productId . ' not found');
+ }
+
+ $allImages = [];
+ if ($product_info['image']) {
+ $allImages[] = $product_info['image'];
+ }
+
+ $results = $this->oc->model_catalog_product->getProductImages($productId);
+ foreach ($results as $result) {
+ $allImages[] = $result['image'];
+ }
+
+ $images = [];
+ foreach ($allImages as $imagePath) {
+ try {
+ [$width, $height] = $this->image->make($imagePath)->getRealSize();
+ $images[] = [
+ 'thumbnailURL' => $this->image
+ ->make($imagePath)
+ ->contain($imageThumbWidth, $imageThumbHeight)
+ ->url(),
+ 'largeURL' => $this->image->make($imagePath)->resize($imageFullWidth, $imageFullHeight)->url(),
+ 'width' => $width,
+ 'height' => $height,
+ 'alt' => Str::htmlEntityEncode($product_info['name']),
+ ];
+ } catch (Exception $e) {
+ $this->logger->error($e->getMessage(), ['exception' => $e]);
+ }
+ }
+
+ return $images;
+ }
}
diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/src/routes.php b/module/oc_telegram_shop/upload/oc_telegram_shop/src/routes.php
index 9bfc0b2..7301bcc 100755
--- a/module/oc_telegram_shop/upload/oc_telegram_shop/src/routes.php
+++ b/module/oc_telegram_shop/upload/oc_telegram_shop/src/routes.php
@@ -37,4 +37,5 @@ return [
'webhook' => [TelegramHandler::class, 'webhook'],
'etlCustomers' => [ETLHandler::class, 'customers'],
'etlCustomersMeta' => [ETLHandler::class, 'getCustomersMeta'],
+ 'getProductImages' => [ProductsHandler::class, 'getProductImages'],
];