Subir productos a www.mercamania.es

ososoft

Nuevo usuario
Subir productos a www.mercamania.es [SOLUCIONADO]

Buenas, estoy intentando subir los productos a mercamania.
Me piden un fichero en formato CSV, TXT o XML.

He visto esta solucion en el foro oficial:
http://www.magentocommerce.com/boards/viewthread/34451/
Pero me pierdo en el paso 4 ya que NO se aplicar el wget para descargar el archivo xml...:triste:

Asi que lo intento con la exportacion de perfiles:
Creo un perfil con los datos que me piden pero...

1) category_ids, solo exporto el numero de la categoria pero no se llamar al nombre de la categoria !!

2) url_path, me falta poner delante de el path la direccion de la tienda.

3) image, me falta como en la url_path pero la direccion completa para llamar a la imagen!!

4) is_in_stock, magento responde 1 pero en el archivo necesito poner "en stock"

Se que es mucho rollo, pero si me podeis orientar os lo agradezco muuuuucho.

Gracias, saludos ,Javi
 
Última edición:

ososoft

Nuevo usuario
Si Xarlie, ya lo averigue, estoy creando el archivo de exportacion para xls, cuando lo tenga terminado lo pongo aquí.
 

ososoft

Nuevo usuario
Bueno, al final mercamania me a aceptado este archivo y todos mis productos ya estan en mercamania, lo pongo aqui tal cual por si a alguien le sirve:

PHP:
<?php $storeId = (int) $this->getRequest()->getParam('store', 0); ?>
            <?php $store = Mage::app()->getStore($storeId); ?>
            <?php $collection = Mage::getModel('catalog/product')->getCollection()
                ->addAttributeToSelect('category_ids')
                ->addAttributeToSelect('sku')
                ->addAttributeToSelect('name')
                ->addAttributeToSelect('description')
                ->addAttributeToSelect('price')
                ->addAttributeToSelect('status')
                ->addAttributeToSelect('url_path')
                ->addAttributeToSelect('image')
                ->addAttributeToSelect('manufacturer')
                /* A vous d'ajouter les autres attributs que vous voulez, images par ex.*/
            ?>
<catalogo>
<?php foreach($collection as $product) : ?>
<?php if($product->getStatus() == 1) : ?> 
    <?php $html = '<articulo>'; ?>

           <?php  $html .= '<categoria><![CDATA[';  ?>
           <?php  $categories = $product->getcategory_ids(); ?>
           <?php  $category = Mage::getModel('catalog/category')->load($categories) ?> 
           <?php  $html .= $category->getName(); ?>
           <?php  $html .= ']]></categoria>';  ?>

           <?php  $html .= '<referencia_interna><![CDATA[';  ?>
           <?php  $html .= $product->getSku(); ?>
           <?php  $html .= ']]></referencia_interna>';  ?>

           <?php  $html .= '<nombre><![CDATA[';  ?>
           <?php  $html .= $product->getName(); ?>
           <?php  $html .= ']]></nombre>';  ?>

           <?php  $html .= '<precio><![CDATA[';  ?>
           <?php  $html .= $product->getPrice(); ?>
           <?php  $html .= ']]></precio>';  ?>

           <?php  $html .= '<url_produicto><![CDATA[http://www.dieltron.com/';  ?>
           <?php  $html .= $product->getUrl_path(); ?>
           <?php  $html .= ']]></url_produicto>';  ?>
            
           <?php  $html .= '<url_imagen><![CDATA[http://www.dieltron.com/media/catalog/product';  ?>
           <?php  $html .= $product->getImage(); ?>
           <?php  $html .= ']]></url_imagen>';  ?>

           <?php  $html .= '<descripción><![CDATA[';  ?>
           <?php  $html .= $product->getDescription(); ?>
           <?php  $html .= ']]></descripción>';  ?>

           <?php  $html .= '<gastos_de_envío><![CDATA[7.50]]></gastos_de_envío>';  ?>
           <?php  $html .= '<disponibilidad><![CDATA[en stock]]></disponibilidad>';  ?>
         
           <?php  $html .= '<marca><![CDATA[';  ?>
           <?php  $html .= $product->getAttributeText('manufacturer'); ?>
           <?php  $html .= ']]></marca>';  ?>

           <?php  $html .= '<ean><![CDATA[0]]></ean>';  ?>
           <?php  $html .= '<garantía><![CDATA[2 años]]></garantía>';  ?>

           <?php  $html .= '<referencia_modelo><![CDATA[';  ?>
           <?php  $html .= $product->getSku(); ?>
           <?php  $html .= ']]></referencia_modelo>';  ?>

           <?php  $html .= '<divisa><![CDATA[EUR]]></divisa>';  ?>

           <?php  $html .= '<referencia_fabricante><![CDATA[0]]></referencia_fabricante>';  ?>
    <?php $html .= '</articulo>'; ?>
    <?php echo $html; ?>
