language->id, 0, 0, 'id_product', 'ASC'); // Tworzymy nowy obiekt DOMDocument do generowania pliku XML $dom = new DOMDocument('1.0', 'UTF-8'); $dom->formatOutput = true; // Tworzymy główny element "rss" z odpowiednimi atrybutami $rss = $dom->createElement('rss'); $rssVersion = $dom->createAttribute('version'); $rssVersion->value = '2.0'; $rss->appendChild($rssVersion); $xmlnsG = $dom->createAttribute('xmlns:g'); $xmlnsG->value = 'http://base.google.com/ns/1.0'; $rss->appendChild($xmlnsG); $dom->appendChild($rss); // Tworzymy element "channel" $channel = $dom->createElement('channel'); $rss->appendChild($channel); // Dodajemy tytuł kanału $title = $dom->createElement('title', 'Wyczaruj Prezent'); $channel->appendChild($title); // Przechodzimy przez wszystkie produkty i generujemy odpowiednie elementy dla każdego z nich foreach ($products as $product) { // Sprawdzamy, czy produkt jest aktywny; jeśli nie, kontynuujemy pętlę if (!$product['active']) { continue; } // Załadowanie produktu $productObj = new Product($product['id_product'], true, $id_lang); // Tworzymy element "item" dla każdego produktu $item = $dom->createElement('item'); $channel->appendChild($item); // Dodajemy informacje o produkcie - dostosuj to odpowiednio do Twoich potrzeb $id = $dom->createElement('g:id', $product['id_product']); $item->appendChild($id); $title = $dom->createElement('g:title', htmlspecialchars($product['name'], ENT_QUOTES)); $item->appendChild($title); // Pobierz oryginalny opis produktu z PrestaShop $productDescription = $product['description']; // Usuń nowe linie (przejścia do nowej linii) z opisu produktu $cleanedDescription = str_replace("\n", "", $productDescription); $cleanedDescription = str_replace("\r", "", $cleanedDescription); // Tworzymy element "description" dla opisu produktu z CDATA $description = $dom->createElement('g:description'); $descriptionCdata = $dom->createCDATASection($cleanedDescription); $description->appendChild($descriptionCdata); $item->appendChild($description); // Pobierz cenę brutto (z podatkami) $priceWithTaxes = Product::getPriceStatic($product['id_product'], true); // Dodajemy informacje o cenach i dostępności produktu $price = $dom->createElement( 'g:price', round( $priceWithTaxes, 2 ) . ' PLN'); $item->appendChild($price); $availability = $dom->createElement('g:availability', 'in stock'); $item->appendChild($availability); // Dodajemy link do produktu $link = $dom->createElement('g:link', htmlspecialchars( 'https://wyczarujprezent.pl/' . $product['link_rewrite'] . '.html', ENT_QUOTES)); $item->appendChild($link); // Pobierz kod EAN produktu $ean = $productObj->ean13; $eanElement = $dom->createElement('g:gtin', $ean); $item->appendChild($eanElement); if ( $ean ) { $eanElement = $dom->createElement('identifier_exists', 'yes'); $item->appendChild($eanElement); } else { $eanElement = $dom->createElement('identifier_exists', 'no'); $item->appendChild($eanElement); } if ( !$productObj -> hasAttributes() ) { // Obsługa produktu bez kombinacji $stockQuantity = StockAvailable::getQuantityAvailableByProduct($product['id_product'], 0); $stock = $dom->createElement('g:stock', $stockQuantity); $item->appendChild($stock); $images = $productObj->getImages($id_lang); if (!empty($images)) { $image = array_shift($images); $linkRewrite = $productObj->link_rewrite[1]; $imageLink = Context::getContext()->link->getImageLink($linkRewrite, $image['id_image'], 'large_default'); $imageElement = $dom->createElement('g:image_link', $imageLink); $item->appendChild($imageElement); } } else { $combinations = $productObj->getProductAttributesIds($product['id_product']); foreach ( $combinations as $combination ) { // Tworzenie elementu "item_group_id" dla każdej kombinacji $itemGroupId = $dom->createElement('g:item_group_id', $product['id_product'] . '-' . $combination['id_product_attribute']); $item->appendChild($itemGroupId); // Pobieranie stanu magazynowego dla konkretnej kombinacji $stockQuantity = StockAvailable::getQuantityAvailableByProduct($product['id_product'], $combination['id_product_attribute']); $stock = $dom->createElement('g:stock', $stockQuantity); $item->appendChild($stock); $combinationImages = $productObj->getCombinationImages($id_lang); if (isset($combinationImages[$combination['id_product_attribute']])) { $i = 0; foreach ($combinationImages[$combination['id_product_attribute']] as $combinationImage) { if ( $i > 0 ) { continue; } $imageLink = Context::getContext()->link->getImageLink($productObj->link_rewrite, $combinationImage['id_image'], ImageType::getFormatedName('large')); $imageElement = $dom->createElement('g:image_link', $imageLink); $item->appendChild($imageElement); $i++; } } else { $images = $productObj->getImages($id_lang); if (!empty($images)) { $image = array_shift($images); $linkRewrite = $productObj->link_rewrite[1]; $imageLink = Context::getContext()->link->getImageLink($linkRewrite, $image['id_image'], 'large_default'); $imageElement = $dom->createElement('g:image_link', $imageLink); $item->appendChild($imageElement); } } // Tutaj możesz dodać dodatkowe informacje o kombinacjach, które są ważne dla Google Merchant Center } } // Tworzenie elementu wysyłki $shipping = $dom->createElement('g:shipping'); // Tworzenie i dodawanie elementu kraju $country = $dom->createElement('g:country', 'PL'); $shipping->appendChild($country); // Tworzenie i dodawanie elementu usługi $service = $dom->createElement('g:service', 'Paczkomaty InPost'); $shipping->appendChild($service); // Tworzenie i dodawanie elementu ceny wysyłki $shippingPrice = $dom->createElement('g:price', '13.25 PLN'); $shipping->appendChild($shippingPrice); // Dodawanie całego elementu wysyłki do elementu produktu $item->appendChild($shipping); // Tworzenie i dodawanie elementu stanu produktu $condition = $dom->createElement('g:condition', 'new'); $item->appendChild($condition); // Tworzenie i dodawanie elementu producenta produktu $manufacturerId = $productObj->id_manufacturer; $manufacturer = new Manufacturer($manufacturerId, Context::getContext()->language->id); $brandName = $manufacturer->name; $brand = $dom->createElement('g:brand', $brandName); $item->appendChild($brand); } // Zapisujemy plik XML $dom->save($xmlFilePath); // Wyświetlamy komunikat o sukcesie lub błędzie if (file_exists($xmlFilePath)) { echo "Plik XML został wygenerowany i zapisany jako: " . $xmlFilePath; } else { echo "Błąd generowania pliku XML!"; }