Foros del Web » Programando para Internet » PHP »

Necesito aclaración para muy torpe.

Estas en el tema de Necesito aclaración para muy torpe. en el foro de PHP en Foros del Web. Con esto de la crisis hay que buscarse la vida y gastar poco, asi que he montado una tienda online con prestashop que no esta ...
  #1 (permalink)  
Antiguo 07/03/2012, 11:44
 
Fecha de Ingreso: febrero-2012
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Necesito aclaración para muy torpe.

Con esto de la crisis hay que buscarse la vida y gastar poco, asi que he montado una tienda online con prestashop que no esta dando ningun beneficio pero si mucho trabajo.
El proveedor nos proporciona csv y xml con 7000 productos, los archivos csv tengo que modificarlos , partirlos en 20rows con lo cual me junto con 300 y pico archivos y aun asi a veces prestashop no es capaz de pasar bien los datos.
El xml es mediante un url, y se actualiza diariamente.
Buscando por toda la red la manera de hacer una sincronizacion con simplexml y mysql no he sido capaz.
He hecho lo que me ponia el wiki [URL="http://www.forosdelweb.com/wiki/PHP:%C2%BFC%C3%B3mo_puedo_pasar_valores_de_un_arch ivo_XML_a_una_base_MySQL_utilizando_PHP%3F"]PHP:¿Cómo puedo pasar valores de un archivo XML a una base MySQL utilizando PHP?[/URL]
No me funciona. El xml es el siguiente:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalogo lang="ES" date="06/03/2012 8:00:00" GMT="+1">

