Bienvenue, Invité
Merci de vous identifier ou de vous inscrire.    Mot de passe perdu?

Exporter son catalogue au format XML
(1 lecteur(s)) (1) Invité(s)
Aller en basPage: 12
SUJET:

Exporter son catalogue au format XML

*
#12124
Olixelle
Platinum Boarder
Messages: 359
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Exporter son catalogue au format XML

Il y a 9 Années
Karma: 10  
Bonjour,

j'ai vu une demande a ce sujet, ce n'est pas vraiment un tutoriel mais plutot un exemple de code.
Ce code permet de générer le xml contenant les produits, à utiliser par exemple pour les comparateurs de prix
La méthode prend un parametre qui se nomme from_site, cela permet de rajouter dans les urls produit un parametre pour suivre ensuite l'affiliation (mais ca c'est une autre histoire...)

Quelques remarques :
- Les frais de port ne sont pas gérés dans le code que j'ai mis, je prendrais du temps pour vous fournir la méthode un peu plus tard
- Ce code exporte tous les produits et ne prend pas en compte la notion de website

Voila, le but est plus de débroussailler le terrain pour ceux qui le souhaiteraient


Code :

<?php


/**
 * Classe pour l'export des produits pour les comparateurs
 *
 */
class MDN_MageCustomization_Model_XmlPriceComparer  extends Mage_Core_Model_Abstract
{

const tva = 1.196;

/**
 * Retourne le code xml pour générer le fichier d'export
 *
 */
public function GetXml($site = '')
{
//cree le fichier xml
$xml = new DomDocument('1.0', 'iso-8859-1');
$collection = $xml->createElement('catalogue', '');
$xml->appendChild($collection);

//recupere tous les produits actifs
$products = mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', 4) //visible partout
->addAttributeToFilter('status', 1); //Actif

//parcourt les produits
foreach ($products as $product)
{

//cree le node pour le produit
$xml_product = $xml->createElement('product', '');
$collection->appendChild($xml_product);

//url de l'image
$xml_image = $xml->createElement('image_url', '');
$image_text = $xml->createTextNode(mage::helper('catalog/image')->init($product, 'image'));
$xml_image->appendChild($image_text);  
$xml_product->appendChild($xml_image);

//prix
$xml_price = $xml->createElement('price', '');
$price_text = $xml->createTextNode(round($product->getFinalPrice() * self::tva, 2));
$xml_price->appendChild($price_text);  
$xml_product->appendChild($xml_price);

//brand
$xml_brand = $xml->createElement('brand', '');
$brand_text = $xml->createTextNode($product->getAttributeText('manufacturer'));
$xml_brand->appendChild($brand_text);  
$xml_product->appendChild($xml_brand);

//category
$ids = $product->getCategoryIds();
$found = false;
if (count($ids) > 0)
{
for ($i=0;$i<count($ids);$i++)
{
if(!$found)
{
$cat = mage::getmodel('catalog/category')->load($ids[$i]);
$parent = $cat->getParentCategory();
$xml_category = $xml->createElement('category', '');
$category_text = $xml->createTextNode($cat->getName());
$xml_category->appendChild($category_text);  
$xml_product->appendChild($xml_category);
$found = true;
}
}
}

//designation
$xml_designation = $xml->createElement('designation', '');
$designation_text = $xml->createTextNode($product->getname());
$xml_designation->appendChild($designation_text);  
$xml_product->appendChild($xml_designation);

//product_url
$xml_product_url = $xml->createElement('product_url', '');
$product_url_text = $xml->createTextNode($product->getProductUrl().'?from_site='.$site);
$xml_product_url->appendChild($product_url_text);  
$xml_product->appendChild($xml_product_url);

//merchant_id
$xml_merchant_id = $xml->createElement('merchant_id', '');
$merchant_id_text = $xml->createTextNode($product->getSku());
$xml_merchant_id->appendChild($merchant_id_text);  
$xml_product->appendChild($xml_merchant_id);

//description
$xml_description = $xml->createElement('description', '');
$description_text = $xml->createTextNode(strip_tags($product->getdescription()));
$xml_description->appendChild($description_text);  
$xml_product->appendChild($xml_description);

//stock_detail
$xml_stock_detail = $xml->createElement('stock_detail', '');
$stock_detail_text = $xml->createTextNode(strip_tags($product->getProductAvailability($product)));
$xml_stock_detail->appendChild($stock_detail_text);  
$xml_product->appendChild($xml_stock_detail);

//manufacturer_id
$xml_manufacturer_id = $xml->createElement('manufacturer_id', '');
$manufacturer_id_text = $xml->createTextNode($product->getSku());
$xml_manufacturer_id->appendChild($manufacturer_id_text);  
$xml_product->appendChild($xml_manufacturer_id);

//deliverycost (à implémenter)
//$xml_deliverycost = $xml->createElement('deliverycost', '');
//$deliverycost_text = $xml->createTextNode(round($product->GetBestDeliveryCost() * self::tva, 2));
//$xml_deliverycost->appendChild($deliverycost_text);  
//$xml_product->appendChild($xml_deliverycost);

}

$content = $xml->saveXML();
            
//genere le xml
return $content;
}
}

 
L'administrateur a désactivé l'accès public en écriture.
#12786
Geronimo
Platinum Boarder
Messages: 807
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Exporter son catalogue au format XML

