Le module de H&O issu de
ce post est très abouti et permet nativement d'importer, non seulement les catégories mais aussi les champs suivants associés :
store
parent
identifier
name
is_active
url_key
description
image
pagetitle
is_anchor
Je l'ai facilement étendu :
En modifiant le fichier : app/code/local/Postbeeld/Importcatalogs/controllers/Adminhtml/ImportController.php
J'ai successivement ajouté deux champs supplémentaires à importer :
meta_keywords and meta_description
Dans private function _checkAndPrepareCsvFileRow
il faut changer :
| Code : |
if(!isset($rowData) OR count($rowData) != 10)
|
en
| Code : |
if(!isset($rowData) OR count($rowData) != 12)
|
Et ajouter les lignes suivantes :
| Code : |
$returnData['meta_keywords'] = trim($rowData[10]);
$returnData['meta_description'] = trim($rowData[11]);
|
Le fichier CSV doit avoir 2 colonnes de plus après is_anchor remplies avec vos données : meta_keywords and meta_description
Comme en 1.4 on peut avoir une url_key différente pour chaque vue magasin, on peut supprimer les lignes suivantes dans private function _checkAndPrepareCsvFileRow
| Code : |
if($returnSystem['store'] != 'admin' AND $rowData[5] != '')
return array("validation" => false, "message" => "Can not change 'URL Key' $rowData[4] for specific store-view ".$returnSystem['store'].".");
|
et
| Code : |
unset($returnData['url_key']);
|
Modifier/créer des catégories en masse avec un fichier csv où on voit toutes les langues et les boutiques est un vrai plus car on peut vérifier d'un coup d'oeil toute la cohérence et faire des copier/coller entre champs très facilement.
Cependant après avoir fait çà, il me reste un problème important :
J'essaie de construire une multiboutique avec 2 langues.
La structure de catégorie que je voudrais obtenir est la suivante :
| Code : |
ROOTCAT1
SUBCAT11
subsubcat111
subsubcat112
subsubcat113
SUBCAT12
subsubcat121
subsubcat122
subsubcat123
ROOTCAT2
SUBCAT11
subsubcat113
subsubcat114
SUBCAT12
subsubcat123
SUBCAT13
|
ROOTCAT1 et ROOTCAT2 ont été créées d'abord manuellement pour être catégories racine des boutiques (et donc pouvoir créer les boutiques).
ROOTCAT1 est la catégorie racine de la boutique TOUS-PRODUITS avec une vue française et une vue anglaise.
ROOTCAT2 est la catégorie racine de la boutique CERTAINS-PRODUITS avec une vue française et une vue anglaise.
Le nom des catégories communes avec ROOTCAT1 mais sous ROOTCAT2 doivent être les mêmes que celles correspondant à celle sous ROOTCAT1
Lorsque j'importe ou modifie seulement les catégories sous ROOTCAT1 tout marche parfaitement, vues anglaise et françaises comprises avec tous les champs.
Mais quand j'ajoute la partie ROOTCAT2 dans le fichier CSV pour compléter la structure, le résultat est le suivant :
| Code : |
ROOTCAT1
ROOTCAT2
SUBCAT11
subsubcat111
subsubcat112
subsubcat113
subsubcat114
SUBCAT12
subsubcat121
subsubcat122
subsubcat123
SUBCAT13
|
Toutes le catégories dont le nom est le même que celles sous ROOTCAT1 sont transférées sous ROOTCAT2, mais toutes les catégories nouvelles sous ROOTCAT2 sont bien créées.
J'ai essayé pas mal de configurations de mon fichier CSV d'import sans succès. Si le nom d'une catégorie est identique, elle est transférée d'une arborescence à l'autre.
L'unique solution actuellement est d'avoir des noms de catégorie disjoints entre les deux arborescences.
Si quelqu'un de plus expérimenté pouvait se pencher sur ce code, je pourrais contribuer au test car le module est performant par ailleurs et je sens être près du but.
Le code à analyser/changer se situe toujours dans le fichier app/code/local/Postbeeld/Importcatalogs/controllers/Adminhtml/ImportController.php parmi les lignes :
| Code : |
$returnSystem['mode'] = "add";
if(is_numeric($rowData[2])){
if(isset($this->_categoriesArray["c_$rowData[2]"])){
$returnSystem['mode'] = "edit";
$returnData['id'] = $rowData[2];
}
} else if(is_string($rowData[2])) {
$categoryKey = array_search($rowData[2], $this->_categoriesArray);
if($categoryKey){
$returnSystem['mode'] = "edit";
$returnData['id'] = str_replace("c_", "", $categoryKey);
}
}
|
Il faut sans doute tester le path de la catégorie avant de décider de la modifier ou la créer...
Alors si cela inspire quelqu'un...