Hello,
I am using product variations and everything works fine.
I have developed a small addon to add an extra field for storing the product barcode for each product variation.
The problem is that every time I update the product barcode for a specific variation all other variations updated also with parent product barcode.
Inside the cscart_products table all variations has a separate record with unique product_id.
I am using the update_product_post php hook to update the barcode for the specific product_id.
Code:
function fn_my_addon_update_product_post($product_data, $product_id, $lang_code, $create){
$update_data = array("product_barcode"=>$_REQUEST["product_data"]["product_barcode"]);
$barcode_update = db_query("UPDATE ?:products SET ?u WHERE product_id = ?i",$update_data,$product_id);
}
It seems that something else executed after update_product_post and changes the barcode to all other variations.
Does anyone know how to avoid this ?
Thank you.
Hello,
Maybe some other add-on you have installed in your store interferes with process?
Try to turn off all other add-ons from external companies and check if issue still persists.
If that won't help, you can also try to not store product_barcode under product_data index. Content from this index is used for a lot of operations, and at some point it may cause incorrect behaviour.
For example, you can store the barcode in variable $_REQUEST["your_addon_id_here"]["product_barcode"].
Best regards,
Robert
Hello Robert,
Thank you for your reply.
The addon is on a clean cscart installation for testing purposes.
I've tried with different index but the same result happened !
The only way that is working ok is to store the barcodes to a separate table but is an overkill for something so simple.
I am using the TPL hook update_product_code from update.tpl file inside design/backend/templates/views/products/ and i have noticed that there is a component statement before each field:
{component name="configurable_page.field" entity="products" tab="detailed" section="pricing_inventory" field="product_code"}
{/component}
That describes the field in some way. Does anyone know what exactly the component description do ?
Hello
Please set input name in template on product_barcode NOT product_data[product_barcode]
And in function also change code appropriately
Best regards
Robert
Hello Robert ,
This is a sample code from the product_code field . I have already used the correct input names inside smarty templates .
Do you know what the components tags do ?
Thank you .
Hello
Please show your code from you template with field product_barcode
Best regards
Robert
Robert's solution should work. Cs-cart does post-processing on fields related to variations. However, you should be able to do it via he schema. I don't remember the exact schema file, but you can add the 'product_barcode' element to the accepted fields (or remove it from the excluded fields).
Thank you all for your replies,
The solution is to extend the schema from the product_variations addon inside the folder app/addons/product_variations/schemas/product_variations/product_types.php
Everything works ok without the need to detach the data from the normal product_data array.
I hope you actually made the change in the my_changes addon so your change will survive a future upgrade.