Tabla de contenido
Este post lo voy a colgar por que me ha sido útil a la hora de añadir funcionalidades a una tienda montada con Prestashop. Se trata de un módulo del que la gente de GenWeb han programado una primera version para Prestashop: WordPress2Prestashop. Esta gente da la opción de descargarlo desde su web y utilizarlo de manera gratuita todos aquellos que queráis implementar una sección de últimas noticias o post recientes en vuestra tienda Prestashop.
Yo he modificado un poco este módulo que fue implementado para mostrar en la home page de Prestashop las últimas noticias (y sus correspondientes thumbnails) de un blog montado sobre WordPress que a su vez esté instalado en una subcarpeta del mismo dominio, por ejemplo www.urldeprestashop.com/blog aunque siguiendo los pasos descritos en este post a mi me ha funcionado utilizanto una ruta de WordPress desde fuera del dominio que estaba utilziando.
Básicamente WordPress2Prestashop lee un feed RSS y lo muestra en la parte central de la portada de la tienda. La gente de GenWeb tiene programado también un módulo que permite mostrar las últimas entradas de un blog. Podremos situarlo en la barra lateral izquierda de Prestashop, pero no es lo que yo necesitaba.
Además de mostrar las últimas noticias desde un RSS externo dentro de Prestashop, en esta primera versión se pueden configurar cuántas noticias queremos que se vean, la longitud de la descripción de las mismas y añadir un título para el widget.
Los CSS para darle un poco de estilo al módulo viene escrito dentro del propio módulo por lo que a no ser que tengas conocimientos de hojas de estilos, mejor no tocar nada. Decir que esto de escribir las hojas de estilo in-line no es buena idea a la hora de puntuar el SEO. En futuras revisiones que le haga a este módulo intentaré importar desde su correspondiente hoja de estilo.
El módulo está pensado para WordPress, pero es compatible con otros muchos feeds que muestran las imágenes de sus artículos de la misma forma que WordPress lo hace. Es cuestión de informarse un poco sobre ello.
INSTALACIÓN DEL MÓDULO PARA PRESTASHOP
PASO 1 – Para incorporar las imágenes destacadas (featured) de nuestros posts al feed de WordPress. Por consiguiente que estas se muestren en Prestashop con nuestro módulo. Previamente instalaremos un plugin en WordPress que añada imágenes a nuestro feed. A mi me ha funcionado bien “WP RSS images”, que a mi me ha funcionado perfectamente en los tests con WP 4.5.2. Si alguien encuentra un módulo que haga lo mismo en Wordpress, puede hacer la prueba. Si la manera de insertar la miniatura es igual, podría funcionar.
El módulo se puede descargar desde aquí e instalarlo en WordPress. Quiero recordar que este módulo añade a nuestro feed las imágenes destacadas (featured) de cada post. Por esto, para que todo funcione, es indispensable que todos los posts que publiquemos tengan una “featured image”. Parece una perogrullada, pero sé por que lo dejo escrito …
Si todo ha ido bien, y visitamos el feed de nuestro WordPress en www.urldeprestashop.com/blog/feed/. Veremos que el feed tiene la estructura que podéis ver en la siguiente imagen. En la captura que muestro, se puede ver que la URL no se corresponde con la que pongo de ejemplo. Pero como he dicho anteriormente, esto funcionará perfectamente desde direcciones externas a nuestro dominio.
PASO 2 – Una vez tenemos el feed de WordPress preparado y compatible con nuestro módulo, debemos descargar el módulo WordPress2Prestashop. Después tendremos que instalarlo desde el backend de Prestashop como un módulo cualquiera. Una vez está instalado sólo hay que realizar una pequeña configuración inicial para que empiece a funcionar. Para ello hacemos click en «Configurar».
PASO 3 – Tras pulsar el enlace de configuración del módulo, veremos un sencillo formulario de configuración.
El parámetro más importante a configurar es la dirección URL del feed de WordPress que queremos mostrar. Esta puede ser del tipo www.miblog.com/feed/ o www.mitienda.com/blog/feed/ o cualquier otra ruta válida de un feed WordPress. Si tu Wordpress no tiene Feed, consulta el siguiente enlace.
El resto de parámetros de configuración que se muestran son el título del widget (cabecera que aparecerá sobre nuestras noticias), el máximo de palabras a mostrar (nos permite acortar la descripción de las noticias si estas son demasiado largas para nuestra portada) y el máximo de noticias a mostrar (nos permite mostrar las X últimas noticias). Si no queremos acortar la descripción del feed o limitar el máximo de items, podemos dejar los dos últimos campos en blanco.
RESULTADO – Si hemos realizado todos los pasos anteriores correctamente y todo ha ido bien, al visitar la portada de nuestra tienda deberíamos ver en la parte central. Tirando hacia abajo, nuestra nueva sección de noticias. Tal y como se muestra en la siguiente captura.
Este módulo consta de muy pocos archivos para funcionar. Dos de ellos serán imágenes (un icono y una imagen a mostrar cuando no se pueda obtener la miniatura de la entrada). Un archivo más será php y el otro XML.
Wordpress2Prestashop.php
class wordpress2prestashop extends Module { function __construct() { $this->name = "wordpress2prestashop"; $this->tab = 'entreunosyceros.net'; $this->version = '0.1.1'; parent::__construct(); $this->displayName = $this->l('Wordpress2Prestashop'); $this->description = $this->l('Muestra las últimas entradas de Wordpress en Prestashop. Lee un feed wordpress con thumbnails (previa instalación de “WP RSS images”, que ya está descatalogado) y lo muestra en Prestashop. Plugin sin soporte ni desarrollo, cada cual es libre de continuar con el.'); } function install() { if (!parent::install() OR !$this->registerHook('home') OR !$this->registerHook('leftColumn')) return false; return true; } /*public function hookLeftColumn($params) { echo "SapoHolas"; }*/ /* public function hookDisplayLeftColumn($params) { $this->context->smarty->assign( array( 'my_module_name' => Configuration::get('MYMODULE_NAME'), 'my_module_link' => $this->context->link->getModuleLink('mymodule', 'display') ) ); */ public function hookDisplayHome($params) { $feeddestino=Configuration::get('prestapress'); $content = file_get_contents($feeddestino); $x = new SimpleXmlElement($content); $posts="<div style='clear:both;height:15px;'></div><div id='featured-products_block_center' class='block products_block clearfix'><h2 class='title_block' style='background-color: #009900;font: 600 16px/22px Open Sans,sans-serif;color: #000;background-color: #009900;border-radius: 10px;border-top: 5px solid #eee;text-transform: uppercase;padding: 14px 5px 17px 20px;margin-bottom: 20px;border: 1px solid #000;text-align:center; '>".Configuration::get('prestapresstitulo')."</h2>"; //$posts.="<p class='title_block' style='margin-top:5px;'>"; $cuenta=0; foreach($x->channel->item as $entry) { $cuenta++; $urlimage = $entry->enclosure->attributes()->url; if($urlimage=="") $urlimage="/modules/wordpress2prestashop/no-disponible.png"; $numwords = Configuration::get('maximopalabras'); preg_match("/(\S+\s*){0,$numwords}/", $entry->description, $regs); $descripcion = trim($regs[0]); $posts.= "<div class='block_content' style='padding:5px;width:100%;margin-bottom:0px;'> <div style='float:left;display:inline;padding-right: 2%;'> <a href='$entry->link' title='$entry->title'> <img class='tilt2' width='120px' height='120px' src='".$urlimage . "' alt='".$entry->title ."'> </a> </div> <div class='s_title_block' style='display:inline;padding-bottom:10px;font-size:140%;word-wrap:break-word;width:95%;'><a href='$entry->link' title='Leer toda la entrada: $entry->title'>" . $entry->title . "</a> </div> <div class='product_desc' style='padding:5px 20px 30px;text-align:justify;font-size:90%;padding-bottom:30px;word-wrap:break-word;'>" . $descripcion . "...<a href='$entry->link' title='Leer toda la entrada: $entry->title'> || Leer más.</a> </div> <div style='clear:both;'></div> </div> <div style='clear:both;'> </div> <hr style='color: silver !important;width: 90%;max-width: 100%;margin-left: 1%;margin-top: 0px;margin-bottom: 20px;' />"; if ($cuenta>=(Configuration::get('numeronoticias'))) break; } $posts.="</div>"; return "$posts"; //return $this->display(__FILE__, 'mymodule.tpl'); } /* public function hookDisplayRightColumn($params) { return $this->hookDisplayLeftColumn($params); } public function hookDisplayHome($params) { return $this->hookDisplayLeftColumn($params); } */ public function parseRSS($xml) { $devuelve="<strong>".$xml->channel->title."</strong>"; $cnt = count($xml->channel->item); for($i=0; $i<$cnt; $i++) { $url = $xml->channel->item[$i]->link; $title = $xml->channel->item[$i]->title; $desc = $xml->channel->item[$i]->description; $devuelve.= '<a href="'.$url.'">'.$title.'</a>'.$desc.''; } return $devuelve; } /* public function hookRightColumn($params) { return $this->hookLeftColumn($params); } public function hookHome($params){ return $this->hookLeftColumn($params); } */ function uninstal() { if (!parent::uninstall()) return false; return true; } public function getContent() { $output = null; if (Tools::isSubmit('submit'.$this->name)) { $my_module_name = strval(Tools::getValue('prestapress')); // $my_module_title = strval(Tools::getValue('prestapresstitulo')); $numeronoticias = strval(Tools::getValue('numeronoticias')); $maximopalabras = strval(Tools::getValue('maximopalabras')); // if (!$my_module_name || empty($my_module_name) || !Validate::isAbsoluteUrl($my_module_name)) $output .= $this->displayError( $this->l('Feed no válido') ); else { Configuration::updateValue('prestapress', $my_module_name); Configuration::updateValue('prestapresstitulo', $my_module_title); Configuration::updateValue('numeronoticias', $numeronoticias); Configuration::updateValue('maximopalabras', $maximopalabras); $output .= $this->displayConfirmation($this->l('Opciones Actualizadas')); } } return $output.$this->displayForm(); } public function displayForm() { // Get default Language $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); // Init Fields form array $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Wordpress2Prestashop'), ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('URL DEL FEED WORDPRESS'), 'name' => 'prestapress', 'size' => 60, 'required' => true ) , array( 'type' => 'text', 'label' => $this->l('TITULO DEL WIDGET'), 'name' => 'prestapresstitulo', 'size' => 80, 'required' => true ) , array( 'type' => 'text', 'label' => $this->l('MAXIMO PALABRAS DESCRIPCION'), 'name' => 'maximopalabras', 'size' => 4, 'required' => false ) , array( 'type' => 'text', 'label' => $this->l('MAXIMO POSTS A MOSTRAR'), 'name' => 'numeronoticias', 'size' => 4, 'required' => false ) ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'button' ) ); $helper = new HelperForm(); // Module, t oken and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; // Language $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; // false -> remove toolbar $helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen. $helper->submit_action = 'submit'.$this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. '&token='.Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ) ); // Load current value $helper->fields_value['prestapress'] = Configuration::get('prestapress'); $helper->fields_value['prestapresstitulo'] = Configuration::get('prestapresstitulo'); $helper->fields_value['numeronoticias'] = Configuration::get('numeronoticias'); $helper->fields_value['maximopalabras'] = Configuration::get('maximopalabras'); return $helper->generateForm($fields_form); } }
config_es.xml
<!--?xml version="1.0" encoding="UTF-8" ?--> <!--?xml version="1.0" encoding="UTF-8" ?--> wordpress2prestashop <![CDATA[Wordpress2Prestashop]]> <![CDATA[0.1.0]]> <![CDATA[Integra las entradas de Wordpress dentro de Prestashop. Lee un feed wordpress con thumbnails (previa instalación en wordpress) y lo muestra en Prestashop. Sin soporte ni desarrollo. Dudas preguntarlas por la red]]> <![CDATA[entreunosyceros.net]]> 1 1
Estos son los dos archivos del módulo que podéis descargar desde el enlace que he puesto más arriba. Como se puede ver queda mucho que mejorar a este lector de RSS. Es solo cuestión de escribir un poco más de código. Salu2.
12 Comentarios
Hola
muchas gracias por el moludo es justo lo que estaba buscando
lo he instalado y carga las entradas de wordpress,pero el texto no lo carga bien sale descuadrado y la imagen carga la de la noticia y también sale la cámara
he estado mirando pero no consigo solucionarlo
me podéis ayudar?
un saludo
Hola. En primer lugar, gracias por la vistia y el comentario. Te diré que lo del texto, puedes arreglarlo con CSS3. En cuanto a lo de la cámara, supongo que aparecerá por que esas noticias no tienen una imagen asignada. Dicho todo esto de memoria, por que el artículo sobre este plugin ya tiene unos cuantos años. Cuando tenga un rato le echo un vistazo y te digo más. Salu2.
Muy buenas. ¿De momento no funciona con la importación multiidioma no?
Pues la verdad es que no lo he probado con la importación multi-idoma. Pruébalo y comenta el resultado. Salu2.
Gracias de nuevo por tu tiempo. Lo dejaré tal cual, no entiendo mucho de estos temas y creo que está más que correcto. Me has sido de gran ayuda.
Saludos.
Muy bien. Me alegro haberte sido de ayuda. Salu2.
Hola!
Gracias por compartir el artículo, me ha venido muy bien, pero hay algo que no comprendo. Veo en la fotografía del ejemplo, que al final de cada entrada pone «Leer más». A mí no me sale eso y me gustaría cambiarlo pero no se donde hacerlo. En mi caso lo que sale es: «La entrada (xxx) aparece primero en (nombre del blog) ¿Me podrías iluminar?
Muchas gracias por tu tiempo.
Un saludo.
Hola. En primer lugar, gracias por la visita. Me alegro de que te haya sido útil el post. En cuanto a lo que me comentas, si no quieres que te aparezca el texto «La entrada (XXX) …» creo que lo solucionarías dándole un máximo de palabras en la descripción (en la configuración del módulo que instalas en prestashop), por que si entras en la url del feed, verás que este texto que quieres eliminar aparece al final. Este texto creo que tendrías que eliminarlo del plugin que instalas en wordpress. Sobre el texto «Leer más» lo encontrarás en el archivo .php del plugin de prestashop, dentro de la función hookDisplayHome. Ahí es donde podrás modificarlo a tu gusto.
Salu2 y espero haberte ayudado, si necesitas ayuda en algo más no dudes en dejar un comentario.
Muchísimas gracias!!! He podido cambiarlo, ahora queda bastante aceptable, aunque lástima que corta las frases a medias, pero vaya….. no veo que quede muy mal. He comprobado que si en el módulo no pongo ningún máximo de palabras salía esa frase que te he comentado en el anterior mensaje: «la entrada (xxx)….», y si pongo 60 aparece otro mensaje: «la entrada». Si pongo 55 carácteres, corta las frases donde sea y es ahí donde he añadido (para que no se vea tan mal) » SEGUIR LEYENDO».
No se me ocurre donde poder eliminar esas frases, no las he localizado en el archivo .php. Pero vaya, estoy bastante satisfecha con el resultado.
Muchsísimas gracias por tu tiempo.
No se merecen!! Me alegra que hayas podido cambiarlo (aun que no sea exactamente como tú lo querías).
El módulo está hecho para mostrar siempre un número determinado de palabras de cada una de las entradas que le aporta el feed de wordpress. Supongo que tú buscas algo que llegado al segundo punto y aparte coloque un «Leer más» o algo así. Solo tendrías que establecer un patrón de búsqueda con un contador en la función hookDisplayHome para que dejase de mostrarse el texto a partir de encontrarse por segunda vez el patrón que buscas (que vendría siendo el segundo punto encontrado, por ejemplo).
En cuanto al «mensaje» que te aparece es debido al feed de wordpress, me imagino que tendrías que modificar los archivos del feed … (los puedes encontrar en la carpeta wp-include de tu wordpress). Este mensaje, te digo que es como el enlace de «leer más» que he puesto en el módulo prestashop. Para que no se muestre el mensaje yo establezco 54 palabras como máximo. Lo puedes comprobar en .
Salu2 y espero haberte ayudado, para cualquier cosa no dudes en dejar un comentario.
Buenísimo, aun que el css mejor en un archivo aparte (como por ejemplo en el style.css)
Totalmente de acuerdo. Gracias por la visita ;)