larose Posted June 26, 2012 Share Posted June 26, 2012 Hola a todos: LLevo ya muchas vueltas dadas a este tema y creo (ojalá me equivoque) que Prestashop no consigue una importación eficaz de las descripciones de productos. Os explico, tengo unos 3000 productos cuya descripción contiene etiquetas HTML como negritas <strong><b>, enlaces <a>, subrayados, listas <ul>, etc. en el Excel. Cuando lo convierto a CSV con Excel 2003 se pierden todas esas etiquetas y no encuetro ningún conversor medianamente útil... En anteriores proyectos y otros CMS he desarrollado herramientas que importan desde XML (parsear XML con PHP) y creo que son mucho más eficaces, incluso desde el punto de vista del dropshelling creo que se trabaja mucho más con XML... En fin: ¿ALGUIEN SABE CÓMO CONSEGUIR UN .CSV CON LA DESCRIPCION DE LOS PRODUCTOS EN HTML? He leído ya muchos posts de gente por todo el mundo con este problema. Si hay algo hecho y que valga la pena, hacedlo saber, sino continuaré con mi importador de xml que tengo a medio hacer... Y lo compartiré por supuesto! Salud foreros !!! Link to comment Share on other sites More sharing options...
Inntimo Posted June 26, 2012 Share Posted June 26, 2012 Yo genero una consulta SQl en la base de datos y obtengo un listado de todos los productos, con las descripciones y las etiquetas html de las mismas. Ahi mismo en la base de datos exporto la consulta a CSV. Si abro dicho CSV en excel puedo ver que las descripciones tienen todas las etiquetas html.... La consulta que hago es esta: select ps.id_product, `name`, ps.price, ps.wholesale_price, ps.weight, ps.reference, ps.id_tax_rules_group, pl.description_short, pl.description, ps.id_category_default, ps.active from ps_product_lang pl, ps_product ps where pl.id_product = ps.id_product and pl.id_lang=3 Aclaración: donde pone pl.id_lang=3 , el 3 se refiere al idioma por defecto de tu tienda.... Espero sea lo que necesitas... Link to comment Share on other sites More sharing options...
nadie Posted June 26, 2012 Share Posted June 26, 2012 Yo genero una consulta SQl en la base de datos y obtengo un listado de todos los productos, con las descripciones y las etiquetas html de las mismas. Ahi mismo en la base de datos exporto la consulta a CSV. Si abro dicho CSV en excel puedo ver que las descripciones tienen todas las etiquetas html.... La consulta que hago es esta: select ps.id_product, `name`, ps.price, ps.wholesale_price, ps.weight, ps.reference, ps.id_tax_rules_group, pl.description_short, pl.description, ps.id_category_default, ps.active from ps_product_lang pl, ps_product ps where pl.id_product = ps.id_product and pl.id_lang=3 Aclaración: donde pone pl.id_lang=3 , el 3 se refiere al idioma por defecto de tu tienda.... Espero sea lo que necesitas... Puntualización, el id 3 no es siempre idioma por defecto, es el idioma Español normalmente, que en tu caso coincide con el idioma por defecto, pero no siempre por defecto el idioma sera el Español. Link to comment Share on other sites More sharing options...
larose Posted June 27, 2012 Author Share Posted June 27, 2012 Vaya, parece que no nos entendemos. Yo me refiero a IMPORTAR, es decir a meter datos en Prestashop. No a sacarlos. Lo que quiero decir es que cuando quiero actualizar los productos desde mi Excel, genero un .CSV el cual subo desde el Backoffice con la herramienta de importación. PERO ESTE CSV HA PERDIDO EL HTML DE LAS DESCRIPCIONES !! No veo la manera de conseguir guardar en un .CSV desde Excel las descripciones con negritas y enlaces... ¿Alguno lo hacéis con XML? ¿Qué herramienta usáis el resto de mortales? Gracias Inntimo y nadie. Link to comment Share on other sites More sharing options...
nadie Posted June 27, 2012 Share Posted June 27, 2012 Vaya, parece que no nos entendemos. Yo me refiero a IMPORTAR, es decir a meter datos en Prestashop. No a sacarlos. Lo que quiero decir es que cuando quiero actualizar los productos desde mi Excel, genero un .CSV el cual subo desde el Backoffice con la herramienta de importación. PERO ESTE CSV HA PERDIDO EL HTML DE LAS DESCRIPCIONES !! No veo la manera de conseguir guardar en un .CSV desde Excel las descripciones con negritas y enlaces... ¿Alguno lo hacéis con XML? ¿Qué herramienta usáis el resto de mortales? Gracias Inntimo y nadie. Yo importo ficheros csv, con descripciones en html, sin ningún problema. Link to comment Share on other sites More sharing options...
nadie Posted June 27, 2012 Share Posted June 27, 2012 Tema movido a discusión general. Link to comment Share on other sites More sharing options...
larose Posted June 27, 2012 Author Share Posted June 27, 2012 Gracias nadie, ¿y tú cómo consigues que el CSV mantenga las etiquetas? Yo estoy con mi Excel 2007 (o 2003 me da igual), con una columna descripción que tiene negritas, le doy a "guardar como", selecciono en tipo:"texto delimitado por comas (CSV)". Cuando abro el CSV se han perdido las negritas. Link to comment Share on other sites More sharing options...
Inntimo Posted June 27, 2012 Share Posted June 27, 2012 Claro... yo me referia a sacar el listado para obtener las etiquetas html.... Si preparas un CSV y en la descripcion pones solamente el texto en negrita, utilizando el editor de texto del excel, sin niguna etiqueta, cuando lo importes a prestashop esa negrita no va a salir (si no me equivoco, sino que alguien me corrija) Para que salgan por ejemplo habria que poner en el CSV, en la descripcion, algo como: <div align="left">Tanga vibrador color negro con mando a distancia. </div> <div align="left"><br />El mando a distancia tiene un alcance de hasta 10 metros.<br />La bala vibradora es extraÃble para permitir el lavado de la prenda.<br />Utiliza 2 pilas tipo AAA (no incluidas).<br />El mando a distancia funciona con una pila que ya viene incluida.</div> Contiene etiquetas html que le indican que una parte del texto lleva un determinado formato... Ya digo, si estoy errado me vendra bien que alguien me corrija! Link to comment Share on other sites More sharing options...
CarlosAdrian Posted June 27, 2012 Share Posted June 27, 2012 Yo utilizo un Excel para subir las descripciones y no me da ningún problema. Lo que ocurre es que no puedes poner negrita en Excel "Hola" y pretender que te lo guarde como el XML <b>Hola</b>, sino que tienes que tratarlo como si fuese una cadena de texto, y poner en el texto directamente <b>Hola</b> sin ponerlo en negrita. A mí me funciona así. Link to comment Share on other sites More sharing options...
Inntimo Posted June 27, 2012 Share Posted June 27, 2012 Yo utilizo un Excel para subir las descripciones y no me da ningún problema. Lo que ocurre es que no puedes poner negrita en Excel "Hola" y pretender que te lo guarde como el XML <b>Hola</b>, sino que tienes que tratarlo como si fuese una cadena de texto, y poner en el texto directamente <b>Hola</b> sin ponerlo en negrita. A mí me funciona así. Exactamente a eso me referia.... Link to comment Share on other sites More sharing options...
larose Posted June 27, 2012 Author Share Posted June 27, 2012 Meca***entodoloquesemenea! Por supuesto que así funciona... ¿Y cómo le digo yo al cliente que aprenda HTML para actualizar sus productos? Sigo pensando negativamente de este tema... Por cierto en las últimas 24h ya he avanzado algo más el importador de XML. Admite tanto archivos de hoja de cálculo Excel como archivos de datos XML (con <[[CDATA]]>). Ahora ando parseando... Link to comment Share on other sites More sharing options...
CarlosAdrian Posted June 28, 2012 Share Posted June 28, 2012 Si te ha servido mi respuesta dale a "Like this", que me hace ilusión tener alguno No hace falta que tu cliente aprenda HTML, hay multitud de programas en internet que permiten escribir en un editor de textos y convertirlo a HTML. Luego es copiar y pegar. 2 Link to comment Share on other sites More sharing options...
Piratillar Posted June 29, 2012 Share Posted June 29, 2012 Meca***entodoloquesemenea! Por supuesto que así funciona... ¿Y cómo le digo yo al cliente que aprenda HTML para actualizar sus productos? Sigo pensando negativamente de este tema... Por cierto en las últimas 24h ya he avanzado algo más el importador de XML. Admite tanto archivos de hoja de cálculo Excel como archivos de datos XML (con <[[CDATA]]>). Ahora ando parseando... Al final como lo has solucionado ya que yo tengo el mismo problema con el CSV y con Excel. Gracias. Link to comment Share on other sites More sharing options...
larose Posted July 10, 2012 Author Share Posted July 10, 2012 (edited) Hola Piratillar, como ya comenté lo que hago es parsear XML y los pasos serían los siguientes: 1. Guardar el Excel como "Hoja de cálculo XML", manteniendo un cierto orden en los campos. Ese orden se va a seguir luego para recorrer los productos. 2. A través del formulario cuyo código pego a continuación subo el XML, lo parseo, compruebo si hay cambios en los artículos y lo guardo en la BD. Faltan muchas comprobaciones, pero de momento esto es lo que ando probando. El fichero se podría llamar update_stock.php por ejemplo: <?php //Para mostrar errores //error_reporting(E_ALL); //ini_set("display_errors", 1); // incluir la clase PHP para parsear XML require("xml2array.php"); //xml2array.php, u007xml.php ... o algun otro similar // esta funcion ayuda a quitar los saltos de linea y tabulaciones que tiene el Excel XML. function limpiarEspacios($codigo){ $buscar = array('/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s'); $reemplazar = array('>','<','\\1'); $codigo = preg_replace($buscar, $reemplazar, $codigo); $codigo = str_replace("> <", "><", $codigo); return $codigo; } //NUMERO DE FILAS QUE HAY EN EL XML ANTES DEL LISTADO (CABECERAS) $encabezado = $_POST['encabezado']; $salida = ""; $nuevos = 0; $modificados = 0; if($_FILES['file']['tmp_name']){ echo "HAY FILE ".$_FILES['file']['tmp_name']; $archivoXML = file_get_contents ($_FILES['file']['tmp_name']); if (empty($archivoXML)) die( "El archivo no se encuentra o falla. Intentelo de nuevo [<a href=\"javascript:history.go(-1)\">volver</a>]" ."<script type=\"text/javascript\">function volver(){ history.go(-1); } setTimeout(\"volver()\",5000); </script>" ); $cadenaA = str_replace('<NamedCell', '', $archivoXML); $cadenaB = str_replace('ss:Name="_FilterDatabase"/>', '', $cadenaA); $cadenaC = limpiarEspacios($cadenaB); $cadenaLimpia = str_replace('ss:', '', $cadenaC); // resultado : "Antes que ellos tuvieran leyes, León tuvo 24 reyes" print $cadenaLimpia; $xml = new leerXML($cadenaLimpia); //antes leerXML($archivoXML); //$xml->verXML(); $totales = $xml->nFilas; echo("<br />Total artículos a importar: ".($totales - $encabezado)."<br /><br />"); for($i=$encabezado; $i < $xml->nFilas; $i++){ //si hay encabezado "i" empieza en 1, sino en 0. // LA ESTRUCTURA DEL XML OBTENIDO DEBE TENER ESTE ORDEN // 0 <Cell><Data>categoría</Data></Cell> prstshp_category_lang.name // 1 <Cell><Data>subcategoria</Data></Cell> prstshp_category_lang.name // 2 <Cell><Data>subfamilia</Data></Cell> prstshp_category_lang.name // 3 <Cell><Data>MARCAS</Data></Cell> prstshp_manufacturer.name // 4 <Cell><Data>fotos</Data></Cell> // 5 <Cell ss:StyleID="s27"><Data>nombre</Data></Cell> // 6 <Cell ss:StyleID="s27"><Data>REF</Data></Cell> prstshp_product.reference // 7 <Cell ss:StyleID="s27"><Data>pvp web</Data></Cell> // 8 <Cell><Data>keywords</Data></Cell> // 9 <Cell ss:StyleID="s28"><Data>descripciones</Data></Cell> $xml->lista[$i][1] = strtolower($xml->lista[$i][1]); $categoria = $xml->lista[$i][0]; $subcategoria = $xml->lista[$i][1]; $subfamilia = $xml->lista[$i][2]; $marcas = $xml->lista[$i][3]; $fotos = $xml->lista[$i][4]; $nombre = $xml->lista[$i][5]; $referencia = $xml->lista[$i][6]; $pvp_web = $xml->lista[$i][7]; $keywords = $xml->lista[$i][8]; $descripcion = $xml->lista[$i][9]; //COMPROBAMOS QUE EL ARTICULO TIENE REFERENCIA, SI NO TIENE REFERENCIA NO LO METEMOS if(!intval($referencia)){ echo "El producto ".$nombre." NO TIENE REFERENCIA.<br />"; } else{ //Obtener categoría $result = mysql_query("SELECT id_category FROM prstshp_category_lang WHERE name LIKE '".$categoria."'"); if(mysql_num_rows($result) > 0){ $fila = mysql_fetch_assoc($result); $categoria_id = $fila["id_category"]; } //Obtener subcategoria $result = mysql_query("SELECT id_category FROM prstshp_category_lang WHERE name LIKE '".$subcategoria."'"); if(mysql_num_rows($result) > 0){ $fila = mysql_fetch_assoc($result); $subcategoria_id = $fila["id_category"]; } //Obtener subfamilia $result = mysql_query("SELECT id_category FROM prstshp_category_lang WHERE name LIKE '".$subfamilia."'"); if(mysql_num_rows($result) > 0){ $fila = mysql_fetch_assoc($result); $subfamilia_id = $fila["id_category"]; } //Obtener marca $result = mysql_query("SELECT id_manufacturer FROM prstshp_manufacturer WHERE name LIKE '".$marca."'"); if(mysql_num_rows($result) > 0){ $fila = mysql_fetch_assoc($result); $marca_id = $fila["id_category"]; } echo("Cat: $categoria_id - $categoria<br /> Subcat: $subcategoria_id - $subcategoria<br /> Subfam: $subfamilia_id - $subfamilia<br /> Marca: $marca_id - $marca<br /> Fotos: $fotos<br /> Nombre: $nombre<br /> REf: $referencia<br /> PVP: $pvp_web<br /> Keywors: $keywords<br /> $descripcion<br /><br />"); /*** AHORA COMPROBACIONES ***/ //Comprobar duplicados y solo meter los cambios diferentes //comprobar si existe referencia del producto en la Base de Datos $result = mysql_query("SELECT id_product, reference FROM prstshp_product WHERE reference LIKE '".$referencia."'"); if(mysql_num_rows($result) > 0){ //MODIFICAR PRODUCTO EXISTENTE $fila = mysql_fetch_assoc($result); $id_producto = $fila["id_product"]; //mysql_free_result($result); //actualizar nombre, pvp, keyworss y descripction $sql = "UPDATE prstshp_product SET price=".$pvp_web." WHERE reference = ".$referencia."; "; $sql .= "UPDATE prstshp_product_lang SET name='".$nombre."', description = '".$descripcion."', meta_keywords = '".$keywords."' WHERE id_product = ".$id_producto; echo "EXISTE<br />"; //AQUI HABRÁ QUE actualizar categorias //AQUI HABRÁ QUE actualizar marcas //AQUI HABRÁ QUE actualizar fotos } else{ // INSERTAR NUEVO PRODUCTO echo "NUEVO<br />"; //AQUÍ CONSULTA SQL = "INSERT INTO prstshp_product ... " } // if(@mysql_query($sql)){ //SI TUVO EXITO LA INSERCIÓN... $salida .= "EXITO"; } else{ //SI FALLÓ... $salida .= "HUBO UN PROBLEMA EN..."; } } } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="shortcut icon" href="img/favicon.ico" /> <style> body{ font-family:Verdana, Geneva, sans-serif; font-size:11px } table{ font-size:11px } </style> <script type="text/javascript"> <!-- function Blancos(Cadena){ if (Cadena.split(" ").join("").length == 0) return true; else return false; } function validarImp(formulario){ if (Blancos(formulario.file.value)) { window.alert("Ha de indicar el fichero XML"); formulario.file.focus(); formulario.file.select(); return false; } //formulario.submit(); return true; } --> </script> </head> <body bgcolor="#EFEFEF" style="padding:2px"> <table width="100%" border="0" cellpadding="10" cellspacing="0" background="../img/rayas_a.gif" bgcolor="#FFFFFF" style="border:1px solid #6BB8DF"> <tr> <td><form method="post" enctype="multipart/form-data" onsubmit="return validarImp(this);" style="display:inline;"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <table width="100%" border="0" cellpadding="4" cellspacing="4"> <tr valign="top"> <td width="159">Archivo XML</td> <td colspan="2"><input type="file" name="file" class="form_element" /></td> </tr> <tr align="right"> <td align="left">Quitar filas de encabezado:</td> <td width="522" align="left"><input name="encabezado" type="text" id="encabezado" value="0" size="2" /> <span style="color:#999"> si el archivo tiene alguna fila de cabecera que no es de datos, no incluirla</span></td> <td width="180" align="right"><?php echo $botones ?> <input type="submit" value=" Importar Datos " /> </td> </tr> </table> </form> </td> </tr> </table> <div> <?php if(!$salida){ ?> <span style="color:#6BB8DF"> <strong>ATENCIÓN</strong>: El código XML ha de tener la siguiente estructura:<br /> ...<br /> <Cell><Data>categoría</Data></Cell><br /> <Cell><Data>subcategoria</Data></Cell><br /> <Cell><Data>subfamilia</Data></Cell><br /> <Cell><Data>MARCAS</Data></Cell><br /> <Cell><Data>fotos</Data></Cell><br /> <Cell><Data>nombre</Data></Cell><br /> <Cell><Data>REF</Data></Cell><br /> <Cell><Data>pvp web</Data></Cell><br /> <Cell><Data>keywords</Data></Cell><br /> <Cell><Data>descripciones</Data></Cell><br /> ...<br /> </span> <?php } ?> <?php echo $salida; ?> </div> </body> </html> Edited July 10, 2012 by larose (see edit history) 1 Link to comment Share on other sites More sharing options...
Fenix_ReNaCeR Posted July 11, 2012 Share Posted July 11, 2012 (edited) Una pequeña aportación. En este enlace tienes un editor online simple que luego te muestra lo escrito en formato HTML. http://www.desarroll...los/tinymce.php No es la forma mas idónea pero puede ayudar. Añado otros que encontré después. http://www.saltarint...tml-etiquetado/ http://ckeditor.com/demo http://www.quackit.com/html/online-html-editor/ Si buscas editor wysiwyg online seguro que encuentras muchos mas. Saludos. Edited July 11, 2012 by Fenix_ReNaCeR (see edit history) 2 Link to comment Share on other sites More sharing options...
lixotuka Posted June 20, 2013 Share Posted June 20, 2013 Una pequeña aportación. En este enlace tienes un editor online simple que luego te muestra lo escrito en formato HTML. http://www.desarroll...los/tinymce.php No es la forma mas idónea pero puede ayudar. Añado otros que encontré después. http://www.saltarint...tml-etiquetado/ http://ckeditor.com/demo http://www.quackit.com/html/online-html-editor/ Si buscas editor wysiwyg online seguro que encuentras muchos mas. Saludos. Gracias Link to comment Share on other sites More sharing options...
Recommended Posts