'Not Authorized'], 403); $response->send(); exit; } } /** * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $productsData = []; $collection = new PrestaShopCollection('Product'); foreach ((array)Tools::getValue('plc_id_shop', Shop::getShops(true, null, true)) as $id_shop) { foreach ((array)Tools::getValue('plc_id_lang', Language::getLanguages(false, false, true)) as $id_lang) { foreach ($collection as $p) { $product = new Product((int)$p->id, false, $id_lang, $id_shop); if (!Validate::isLoadedObject($product)) { continue; } if (Tools::getValue('plc_only_active') && !$product->active) { continue; } // Handle products with attribute combinations if ($product->hasAttributes()) { $combinations = $product->getAttributeCombinations($id_lang); foreach ($combinations as $combination) { $index = $product->id . '_' . $combination['id_product_attribute']; if (!isset($productsData[$index])) { $productsData[$index] = [ 'id_lang' => (int)$id_lang, 'id_shop' => (int)$id_shop, 'id_product' => (int)$product->id, 'id_product_attribute' => (int)$combination['id_product_attribute'], 'active' => (bool)$product->active, 'link' => $this->context->link->getProductLink( $product, null, null, null, (int)$id_lang, (int)$id_shop, (int)$combination['id_product_attribute'], false ), ]; // Conditionally add data based on URL flags Tools::getValue('plc_name') ? $productsData[$index]['name'] = $product->name : null; Tools::getValue('plc_link_rewrite') ? $productsData[$index]['link_rewrite'] = $product->link_rewrite : null; Tools::getValue('plc_description') ? $productsData[$index]['description'] = $product->description : null; Tools::getValue('plc_description_short') ? $productsData[$index]['description_short'] = $product->description_short : null; Tools::getValue('plc_meta_title') ? $productsData[$index]['meta_title'] = $product->meta_title : null; Tools::getValue('plc_meta_description') ? $productsData[$index]['meta_description'] = $product->meta_description : null; Tools::getValue('plc_reference') ? $productsData[$index]['reference'] = $combination['reference'] : null; Tools::getValue('plc_ean13') ? $productsData[$index]['ean13'] = $combination['ean13'] : null; Tools::getValue('plc_upc') ? $productsData[$index]['upc'] = $combination['upc'] : null; Tools::getValue('plc_mpn') ? $productsData[$index]['mpn'] = $combination['mpn'] : null; } $productsData[$index]['attributes'][] = [ 'group_name' => $combination['group_name'] ?? null, 'attribute_name' => $combination['attribute_name'] ?? null, ]; } } else { // Handle simple products (without combinations) $index = $product->id . '_' . 0; $productsData[$index] = [ 'id_lang' => (int)$id_lang, 'id_shop' => (int)$id_shop, 'id_product' => (int)$product->id, 'id_product_attribute' => 0, 'active' => (bool)$product->active, 'link' => $this->context->link->getProductLink( $product, null, null, null, (int)$id_lang, (int)$id_shop, 0, false ), ]; // Conditionally add data based on URL flags Tools::getValue('plc_name') ? $productsData[$index]['name'] = $product->name : null; Tools::getValue('plc_link_rewrite') ? $productsData[$index]['link_rewrite'] = $product->link_rewrite : null; Tools::getValue('plc_description') ? $productsData[$index]['description'] = $product->description : null; Tools::getValue('plc_description_short') ? $productsData[$index]['description_short'] = $product->description_short : null; Tools::getValue('plc_meta_title') ? $productsData[$index]['meta_title'] = $product->meta_title : null; Tools::getValue('plc_meta_description') ? $productsData[$index]['meta_description'] = $product->meta_description : null; Tools::getValue('plc_reference') ? $productsData[$index]['reference'] = $product->reference : null; Tools::getValue('plc_ean13') ? $productsData[$index]['ean13'] = $product->ean13 : null; Tools::getValue('plc_upc') ? $productsData[$index]['upc'] = $product->upc : null; Tools::getValue('plc_mpn') ? $productsData[$index]['mpn'] = $product->mpn : null; } } } } $response = new JsonResponse($productsData); $response->send(); exit; } }