Il y a 8 Années, 11 Mois
Karma: 3  
c'est une page à créer ?
 
L'administrateur a désactivé l'accès public en écriture.
#12788
Olixelle
Platinum Boarder
Messages: 359
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Exporter son catalogue au format XML

Il y a 8 Années, 11 Mois
Karma: 10  
oui, il faut créer un module utiliser un controlleur et placer ce code
 
L'administrateur a désactivé l'accès public en écriture.
#17653
tonton
Fresh Boarder
Messages: 9
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Exporter son catalogue au format XML

Il y a 8 Années, 8 Mois
Karma: 0  
Bonjour,

afin de formater la sortie pour un besoin précis, j'ai ajouter un attribut à ma balise <product>, contenant l'id du produit.
J'arrive à ajouter l'attribut mais je ne trouve pas comment lui assigner une valeur.

Code :

//cree le node pour le produit
$xml_product = $xml->createElement('product', '');
$xml_product->appendChild($xml->createAttribute("id"));
$collection->appendChild($xml_product); 



Si quelqu'un peut m'indiquer comment faire.
La valeur à renseigner pour l'attribut est $product->getId()

Merci
 
L'administrateur a désactivé l'accès public en écriture.
#17744
Jerome38
Speedinfo.fr
Expert Boarder
Messages: 112
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin Lieu: Grenoble

Re:Exporter son catalogue au format XML

Il y a 8 Années, 8 Mois
Karma: 2  
Un truc du genre devrait fonctionner

Code :


$xml_product = $xml->createElement('product');
$xml_product->setAttribute('id',$product->getId());

 
L'administrateur a désactivé l'accès public en écriture.
#17813
tonton
Fresh Boarder
Messages: 9
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Exporter son catalogue au format XML

Il y a 8 Années, 8 Mois
Karma: 0  
Exact, merci.
 
L'administrateur a désactivé l'accès public en écriture.
#18807
nathanael.attali
Avancer lentement mais surement
Gold Boarder
Messages: 174
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
MIster-optic: Lunettes de Soleil nathanael.attali@gmail.com nathanael.attali@gmail.com

Re:Exporter son catalogue au format XML

Il y a 8 Années, 7 Mois
Karma: 2  
je trouve que ce post est génial,
mais mes connaissances en magento sont encore trop limités, faut dire que le sujet est vaste.

Qq'un pourrait il m'expliquer comment intégrer ce code.

Olixelle parle plus haut de créer un module et ensuite de l'integrer.

qq'un pourrait il expliquer plus en detail la démarche, ca semble trés compliqué.

Nathan
 
Magento C'est de La dynamite !
L'administrateur a désactivé l'accès public en écriture.
#18818
Max
Gold Boarder
Messages: 313
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin Lieu: Aubagne

Re:Exporter son catalogue au format XML

Il y a 8 Années, 7 Mois
Karma: 15  
Salut,

Si tu ne sais pas créer un module, regarde du côté de module créator, il créé un exemple de module avec les fichiers nécessaires.
Comment veux ton exportation de catalogue : en appelant une page ou en le générant (par exemple chaque nuit) via une tâche cron?
 
L'administrateur a désactivé l'accès public en écriture.
Revenir en hautPage: 12
Modérateur: Gabriiiel, ILOA, zuiko