Bonjour,
Cela m'a l'air bien maintenant.
Je pense que c'est un problème dans le code du système d'import avec votre cas d'utilisation.
Le système est prévu à la base pour importer des nouveaux produits avec toutes les variantes définies dans le CSV est rien dans la base de données. Dans ce cas, l'import met en place la variante par défaut.
Nous avons ensuite rajouté la mise à jour, qui va d'abord supprimer toutes les variantes présentes pour le produit avant d'importer les variantes dans le CSV. Et dans ce cas aussi, l'import met en place la variante par défaut.
Enfin, nous avons rajouté l'option "Keep other variants" qui permet de faire l'ajout / mise à jour de variantes sans supprimer les variantes déjà existantes. Et je pense que dans ce cas là, le fait de ne pas supprimer le lien entre le produit principal et les valeurs de caractéristiques fait qu'il se retrouve avec les anciens liens et les nouveaux et du coup le système n'arrive plus à trouver la variante par défaut et suppose qu'il n'y en a pas.
Dans le fichier administrator/components/com_hikashop/helpers/import.php, essayez de changer le code:
function _insertVariants(&$products){
$values = array();
$totalValid = 0;
$insert = 'INSERT IGNORE INTO '.hikashop_table('variant').' (`variant_characteristic_id`,`variant_product_id`) VALUES (';
$ids = array();
foreach($products as $product) {
// Skip not valid products
if(empty($product->product_id))
continue;
if(empty($product->variant_links) && !empty($this->template->variant_links) && empty($product->hikashop_update)) {
$product->variant_links = $this->template->variant_links;
}
if(!empty($product->variant_links)){
$ids[] = (int)$product->product_id;
foreach($product->variant_links as $link){
$value = array((int)$link,(int)$product->product_id);
$values[] = implode(',',$value);
$totalValid++;
if( $totalValid%$this->perBatch == 0){
if(!empty($ids)){
if(!$this->keep_other_variants) {
$this->db->setQuery('DELETE FROM '.hikashop_table('variant').' WHERE variant_product_id IN ('.implode(',',$ids).')');
$this->db->execute();
}
$ids=array();
}
$this->db->setQuery($insert.implode('),(',$values).')');
$this->db->execute();
$totalValid=0;
$values=array();
}
}
}
}
if(!empty($values)){
if(!empty($ids) && !$this->keep_other_variants){
$this->db->setQuery('DELETE FROM '.hikashop_table('variant').' WHERE variant_product_id IN ('.implode(',',$ids).')');
$this->db->execute();
}
$this->db->setQuery($insert.implode('),(',$values).')');
$this->db->execute();
}
}
en:
function _insertVariants(&$products){
$values = array();
$totalValid = 0;
$insert = 'INSERT IGNORE INTO '.hikashop_table('variant').' (`variant_characteristic_id`,`variant_product_id`) VALUES (';
$ids = array();
foreach($products as $product) {
// Skip not valid products
if(empty($product->product_id))
continue;
if(empty($product->variant_links) && !empty($this->template->variant_links) && empty($product->hikashop_update)) {
$product->variant_links = $this->template->variant_links;
}
if(!empty($product->variant_links)){
if(!$this->keep_other_variants || $product->product_type == 'main') {
$ids[] = (int)$product->product_id;
}
foreach($product->variant_links as $link){
$value = array((int)$link,(int)$product->product_id);
$values[] = implode(',',$value);
$totalValid++;
if( $totalValid%$this->perBatch == 0){
if(!empty($ids)){
$this->db->setQuery('DELETE FROM '.hikashop_table('variant').' WHERE variant_product_id IN ('.implode(',',$ids).')');
$this->db->execute();
$ids=array();
}
$this->db->setQuery($insert.implode('),(',$values).')');
$this->db->execute();
$totalValid=0;
$values=array();
}
}
}
}
if(!empty($values)){
if(!empty($ids)){
$this->db->setQuery('DELETE FROM '.hikashop_table('variant').' WHERE variant_product_id IN ('.implode(',',$ids).')');
$this->db->execute();
}
$this->db->setQuery($insert.implode('),(',$values).')');
$this->db->execute();
}
}
Cela devrait aider. Si vous avez toujours le souci, après avec le fichier 04.csv alors il va falloir étudier l'import directement sur le site et faire du débug pour mieux comprendre ce qui ne va pas.