<?php
/*
-------------
Script name: XML & CSV Datafeed export script for Magento
Author: Rutger Groot - rutgergroot.nl
User change allowed: Yes
Software License: Donateware --> http://bit.ly/doneer
Updated:02 November 2010 (Update: Fix for where every deeplink is the same)
-------------
Installation and usage:
Place this script in your root folder (e.g. public_html)
Run the script in your browser for XML export (e.g. mywebshop.com/export.php)
# Add ?type=csv for tab seperated CSV export
# Add &source=xxx for adding an utm_source to the URL    
# Add &max=xxx to cap total product export
-------------
*/
//Prepare the basics
require_once 'app/Mage.php';
Mage::app('default');
//Catch variables for selections
$max $_GET['max'];
if (
$max == "1"){
//yep, i know...
$rand rand(1,21);
}
else{
$rand "";
}
if (isset(
$_GET['source'])){
    
$source "?utm_source=" $_GET['source'];
}
else{
    
$source "";
}
if (isset(
$_GET['type'])){
    
$type $_GET['type'];
}
else{
    
$type "xml";
}
/*---------------------CSV------------------------------*/
if ($type == "csv"){
    
//Prepare the feed location - /export/ needs a 0777 chmod!
        
$location "media/export/feed_" $_GET['source'] . "-" $max "-" ".csv";
        
define('SAVE_FEED_LOCATION','' $location '');
    
//Check file
        
try{
        
$handle fopen(SAVE_FEED_LOCATION'w');
    
//Prepare the headings
        
$heading = array('title','description','sku','ean','price''old_price''availability','link','image''shipping_rate''category');
        
$feed_line=implode("\t"$heading)."\r\n";
        
fwrite($handle$feed_line);
    
//Get products from DB
        
$products Mage::getModel('catalog/product')->getCollection();
        
$products->addAttributeToFilter('status'1);
        
$products->addAttributeToFilter('visibility'4);
        
$products->addAttributeToSelect('*');
        
$product Mage::getModel('catalog/product');
    
//Get max data
        
if (isset($_GET['max'])){
        
$prodIds=$products->getAllIds($max$rand);
        }
        else{
        
$prodIds=$products->getAllIds();
        }
    
//Prepare the loop
    
foreach($prodIds as $productId) {
        
$product->load($productId);
        
$product_data = array();    
    
//Get product data
        
$product_data['title']=$product->getName();
        
$product_data['description']=$product->getDescription();
        
$product_data['sku']=$product->getSku();
        
$product_data['ean']=$product->getEan();
        
$product_data['price']=number_format($product->getPrice(), 2);
        
$product_data['oldprice']=number_format($product->getOudeprijs(), 2);
        
$product_data['availability']="Op voorraad";
        
$product_data['link']=Mage::getBaseUrl().$product->getUrlPath().$source;
        
$product_data['image_link']=Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
        
$product_data['shipping_rate']=number_format($product->getshipping_price(), 2);
    
//Get category data
        
foreach($product->getCategoryIds() as $_categoryId){
            
$category Mage::getModel('catalog/category')->load($_categoryId);
            
$product_data['product_type'].=$category->getName().', ';}
            
$product_data['product_type']=rtrim($product_data['product_type'],', ');
    
//Run the loop
        
foreach($product_data as $k=>$val){
            
$bad=array('"',"\r\n","\n","\r","\t");
            
$good=array(""," "," "," ","");
            
$product_data[$k] = '"'.str_replace($bad,$good,$val).'"';
        }
        
$feed_line implode("\t"$product_data)."\r\n";
            
fwrite($handle$feed_line);
            
fflush($handle);
        }
    
//Create the CSV File
        
fclose($handle);
        }
    catch(
Exception $e){
        
//Error check
    
die($e->getMessage());
    }
    
//Include CSV
    
include ($location);
}
/*---------------------END OF CSV-----------------------*/
/*------------------------XML---------------------------*/
if ($type == "xml"){
//Setup new session to kill annoying
//headers already sent out error
session_start();
//Setup the headers
        
header('Content-type: text/xml');
        
header('Pragma: public');        
        
header('Cache-control: private');
        
header('Expires: -1');    
    
//XML Start
        
echo('<?xml version="1.0" encoding="utf-8"?>');
        echo
"<producten>";
    
//Get products from DB
        
$products=Mage::getModel('catalog/product')->getCollection();
        
$products->addAttributeToFilter('status'1);
        
$products->addAttributeToFilter('visibility'4);
        
$products->addAttributeToSelect('*');
        
$product Mage::getModel('catalog/product');
    
//Get max data
        
if (isset($_GET['max'])){
        
$prodIds=$products->getAllIds($max$rand);
        }
        else{
        
$prodIds=$products->getAllIds();
        }
    
//Prepare the loop
        
foreach($prodIds as $productId) {
            
$product->load($productId);
            
$product_data = array();    
    
//Get product data
        
$product_data['title']=$product->getName();
        
$product_data['description']=$product->getDescription();
        
$product_data['sku']=$product->getSku();
        
$product_data['ean']=$product->getEan();
        
$product_data['price']=number_format($product->getPrice(), 2);
        
$product_data['oldprice']=number_format($product->getOudeprijs(), 2);
        
$product_data['availability']="Op voorraad";
        
$product_data['link']=Mage::getBaseUrl().$product->getUrlPath().$source;
        
$product_data['image_link']=Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
        
$product_data['shipping_rate']=number_format($product->getshipping_price(), 2);
    
//Get category data
        
foreach($product->getCategoryIds() as $_categoryId){
        
$category Mage::getModel('catalog/category')->load($_categoryId);
        
$product_data['product_type'].=$category->getName().', ';}
        
$product_data['product_type']=rtrim($product_data['product_type'],', ');
    
//Run the loop ?>
        <product>
            <sku><![CDATA[<?php echo $product_data['sku'?>]]></sku>
            <link><![CDATA[<?php echo $product_data['link'].$source ?>]]></link>
            <title><![CDATA[<?php echo $product_data['title'?>]]></title>
            <description><![CDATA[<?php echo $product_data['description'?>]]></description>
            <image_link><![CDATA[<?php echo $product_data['image_link'?>]]></image_link>    
            <price><![CDATA[<?php echo $product_data['price'?>]]></price>
            <old_price><![CDATA[<?php echo $product_data['oldprice'?>]]></old_price>
            <availability><![CDATA[<?php echo $product_data['availability'?>]]></availability>
            <shipping_rate><![CDATA[<?php echo $product_data['shipping_rate'?>]]></shipping_rate>
            <category><![CDATA[<?php echo $product_data['product_type'?>]]></category>
            <ean><![CDATA[<?php echo $product_data['ean'?>]]></ean>    
        </product>
        <?php //End of loop ?>
        </producten>
<?php 
/*------------------------END OF XML-----------------------*/
/*---------------------------EOF---------------------------*/
?>