Created
December 4, 2019 20:19
-
-
Save steveosoule/991568bd1eeb76f5b6614dd63c7d3605 to your computer and use it in GitHub Desktop.
Miva - Basket Item SKU & variant_id Fix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<mvt:comment> | |
| ------------------------------------------------ | |
| Basket Item SKU & variant_id Fix | |
| ------------------------------------------------ | |
| | |
| ## Description: | |
| | |
| Update the sNN_BasketItems sku & variant_id fields when they are missing | |
| This is normally only needed when an item has been added from a: | |
| 1. Wishlist? | |
| 2. Upsell | |
| | |
| ## Instructions: | |
| | |
| 1. Install the [miva-sql-component module](https://github.com/ghassani/miva-sql-component) | |
| 2. Assign the `sql` item to the OSEL page | |
| 3. Create a ReadyTheme Content Section (code: `fix-missing-basket-item-variant-data`) with this as the content | |
| 4. Place the `fix-missing-basket-item-variant-data` RT CS on the OSEL page | |
| 5. Optionally, modify the `item:new_sku` logic down-below so that the basket:item:sku is set to the proper variant code or sku | |
| | |
| ------------------------------------------------ | |
</mvt:comment> | |
<mvt:foreach iterator="item" array="basket:items"> | |
<mvt:assign name="l.settings:item:options_count" value="miva_array_elements( l.settings:item:options )" /> | |
<mvt:comment> | |
We only need to update items that don't have a sku | |
We only need to update items with options | |
</mvt:comment> | |
<mvt:if expr="l.settings:item:sku OR l.settings:item:options_count EQ 0"> | |
<mvt:foreachcontinue /> | |
</mvt:if> | |
<mvt:comment> | |
Load Variant ID based on the items options | |
</mvt:comment> | |
<mvt:do file="g.Module_Library_Utilities" name="l.result" value="OrderItem_DetermineVariant_WithOptions(l.settings:item, l.settings:item:options, l.settings:item:options_count, l.settings:item:loaded:product, l.settings:item:loaded:variant_id)" /> | |
<mvt:comment> | |
With the Variant ID, load the Variant Parts | |
</mvt:comment> | |
<mvt:if expr="l.settings:item:loaded:variant_id"> | |
<mvt:do file="g.Module_Library_DB" name="l.result" value="ProductList_Load_Variant(l.settings:item:loaded:product:id, l.settings:item:loaded:variant_id, l.settings:item:loaded:variant_parts)" /> | |
</mvt:if> | |
<mvt:comment> | |
1. Update the Line Item's Variant ID | |
2. Update the Line Items' SKU | |
3. Update Basket Items' variables to be what they should be | |
4. Update the basket:groups too | |
</mvt:comment> | |
<mvt:if expr="l.settings:item:loaded:variant_id AND NOT l.settings:item:variant_id"> | |
<mvt:comment> | |
1. Update the Line Item's Variant ID | |
</mvt:comment> | |
<mvt:assign name="l.settings:query:query" value="'UPDATE ' $ g.Store_Table_Prefix $ 'BasketItems SET variant_id = ? WHERE line_id = ?'" /> | |
<mvt:assign name="l.settings:query:bind_parameters[1]" value="l.settings:item:loaded:variant_id" /> | |
<mvt:assign name="l.settings:query:bind_parameters[2]" value="l.settings:item:line_id" /> | |
<mvt:item name="sql" param="l.settings:query"/> | |
<mvt:comment> | |
2. Update the Line Items' SKU | |
NOTE: You may need to change the logic for what the sku is set to based on the store's needs/settings | |
</mvt:comment> | |
<mvt:if expr="miva_array_elements( l.settings:item:loaded:variant_parts ) EQ 1"> | |
<mvt:if expr="l.settings:item:loaded:variant_parts[1]:sku"> | |
<mvt:assign name="l.settings:item:new_sku" value="l.settings:item:loaded:variant_parts[1]:sku" /> | |
<mvt:else> | |
<mvt:assign name="l.settings:item:new_sku" value="l.settings:item:loaded:variant_parts[1]:code" /> | |
</mvt:if> | |
<mvt:assign name="l.settings:query:query" value="'UPDATE ' $ g.Store_Table_Prefix $ 'BasketItems SET sku = ? WHERE line_id = ?'" /> | |
<mvt:assign name="l.settings:query:bind_parameters[1]" value="l.settings:item:new_sku" /> | |
<mvt:assign name="l.settings:query:bind_parameters[2]" value="l.settings:item:line_id" /> | |
<mvt:item name="sql" param="l.settings:query"/> | |
</mvt:if> | |
<mvt:comment> | |
3. Update Basket Items' variables to be what they should be | |
</mvt:comment> | |
<mvt:assign name="l.settings:item:variant_id" value="l.settings:item:loaded:variant_id" /> | |
<mvt:assign name="l.settings:item:parts" value="l.settings:item:loaded:variant_parts" /> | |
<mvt:if expr="l.settings:item:new_sku"> | |
<mvt:assign name="l.settings:item:sku" value="l.settings:item:new_sku" /> | |
</mvt:if> | |
<mvt:comment> | |
4. Update the basket:groups too | |
TODO: change this to miva_array_filter_ref? | |
</mvt:comment> | |
<mvt:foreach iterator="group" array="basket:groups"> | |
<mvt:if expr="POS2 NE POS1"> | |
<mvt:foreachcontinue /> | |
</mvt:if> | |
<mvt:assign name="l.settings:group:sku" value="l.settings:item:sku" /> | |
<mvt:assign name="l.settings:group:variant_id" value="l.settings:item:variant_id" /> | |
<mvt:assign name="l.settings:group:parts" value="l.settings:item:parts" /> | |
</mvt:foreach> | |
</mvt:if> | |
</mvt:foreach> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment