Jump to content

Exporting products to XML


galactic

Recommended Posts

I want export a product list to XML for price comparison engine. I have some PHP script that works partially (not all items works).

<?php
include(dirname(__FILE__).'/config/config.inc.php');
require_once(dirname(__FILE__).'/init.php');
// Get data
$number = (intval(Tools::getValue('n')) ? intval(Tools::getValue('n')) : 10000);
$orderByValues = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position');
$orderWayValues = array(0 => 'ASC', 1 => 'DESC');
$orderBy = Tools::strtolower(Tools::getValue('orderby', $orderByValues[intval(Configuration::get('PS_PRODUCTS_ORDER_BY'))]));
$orderWay = Tools::strtoupper(Tools::getValue('orderway', $orderWayValues[intval(Configuration::get('PS_PRODUCTS_ORDER_WAY'))]));
if (!in_array($orderBy, $orderByValues))
$orderBy = $orderByValues[0];
if (!in_array($orderWay, $orderWayValues))
$orderWay = $orderWayValues[0];
//$id_category = (intval(Tools::getValue('id_category')) ? intval(Tools::getValue('id_category')) : 1);
$currency = new Currency(intval($cookie->id_currency));
$affiliate = (Tools::getValue('ac') ? '?ac='.Tools::getValue('ac') : '');

$categTree = Category::getRootCategory()->recurseLiteCategTree(0);

function constructTreeNode($node){
	$ret = ';';
	$ret .= $node['id'].'|'.$node['name'].';';
	if(!empty($node['children']))
	{
			$ret .= ';';
			foreach ($node['children'] AS $child)
					$ret .= constructTreeNode($child);
			$ret .= ';';
	}
	return $ret;
}
foreach ($categTree['children'] AS $child)
	$ulTree .= constructTreeNode($child);

$tab_cat=explode(';',$ulTree);
foreach ($tab_cat as $id2cat){
$tab_id2cat=explode('|',$id2cat);
if (!empty($tab_id2cat)) $tab_cat_final[$tab_id2cat[0]]=$tab_id2cat[1];
}

header("Content-Type:text/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
?>
<root>
<?php
foreach ($tab_cat_final as $id_category=>$name_category){
$products = Product::getProducts(intval($cookie->id_lang), 0, ($number > 10000 ? 10000 : $number), $orderBy, $orderWay, $id_category, true);
foreach ($products AS $product)
{
 $image = Image::getImages(intval($cookie->id_lang), $product['id_product']);
 $prix=Product::getPriceStatic($product['id_product']);
 if ($product['reduction_percent']>0) $prix_promo=$prix*(1-$product['reduction_percent']/100);else $prix_promo=($prix-$product['reduction_price']);


 echo "<item>\n";
 echo "<name><![CDATA[".$product['name']."]]></name>\n";
							echo "<link><![CDATA[".htmlspecialchars($link->getproductLink($product['id_product'], $product['link_rewrite'], Tools::getValue('id_category'))).$affiliate."]]></link>\n";
 echo "<price>".$prix."</price>\n";
 echo "<image>"._PS_BASE_URL_.__PS_BASE_URI__."img/p/".$image[0]['id_product']."-".$image[0]['id_image']."-large.jpg</image>\n";
 echo "<category_full><![CDATA[".$name_category."]]></category_full>\n";
							echo "<category_link><![CDATA[".htmlspecialchars($link->getcategoryLink($category['id_category'], $category['link_rewrite'], Tools::getValue('id_category'))).$affiliate."]]></category_link>\n";
 echo "<manufacturer><![CDATA[".$product['manufacturer_name']."]]></manufacturer>\n";
 echo "<reference><![CDATA[".$product['id_product']."]]></reference>\n";
 echo "</item>\n";
}
}
?>
</root>

 

I need get 9 items, format is like this:

 

<? Xml version = "1.0" encoding = "utf-8"?>
<root>
<item>
	 <name> Nokia 6120 </ name>
	 <link> http://www.myshop.com/info/Nokia6120/</link>
	 <price> 150.55 </ price>
	 <image> http://www.myshop.com/images/Nokia6120.jpg </image>
	 <category_full> Cell Phones & gt; & gt; Nokia </category_full>
	 <category_link> http://www.myshop.com/nokia</category_link>
	 <manufacturer> Nokia </manufacturer>
	 <model> 6120 </model>
	 <in_stock> 7 </in_stock>
</ Item>
<item>
	 ...
</ Item>
</ Root>

 

I need help to fix problem for the following items:

 

1. wrong price format: script show 191.26073 instead of 191.26 and 65 instead of 65.00.

 

2. show incorrect image path: http://mysite.com/img/p/8-27-large.jpg,

the correct patch need to be: http://mysite.com/27...ult/picture.jpg

 

3. incorrect category_link: 'http://mysite.com/en/-', need to be http://www.mysite.com/7-cellphones/

 

4. I need get <model> 6120 </model> and

 

5. <in_stock> 5 </in_stock> quantity

 

Any help would be appreciated.

Edited by galactic (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...