Skip to content

Commit cd7a42b

Browse files
authored
Add support for variation groups. (#57)
1 parent 3e95b0c commit cd7a42b

File tree

5 files changed

+47
-0
lines changed

5 files changed

+47
-0
lines changed

src/Writer/Entity/Product.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Product implements WriteableEntityInteface
3636
public $setProducts = null;
3737
public $classificationCategoryId;
3838
public $classificationCatalogId;
39+
public $variationGroups = [];
3940

4041
public function __construct(string $id)
4142
{
@@ -222,6 +223,18 @@ public function setClassificationCategory(string $classificationCategoryId, stri
222223
$this->classificationCatalogId = $classificationCatalogId;
223224
}
224225

226+
public function addVariationGroups(array $variationGroups): void
227+
{
228+
foreach ($variationGroups as $variationGroup) {
229+
$this->addVariationGroup($variationGroup);
230+
}
231+
}
232+
233+
public function addVariationGroup(string $variationGroup): void
234+
{
235+
$this->variationGroups[] = $variationGroup;
236+
}
237+
225238
public function write(XmlWriter $writer): void
226239
{
227240
(new ProductXmlWriter($writer, $this))->write();

src/Writer/EntityWriter/ProductXmlWriter.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function write(): void
4242
$this->writeVariations();
4343
$this->writeBundleProducts();
4444
$this->writeSetProducts();
45+
$this->writeVariationGroups();
4546
$this->writeClassificationCategory();
4647
$this->writer->endElement();
4748
}
@@ -224,4 +225,21 @@ public function writeClassificationCategory(): void
224225
]);
225226
}
226227
}
228+
229+
public function writeVariationGroups(): void
230+
{
231+
if (count($this->product->variationGroups) === 0) {
232+
return;
233+
}
234+
235+
$this->writer->startElement('variation-groups');
236+
237+
foreach (array_unique($this->product->variationGroups) as $variationGroup) {
238+
$this->writer->writeEmptyElementWithAttributes('variation-group', [
239+
'product-id' => $variationGroup,
240+
]);
241+
}
242+
243+
$this->writer->endElement();
244+
}
227245
}

tests/Writer/ProductsTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ protected function buildProductElement(): Product
148148
'SKU0000003' => true,
149149
]);
150150

151+
$element->addVariationGroups([
152+
'PRODUCT123-Red',
153+
'PRODUCT123-Yellow',
154+
'PRODUCT123-Green',
155+
]);
156+
151157
return $element;
152158
}
153159

tests/fixtures/product-xml-escaped.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@
5252
<variant product-id="SKU0000003" default="true"/>
5353
</variants>
5454
</variations>
55+
<variation-groups>
56+
<variation-group product-id="PRODUCT123-Red"/>
57+
<variation-group product-id="PRODUCT123-Yellow"/>
58+
<variation-group product-id="PRODUCT123-Green"/>
59+
</variation-groups>
5560
<classification-category catalog-id="TestCatalog">CAT123</classification-category>
5661
</product>
5762
</catalog>

tests/fixtures/products.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
<variant product-id="SKU0000003" default="true"/>
5252
</variants>
5353
</variations>
54+
<variation-groups>
55+
<variation-group product-id="PRODUCT123-Red"/>
56+
<variation-group product-id="PRODUCT123-Yellow"/>
57+
<variation-group product-id="PRODUCT123-Green"/>
58+
</variation-groups>
5459
<classification-category catalog-id="TestCatalog">CAT123</classification-category>
5560
</product>
5661
<product product-id="PRD12340000">

0 commit comments

Comments
 (0)