<?php endif; ?>
<?php endforeach; ?>
</catalogo>
 

ososoft

Nuevo usuario
Probar con archivo php

Hola, resulta que mi solucion no a ido bien, ya que mercamania no me actualiza, tengo otra idea...

www.shopmania.es si tiene un script para magento, tan facil como ponermo en el directorio raiz, solo hay que modificarlo para como lo quiere mercamania.

Es este:

HTML:
<?php

set_time_limit(0);
ignore_user_abort();
error_reporting(E_ALL ^ E_NOTICE);
$_SVR = array();

// Include configuration file
if(!file_exists("app/Mage.php")) {
	exit('<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD><BODY><H1>Not Found</H1>Please ensure that this file is in the root directory, or make sure the path to the directory where the configure.php file is located is defined corectly above in $path_include variable</BODY></HTML>');
}
else {
	require_once 'app/Mage.php';
	Mage::app('default');
}

// Datafeed specific settings
$datafeed_separator = "|"; // Possible options are \t or |

// Define VAT value
$vat_value = 1.16; // 16%

// Description options - possible values on, off
if (isset($_GET['description'])){
	$show_description = ($_GET['description'] == "off") ? "off" : "on";
}
else {
	$show_description = "on";
}

if (isset($_GET['currency'])) {
	$currency_code = $_GET['currency'];
	$convert_price_to_currency = 1;
}

// Image options - possible values on, off
if (isset($_GET['image'])){
	$show_image = ($_GET['image'] == "off") ? "off" : "on";
}
else {
	$show_image = "on";
}

// Add VAT to prices
if (isset($_GET['add_vat'])){
	$add_vat = ($_GET['add_vat'] == "on") ? "on" : "off";
}
else {
	$add_vat = "off";
}

