alexm Posted April 24, 2022 Share Posted April 24, 2022 Good Afternoon @kongondo, Hope all is good your side and you've enjoyed your weekend. I'm just pulling a LOAD of products from a stockist and I was wondering (as I believe it is not yet covered in the docs) what is the best way to create products via API. This should then help me to quickly generate products and manage stock levels. I've created the parent product with the usual method. e.g. $product = new Page(); $product->template = "padloper-product"; $product->parent = $pages->get("template=padloper-products"); $product->title = "Test"; $product->padloper_product_stock->price = 22.25; $product->padloper_type = "Trousers"; $product->padloper_categories = "Suits"; $product->save(); But then I'd like to add variants on the fly too. So I also used: $product_variant = new Page(); $product_variant->template = "padloper-product-variant"; $product_variant->parent = $product; $product_variant->title = "Test Variant"; $product_variant->padloper_product_stock->price = 22.25; $product_variant->padloper_type = "Trousers"; $product_variant->padloper_categories = "Suits"; $product_variant->save(); This does indeed add the product as a variant below the aforementioned product. So then I notice that I of course have to enable "use variants" to view them on the custom product dashboard view (they show if you view from admin pages under tree) and can also update the attribute field page reference, so it shows the selectized value. Therefore I've used: $product = $pages->get(10203); $product->of(false); $product->padloper_product_attributes = 'Size'; $product->padloper_product_settings_use_variants = 1; $product->save(); $product->padloper_product_attributes = "Size"; works perfectly, however $product->padloper_product_settings_use_variants = 1 doth not. I also tried $product->padloper_product_settings->use_variants = 1, but I assume this requires some other method to update its value? Is it ok for me to go about this bulk creation as I am so far and could you shed some light on the variant matter if you have a mo. Many Thanks, Look forward to getting this up and ready to show you ? Alex 2 Link to comment Share on other sites More sharing options...
kongondo Posted April 26, 2022 Share Posted April 26, 2022 On 4/24/2022 at 4:39 PM, alexm said: what is the best way to create products via API You are on the right track with your present code ?. I'll have a think about adding this feature to the API. On 4/24/2022 at 4:39 PM, alexm said: $product_variant->padloper_type = "Trousers"; $product_variant->padloper_categories = "Suits"; These two will not work since the fields padloper_type and padloper_categories belong to the parent product, i.e., in your case, $product. On 4/24/2022 at 4:39 PM, alexm said: So then I notice that I of course have to enable "use variants" to view them on the custom product dashboard view Yes. This is necessary to explicitly specify that the product will use variants. This prevents 'accidental' variants if children were created for a product by mistake. This is unlikely but this safeguard is an extra layer to prevent that. The correct code for this should be: <?php namespace ProcessWire; $product->padloper_product_settings->useVariants = 1; Alternatively, since you are creating a new product (rather than amending an existing one), you can do it as follows, given that padloper_product_settings is a WireData object. <?php namespace ProcessWire; $productSettings = new WireData(); // 'physical' | 'physical_no_shipping' | 'digital' | 'service' $productSettings->shippingType = 'physical';// product shipping type $productSettings->taxable = 1; // bool int: is product taxable? $productSettings->trackInventory = 1;// bool int: is product tracking inventory? $productSettings->useVariants = 1; // bool int: is product using variants? $productSettings->colour = '#d52f10ff'; // product colour // ------ // add to product $product->padloper_product_settings = $productSettings; // OR //$product->set('padloper_product_settings', $productSettings); $product->save(); OR <?php namespace ProcessWire; $productSettings = [ 'shippingType' => 'physical', 'taxable' => 1, 'trackInventory' => 1, 'useVariants' => 1, 'colour' => '#d52f10ff', ]; $product->padloper_product_settings->setArray($productSettings); $product->save(); On 4/24/2022 at 4:39 PM, alexm said: and can also update the attribute field page reference This requires setting the attribute on the parent product and the combination of attribute options on the variant. For instance, the product can have the attributes Size and Colour. The variants will take combinations of options for those attributes, i.e. combo of Size and Colour, e.g. Red x Small, Red x Medium, Black x Large, Black x Small, etc. The attribute options need to be children of the attribute. Hence, Red and Black are page children of Colour and Small, Medium and Large are children of Size. Attributes and Attribute Options use different templates. As you can see, it does get a little complicated. Above does not mean that each each possible Colour and Size combo should be created. For instance, you might not have a Brown x Large variant. Just skip creating it. So, for products that have and use variants, in addition to $product->padloper_product_attributes (a multi-page reference field), you also need to populate $product_variant->padloper_product_attributes_options (a multi-page reference field). Please let me know if you need help with coding this or anything else. On 4/24/2022 at 4:39 PM, alexm said: Look forward to getting this up and ready to show you ? Looking forward to seeing it! ?. 1 Link to comment Share on other sites More sharing options...
alexm Posted April 28, 2022 Author Share Posted April 28, 2022 @kongondo apologies!! I didn't actually realise you'd replied to this!! Thank you. Link to comment Share on other sites More sharing options...
kongondo Posted April 28, 2022 Share Posted April 28, 2022 18 minutes ago, alexm said: @kongondo apologies!! I didn't actually realise you'd replied to this!! Thank you. No worries. Actually I think there's something funky going on with the notifications. I'm only getting notified about new threads. Subsequent posts are not triggering notifications. Link to comment Share on other sites More sharing options...
alexm Posted April 29, 2022 Author Share Posted April 29, 2022 @kongondo hope all is well! Quick question... If I create a page which will have variants and add an attribute e.g. $product->padloper_product_attributes = 'Size'; How can I then add the attribute option to the product variant page? Link to comment Share on other sites More sharing options...
kongondo Posted May 4, 2022 Share Posted May 4, 2022 On 4/29/2022 at 1:14 PM, alexm said: How can I then add the attribute option to the product variant page? Hi @alexm, This is a multi page reference field (padloper_product_attributes_options) so you would add using any of the ways shown here in ProcessWire docs using PageArray::add() syntax. https://processwire.com/api/ref/page-array/add/ Here are some Padloper product variant examples Please note that example 2 assumes the (parent) product page has the attributes Colour and Size in its field padloper_product_attributes as the respective parents of the attribute options Red and Medium. <?php namespace ProcessWire; // the variant product page $variantPage->of(false); // Example 1: get and add one attribute option $attributeOption = $pages->get(1234);// e.g. /colour/red/ // Add one page (attribute option) $variantPage->padloper_product_attributes_options->add($attributeOption); // Example 2: Add multiple pages (attribute options) // $selector: full selector $selector1 = "template=padloper-attribute-option,title=Red|Medium,check_access=0"; $variantPage->padloper_product_attributes_options->add($pages->find($selector1)); // OR // $selector2: Padloper short syntax selector $selector2 = "template=option,title=Red|Medium"; $variantPage->padloper_product_attributes_options->add($padloper->find($selector2)); // Example 3: Add one page by ID (attribute option) $variantPage->padloper_product_attributes_options->add(1669);// e.g. /size/medium/ // save the variant product page's attribute options field $variantPage->save('padloper_product_attributes_options'); Hope this helps. 1 Link to comment Share on other sites More sharing options...
kongondo Posted May 4, 2022 Share Posted May 4, 2022 Just adding that I am working on an API for adding products, variants, categories, etc. This will be available via the global $padloper. 1 Link to comment Share on other sites More sharing options...
alexm Posted May 5, 2022 Author Share Posted May 5, 2022 15 hours ago, kongondo said: Hope this helps. Should have dug in deeper and taken a look. Sorry and thank you! 15 hours ago, kongondo said: Just adding that I am working on an API for adding products, variants, categories, etc. This will be available via the global $padloper. Amazing! Love it. 1 Link to comment Share on other sites More sharing options...
kongondo Posted June 6, 2022 Share Posted June 6, 2022 Hi @alexm, Just a quick update that I have made very good progress with the 'add' API. I hope to release this by the end of the week. 1 Link to comment Share on other sites More sharing options...
kongondo Posted June 12, 2022 Share Posted June 12, 2022 Hi @alexm, Padloper Import API is now ready in Padloper 002 announced here. Here are the Import API docs. 1 Link to comment Share on other sites More sharing options...
alexm Posted June 19, 2022 Author Share Posted June 19, 2022 @kongondo awesome news!! Apologies for the slow reply!! Excited to test this out ? 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now