From 63adf96908137ab0c173415f77278ee7483a2fb8 Mon Sep 17 00:00:00 2001 From: Nikita Kiselev Date: Sun, 3 Aug 2025 18:15:19 +0300 Subject: [PATCH] feat(product): display attributes --- .../src/Decorators/OcRegistryDecorator.php | 1 + .../src/Handlers/ProductsHandler.php | 15 +++++++++++-- spa/src/views/Product.vue | 22 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Decorators/OcRegistryDecorator.php b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Decorators/OcRegistryDecorator.php index 6c2e3a6..a467fa4 100755 --- a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Decorators/OcRegistryDecorator.php +++ b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Decorators/OcRegistryDecorator.php @@ -9,6 +9,7 @@ use Registry; /** * @property Loader $load * @property Cart $cart + * @property \ModelCatalogProduct $model_catalog_product */ class OcRegistryDecorator { 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 ca512d0..19849de 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 @@ -3,6 +3,7 @@ namespace App\Handlers; use App\Adapters\OcModelCatalogProductAdapter; +use App\Decorators\OcRegistryDecorator; use Cart\Currency; use Cart\Tax; use Openguru\OpenCartFramework\Config\Settings; @@ -23,6 +24,7 @@ class ProductsHandler private Settings $settings; private OcModelCatalogProductAdapter $ocModelCatalogProduct; private ImageToolInterface $ocImageTool; + private OcRegistryDecorator $oc; public function __construct( Builder $queryBuilder, @@ -30,7 +32,8 @@ class ProductsHandler Tax $tax, Settings $settings, OcModelCatalogProductAdapter $ocModelCatalogProduct, - ImageToolInterface $ocImageTool + ImageToolInterface $ocImageTool, + OcRegistryDecorator $registry ) { $this->queryBuilder = $queryBuilder; $this->currency = $currency; @@ -38,6 +41,7 @@ class ProductsHandler $this->settings = $settings; $this->ocModelCatalogProduct = $ocModelCatalogProduct; $this->ocImageTool = $ocImageTool; + $this->oc = $registry; } public function handle(Request $request): JsonResponse @@ -185,7 +189,6 @@ class ProductsHandler $product = $this->queryBuilder->newQuery() ->select([ 'products.product_id' => 'product_id', - 'products.quantity' => 'product_quantity', 'product_description.name' => 'product_name', 'product_description.description' => 'product_description', 'products.price' => 'price', @@ -264,6 +267,7 @@ class ProductsHandler 'quantity' => $product['quantity'], 'images' => $images, 'options' => $this->loadProductOptions($product), + 'attributes' => $this->loadProductAttributes($product['product_id']), ]; return new JsonResponse([ @@ -323,4 +327,11 @@ class ProductsHandler return $result; } + + private function loadProductAttributes(int $productId): array + { + $this->oc->load->model('catalog/product'); + + return $this->oc->model_catalog_product->getProductAttributes($productId); + } } diff --git a/spa/src/views/Product.vue b/spa/src/views/Product.vue index 137cdcf..7afe143 100644 --- a/spa/src/views/Product.vue +++ b/spa/src/views/Product.vue @@ -32,6 +32,28 @@

+ +
+

Характеристики

+ +
+
+ + + + +
+
+
+