try{

	// Get shop currency
	$default_currency = Mage::getModel('directory/currency')->getConfigBaseCurrencies();
	$datafeed_dafault_currency = $default_currency[0];

	if (@$convert_price_to_currency == 1) {
		$currency_value_rate = Mage::getModel('directory/currency')->getCurrencyRates($datafeed_dafault_currency, $currency_code);
		$datafeed_currency = $currency_code;
	}
	else {
		$datafeed_currency = $datafeed_dafault_currency;
	}

	// Get the products
	$products = Mage::getModel('catalog/product')->getCollection();
	$products->addAttributeToFilter('status', 1);//enabled
	$products->addAttributeToFilter('visibility', 4);//catalog, search
	$products->addAttributeToSelect('*');
	$prodIds = $products->getAllIds();
	
	$product = Mage::getModel('catalog/product');

	// Array to check if product is already send
	$already_sent = array();
	
	foreach($prodIds as $productId) {

		$product->load($productId);

		$prod_model = $product->getSku();	
		$prod_id = $product->getId();
		// If we've sent this one, skip the rest - this is to ensure that we do not get duplicate products
		if (@$already_sent[$prod_id] == 1) continue;
		$prod_name = $product->getName();

		if ($show_description == "off"){
			$prod_desc = "";	   
		}
		else {
			$prod_desc = $product->getDescription();
		}
		$prod_url = function_to_get_product_url($product->getProductUrl());

		if ($show_image == "off"){
			$prod_image = "";		
		}
		else {
			$prod_image = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
			if (strpos($prod_image, "no_selection")) {
				$prod_image = "";
			}
		}
	
		if ($product->getResource()->getAttribute('special_price')) {
			if ($product->getResource()->getAttribute('special_from_date')) {
				$special_from_date = $product->getResource()->getAttribute('special_from_date')->getFrontend()->getValue($product);
			}
			if ($product->getResource()->getAttribute('special_to_date')) {
				$special_to_date = $product->getResource()->getAttribute('special_to_date')->getFrontend()->getValue($product);
			}
			
			$prod_special_price = $product->getResource()->getAttribute('special_price')->getFrontend()->getValue($product);	
			
		}
		$prod_normal_price = $product->getPrice();

		if ((date("Y-m-d G:i:s") < $special_to_date) && (date("Y-m-d G:i:s") > $special_from_date)) {
			$prod_price = $prod_special_price;
		}
		else {
			$prod_price = $prod_normal_price;
		}

		if (@$convert_price_to_currency == 1) {
			$prod_price = $prod_price * $currency_value_rate[$currency_code];
		}
		// Add VAT to prices
		if ($add_vat == "on") {
			$prod_price = $prod_price * $vat_value;
		}

		if ($product->getResource()->getAttribute('manufacturer')) {
			$manufacturer = $product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($product);	
		}
		else {
			$manufacturer = "";
		}

	    $category_name = "";		

		// Get the product categories            		
		foreach($product->getCategoryIds() as $_categoryId){
			$category = Mage::getModel('catalog/category')->load($_categoryId);
			if ($category->getName() && $category_name) {
				$category_name .= " > " . $category->getName();
			}
			else {
				$category_name .= $category->getName();
			}
	    }

		// Clean product name (new lines)
		$prod_name = str_replace("\n", "", strip_tags($prod_name));
		$prod_name = str_replace("\r", "", strip_tags($prod_name));
		$prod_name = str_replace("\t", " ", strip_tags($prod_name));

		// Clean product description (Replace new line with <BR>). In order to make sure the code does not contains other HTML code it might be a good ideea to strip_tags()
		$prod_desc = replace_not_in_tags("\n", "<BR />", $prod_desc);
		$prod_desc = str_replace("\n", " ", $prod_desc);		
		$prod_desc = str_replace("\r", "", $prod_desc);
		$prod_desc = str_replace("\t", " ", $prod_desc);
		
		// Clean product names and descriptions (separators)
		if ($datafeed_separator == "\t") {
			// Continue... tabs were already removed
		}
		elseif ($datafeed_separator == "|") {
			$prod_name = str_replace("|", " ", strip_tags($prod_name));
			$prod_desc = str_replace("|", " ", $prod_desc);
		}
		else {
			print "Incorrect columns separator.";
			exit;
		}

		print $category_name . $datafeed_separator . 
		$manufacturer . $datafeed_separator . 
		$prod_model . $datafeed_separator . 
		$prod_id . $datafeed_separator . 
		$prod_name . $datafeed_separator . 
		$prod_desc . $datafeed_separator . 
		$prod_url . $datafeed_separator . 
		$prod_image . $datafeed_separator . 
		$prod_price . $datafeed_separator . 
		$datafeed_currency . 
		"\n";

		$already_sent[$prod_id] = 1;
	}
	

}
catch(Exception $e){
	die($e->getMessage());
}

// Function to return the Product URL based on your product ID
function function_to_get_product_url($product_url){
	$current_file_name = basename($_SERVER['REQUEST_URI']);
	$product_url = str_replace($current_file_name, "index.php", $product_url);
	$product_url = str_replace("datafeed_shopmania_magento", "index", $product_url);
	
	// Eliminate id session 
	$pos_SID = strpos("?SID", $product_url);
	if ($pos_SID) {
		$product_url = substr($product_url, 0, $pos_SID);
	}
	return $product_url;
	
}

function replace_not_in_tags($find_str, $replace_str, $string) {
	
	$find = array($find_str);
	$replace = array($replace_str);	
	preg_match_all('#[^>]+(?=<)|[^>]+$#', $string, $matches, PREG_SET_ORDER);	
	foreach ($matches as $val) {	
		if (trim($val[0]) != "") {
			$string = str_replace($val[0], str_replace($find, $replace, $val[0]), $string);
		}
	}	
	return $string;
}

function print_array($_ARR) {
	print "<pre>";
	print_r($_ARR);
	print "</pre>";
}


?>
Si corres este archivo te devuelve un listado de los productos para shopmania.

La pregunta es:

Necesito que la primera linea la pueda escribir yo, tiene que llevar unas descripciones para mercamania.
Pero si pongo un "echo" o un "print" antes de la orden "foreach" me da un error:
PRUEBA

enlace sin error: www.dieltron.com/datafeed_mercamania_magento.php
enlace con error: www.dieltron.com/datafeed_prueba_magento.php

y este es el error que da:

HOLAWarning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/datafeed_prueba_magento.php:115) in /var/www/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php on line 94

¿¿ alguna idea de como poner un texto antes de que empiezen los productos??

Gracias, javi
 
Arriba