<producto numero="1">
<categoria><![CDATA[COMPONENTES > MICROPROCESADORES]]></categoria>
<familia>COMPONENTES</familia>
<id_familia>12</id_familia>
<subfamilia>MICROPROCESADORES</subfamilia>
<id_subfamilia>12010</id_subfamilia>
<referencia><![CDATA[AD3400OJGXBOX]]></referencia>
<titulo><![CDATA[MICRO. AMD X3 A TRIPLE CORE 3400, SOCKET FM1, 2.7GHz, 65W, IN BOX]]></titulo>
<descripcion><![CDATA[Technical information <br>processor manufacturer: AMD <br>processor Core: dual-Core <br>clock speed: 2.70 ghz <br>l1 cache: 256 kb <br>l2 cache: 1 MB <br>64-bit processing: yes <br>process technology: 32 nm <br>processor technology: AMD64 technology <br>processor technology: virtualization technology <br>processor socket: socket FM1<br>display & graphics <br>graphics controller manufacturer: AMD <br>graphics controller model: radeon HD 6410d<br>power description <br>thermal design power: 65 w<br>environmental conditions <br>cooler type: fan heatsink<br>physical characteristics <br>width: 1.6&quot; <br>depth: 1.6&quot;<br>miscellaneous <br>platform supported: pc<br><br><br>]]></descripcion>
<marca><![CDATA[AMD]]></marca>
<ean>730143300711</ean>
<pn>AD3400OJGXBOX</pn>
<pvd divisa="EUR" canon="0,00" iva="0,00">0,00</pvd>
<canon>0,00</canon>
<pvp divisa="EUR" canon="0,00" iva="0,00">0,00</pvp>
<url_imagen><![CDATA[http://www.dynos.es/img/micro.-amd-x3-a-triple-core-3400-socket-fm1-2.7ghz-65w-in-box-730143300711__AD3400OJGXBOX.jpg]]></url_imagen>
<stock>15</stock>
<peso>0,29</peso>
<oferta>0</oferta>
<precio_oferta>0</precio_oferta>
<liquidacion>0</liquidacion>
<fecha_alta>19/10/2011</fecha_alta>
<images>

</images>

</producto>

<producto numero="2">
<categoria><![CDATA[COMPONENTES > MICROPROCESADORES]]></categoria>
<familia>COMPONENTES</familia>
<id_familia>12</id_familia>
<subfamilia>MICROPROCESADORES</subfamilia>
<id_subfamilia>12010</id_subfamilia>
<referencia><![CDATA[AD3500OJDXBOX]]></referencia>
<titulo><![CDATA[MICRO. AMD X3 A TRIPLE CORE 3500/ SOCKET FM1/ 3MG/ 2.1MHz/ 65W/ IN BOX]]></titulo>
<descripcion><![CDATA[Micro. AMD x3 a triple Core 3500 / socket FM1 / 3mg / 2.1mhz / 65w / in <br>box<br>]]></descripcion>
<marca><![CDATA[AMD]]></marca>
<ean>730143300797</ean>
<pn>AD3500OJDXBOX</pn>
<pvd divisa="EUR" canon="0,00" iva="0,00">0,00</pvd>
<canon>0,00</canon>
<pvp divisa="EUR" canon="0,00" iva="0,00">0,00</pvp>
<url_imagen><![CDATA[http://www.dynos.es/img/micro.-amd-x3-a-triple-core-3500-socket-fm1-3mg-2.1mhz-65w-in-box-730143300797__AD3500OJDXBOX.jpg]]></url_imagen>
<stock>8</stock>
<peso>0,27</peso>
<oferta>0</oferta>
<precio_oferta>0</precio_oferta>
<liquidacion>0</liquidacion>
<fecha_alta>23/01/2012</fecha_alta>
<images>

</images>

</producto>
  #2 (permalink)  
Antiguo 07/03/2012, 12:00
Avatar de apaxito  
Fecha de Ingreso: febrero-2012
Ubicación: Sevilla
Mensajes: 47
Antigüedad: 12 años, 9 meses
Puntos: 10
Respuesta: Necesito aclaración para muy torpe.

Desconozco si prestashop puede importar xml pero otras soluciones como magento, o virtuemart para joolma! si te permiten parsear el xml a tablas en tu mysql. Te aconsejaría que siguieras buscando en el propio prestashop, debería tener alguna opción de importación, y en caso contrario algún plugin o script que te ahorre tiempo.

Mucha suerte.
__________________
Sígueme en el Blog que llevo con otros dos compañeros sobre PHP, HTML5, JavaScript, JQuery y noticias tecnológicas... http://www.inix.es/docevoltios
  #3 (permalink)  
Antiguo 08/03/2012, 05:15
 
Fecha de Ingreso: febrero-2012
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Necesito aclaración para muy torpe.

tengo entendido que creando un archivo php en la raiz similar al que voy a poner se puede hacer y seguro que algun genio es capaz de hacerlo.

<?php

require "../config/settings.inc.php";

$id_spojeni = mysql_connect(_DB_SERVER_,_DB_USER_,_DB_PASSWD_);
if (!$id_spojeni)
die('Spojení s MySQL databází se nezdařilo.');
$vysledek_zvoleni_db = mysql_select_db(_DB_NAME_,$id_spojeni);
if (!$vysledek_zvoleni_db)
{
echo mysql_errno($id_spojeni),': ',mysql_error($id_spojeni),'<br>';
die('Nepodařilo se vybrat databázi.');
}
$setUTF8 = "SET NAMES 'UTF8' ";

$sql =
"SELECT pr_lan.name PRODUCT, pr_lan.description_short DESCRIPTION, man.name MANUFACTURER, CONCAT('http://www.megasur.es/descargas/tarifas/SetXML.php?',CONCAT(pr.id_product,CONCAT('-',CONCAT(pr_lan.link_rewrite,'.html')))) URL, CONCAT('http://www.megasur.es/descargas/tarifas/SetXML.php?',CONCAT('img/p/',(CONCAT(pr.id_product,(CONCAT('-',(CONCAT(img.id_image,'-large.jpg')))))))) IMGURL, ROUND(IF(pr.reduction_percent=0,pr.price*1.2,((pr. price*1.2)/100)*(100-reduction_percent))) PRICE_VAT_PERCENT, ROUND(IF(pr.reduction_price=0,pr.price*1.2,((pr.pr ice*1.2) - pr.reduction_price))) PRICE_VAT_PRICE, '3' DELIVARY_DATE, IF(ROUND(IF(pr.reduction_percent=0,pr.price*1.2,(( pr.price*1.2)/100)*(100-reduction_percent))) > 3500, '0', '1') TOLLFREE
FROM ps_product pr, ps_product_lang pr_lan, ps_manufacturer man, ps_image img
WHERE pr.id_product = pr_lan.id_product
AND pr.id_manufacturer = man.id_manufacturer
AND pr.id_product = img.id_product"
;

mysql_query($setUTF8,$id_spojeni);

$id_vysledku = mysql_query($sql,$id_spojeni);
if (!$id_vysledku)
{
echo mysql_errno($id_spojeni),': ',mysql_error($id_spojeni),'<br>';
die('Nepodařilo se vykonat SQL dotaz.');
}



$feed = '
<?xml version="1.0" encoding="utf-8" ?>

<!--
XML feed by http:///
Date: '.StrFTime("%d/%m/%Y %H:%M:%S", Time()).'
-->

<SHOP>
';

$soubor = fopen("seznam.xml", "w+");
fwrite($soubor, $feed);
fclose($soubor);

$soubor = fopen("seznam.xml", "a");

while(is_array($data = mysql_fetch_array($id_vysledku)))
{

if($data['PRODUCT'] != $before) {

if($data['PRICE_VAT_PERCENT'] <= $data['PRICE_VAT_PRICE'])
$PRICE_VAT = $data['PRICE_VAT_PERCENT'];
else
$PRICE_VAT = $data['PRICE_VAT_PRICE'];

$feed = '

<SHOPITEM>
<PRODUCTNAMEEXT>'.$data['PRODUCT'].'</PRODUCTNAMEEXT>
<DESCRIPTION>'.strip_tags($data['DESCRIPTION']).'</DESCRIPTION>
<MANUFACTURER>'.$data['MANUFACTURER'].'</MANUFACTURER>
<URL>'.$data['URL'].'</URL>
<IMGURL>'.$data['IMGURL'].'</IMGURL>
<PRICE_VAT>'.$PRICE_VAT.'</PRICE_VAT>
<DELIVARY_DATE>'.$data['DELIVARY_DATE'].'</DELIVARY_DATE>';
if($data['TOLLFREE'] == 1)
$feed = $feed.'
<TOLLFREE>1</TOLLFREE>';
$feed = $feed.'
</SHOPITEM>';

fwrite($soubor, $feed);
}

$before = $data['PRODUCT'];
}

$feed = '</SHOP>';

fwrite($soubor, $feed);
fclose($soubor);

echo 'Soubor vytvoren.';

?>
  #4 (permalink)  
Antiguo 08/03/2012, 06:48
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Necesito aclaración para muy torpe.

no se necesita ninguna genialidad, solo usa bien el simpleXML y una vez obtenidos los datos los insertas en la db. en caso de que exista el articulo solo lo actualizas, a mi me toco hacer lo mismo pero no con presta shop.

Etiquetas: mysql, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:11.