Serex Posted May 21, 2013 Share Posted May 21, 2013 Hola! Estoy intentando crear mi primer módulo, pero ando atascado en un tema que no acabo de ver claro como solucionar (y diría que se puede). Antes de nada, ya he mirado la documentación de prestashop 1.5 en inglés sobre la creación de módulos... pero sigo igual. El tema es cómo poder trabajar con variables dentro de un módulo. Me serviría, por ejemplo (luego ya lo complicaría), poder capturar dos números y sumarlos, mostrando en el módulo el resultado de la suma. He hecho un PHP, a modo de ejemplo y para poder trasladarlo luego al TPL. El PHP sería: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Documento sin título</title> </head> <body> <form name="mat" method="post" action="<?php $_SERVER['PHP_SELF'];?>"> <label>Num1:<input type="number" name="a" /></label><br /> <label>Num2:<input type="number" name="b" /></label><br /> <input type="submit" name="ej" value="Ejecutar" /> </form> <?php // comprobamos si se han enviado los datos if(isset($_POST['ej']) && $_POST['ej'] == 'Ejecutar') { // comprobamos si no hay campos vacíos if(!empty($_POST['a']) && !empty($_POST['b'])) { // ahora, verificamos si son solo digitos if(is_numeric($_POST['a']) && is_numeric($_POST['b'])) { // creamos y damos valor a las variables // con que vamos a trabajar $a = $_POST['a']; $b = $_POST['b']; // aqui la función que retornara el área a cubrir function operar($a, $ { $result = $a + $b; return $result; } // imprimimos el resultado de la operación echo "<br>El resultado es: ". operar($a, $ .""; } else { // ERROR en caso de datos no válidos echo "Todos los valores deben ser numeros. Recuerde separar decimales con un punto, y no con una coma"; } } else { // ERROR en caso de campos vacíos echo "No puede enviar campos vacios"; } } ?> </body> </html> Con ello, el contenido del fichero TPL sería: <!-- Block Nuevo_Modulo --> <div id="module_testing_block_left" class="block"> <h4>Calcula tus metros</h4> <div class="block_content"> <form name="mat" method="post" action="<?php $_SERVER['PHP_SELF'];?>"> <label>Num1:<input type="number" name="a" /></label><br /> <label>Num2:<input type="number" name="b" /></label><br /> <input type="submit" name="ej" value="Ejecutar" /> </form> <?php // comprobamos si se han enviado los datos if(isset($_POST['ej']) && $_POST['ej'] == 'Ejecutar') { // comprobamos si no hay campos vacíos if(!empty($_POST['a']) && !empty($_POST['b'])) { // ahora, verificamos si son solo digitos if(is_numeric($_POST['a']) && is_numeric($_POST['b'])) { // creamos y damos valor a las variables // con que vamos a trabajar $a = $_POST['a']; $b = $_POST['b']; // aqui la función que retornara el área a cubrir function operar($a, $ { $result = $a + $b; return $result; } // imprimimos el resultado de la operación echo "<br>El resultado es: ". operar($a, $ .""; } else { // ERROR en caso de datos no válidos echo "Todos los valores deben ser numeros. Recuerde separar decimales con un punto, y no con una coma"; } } else { // ERROR en caso de campos vacíos echo "No puede enviar campos vacios"; } } ?> </div> </div> <!-- /Block Nuevo_Modulo --> Pero de esa forma me da un error como el que adjunto. Creo que el problema viene o al enviar o al tratar las variables del código PHP. ¿Puede ser? ¿Alguna sugerencia sobre el código a cambiar para que funcione y muestre la suma de los dos números al pulsar el botón? Gracias anticipadas!!!!! Link to comment Share on other sites More sharing options...
banense Posted May 21, 2013 Share Posted May 21, 2013 Podríamos revisar el código pero te aconsejo que te leas esto que te servirá para las cosas que quieres hacer en prestashop.. Son los estándares de desarrollo de prestashop.. http://doc.prestashop.com/pages/viewpage.action?pageId=5374140#Estándaresdedesarrollo-Variablenames Saludos Link to comment Share on other sites More sharing options...
banense Posted May 21, 2013 Share Posted May 21, 2013 A ver, es que me estoy liando.. Estás creando un nuevo módulo vale. Estoy mirando en tu código a ver si encuentro la clase y tal para ver su funcionamiento pero si mi vista no me falla.. veo dos fragmentos de código idénticos..Respecto a las variables. Estás con php no hay restricciones de uso de variables.. simplemente hay que ver como asignas las variables y como haces todas las cosas.. Pon la clase del módulo pa mirarla.. Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted May 21, 2013 Share Posted May 21, 2013 El formulario lo envias a un controlador que tu mismo te hayas creado, o lo envias directamente a un fichero basico phpEntonces cuando envias ese form al controlador, en el controlador puedes recoger el valor y asignar un nuevo valor, para imprimir en el fichero *.tpl Link to comment Share on other sites More sharing options...
jesa Posted May 21, 2013 Share Posted May 21, 2013 Pues esperemos que aclare algo sobre el código publicado... Si el código que ha puesto es un ejemplo en php que se ha hecho para ver que funciona perfecto, aunque poco se le podrá ayudar. Y si eso es lo que llama módulo...mucho me temo que no ha sacado nada claro del manual de prestashop. Link to comment Share on other sites More sharing options...
Serex Posted May 21, 2013 Author Share Posted May 21, 2013 Uf, se me acumulan las respuestas... jajaja. A ver, por partes: Sí, hay dos códigos prácticamente iguales. El primero es el contenido de un fichero PHP (fuera de prestashop) que solicita dos números y, después de pinchar el botón, los suma. El segundo es el contenido del fichero TPL del módulo de prestashop. Por si hay duda, adjunto: - El PHP "suelto" que hace la suma de los dos números (repito, que es un fichero que no tiene nada que ver con prestashop... que simplemente hace la suma si se abre con el navegador). - La carpeta entera del módulo (así no hay duda del contenido del mismo, porque seguro que me he dejado algo...) PD: Obviamente lo que luego precisaré hacer es más complejo que una suma, pero vamos (Rubalcaba) que si quieres hacerme un 2+2=4 (... xD), a mí me soluciona el tema porque a partir de ahí lo "adapto" haciendo las operaciones necesarias... CalculadoraSuma.php moduletesting.zip Link to comment Share on other sites More sharing options...
Serex Posted May 21, 2013 Author Share Posted May 21, 2013 Por cierto, adjunto también captura del aspecto del módulo ahora mismo. Hasta que se le da a "ejecutar" se muestra bien, el problema viene al realizar la ejecución del código... La idea es que, si se introduce "1" y "3" y se pulsa "Ejecutar", debajo del botón apareciera algo como "El resultado de la suma es: 4" PD: Banense, me miro tu enlace también... Gracias! Link to comment Share on other sites More sharing options...
jesa Posted May 21, 2013 Share Posted May 21, 2013 Desconozco el motivo por el cual usas el php dentro del tpl...no es una práctica muy recomendable, pero bueno supongo que para lo que quieres será necesario. Para sumar dos números, lo puedes hacer con jquery y no tener que hacer submit del formulario. En todo caso te podrías crear un método donde retorne y haces ahí las operaciones. Link to comment Share on other sites More sharing options...
Serex Posted May 21, 2013 Author Share Posted May 21, 2013 Desconozco el motivo por el cual usas el php dentro del tpl...no es una práctica muy recomendable, pero bueno supongo que para lo que quieres será necesario. Para sumar dos números, lo puedes hacer con jquery y no tener que hacer submit del formulario. En todo caso te podrías crear un método donde retorne y haces ahí las operaciones. Jesa, el motivo de PHP en lugar de jQuery es por el básico conocimiento de PHP y el nulo de jQuery... xD Por el momento la única forma que he encontrado de "apañar" el tema es con IFRAME, pero no se hasta que punto será bueno en todos los navegadores (y en dispositivos móviles), así que sigo buscando alguna solución "eficaz", que seguro que la hay... Link to comment Share on other sites More sharing options...
jesa Posted May 21, 2013 Share Posted May 21, 2013 No se, aunque sea en javascript, sabes manejar los eventos? La verdad que claro, partimos de que estamos intentando sumar 2 + 2 y me parece algo mucho más sencillo hacerlo con jQuery o Javascript que hacerlo todo en php. Pero claro, se supone que el trabajo que quieres realizar es mucho más complejo que una simple suma. Mira ejemplos de jQuery que serguro que lo sacas enseguida y te servirá para resolver algún problema que te surja en la tienda que lo usa. Link to comment Share on other sites More sharing options...
Serex Posted May 21, 2013 Author Share Posted May 21, 2013 ...de que estamos intentando sumar 2 + 2 y me parece algo mucho más sencillo hacerlo con jQuery o Javascript que hacerlo todo en php. Pero claro, se supone que el trabajo que quieres realizar es mucho más complejo que una simple suma... Bueno, realmente poquito más... El objetivo es ofrecer tres números (por ejemplo 'a', 'b' y 'c') y multiplicar 'a' y 'b', dando el resultado, y dividir el mismo por 'c'. Algo así como: El resultado de a*b es x. La división de x/c es y. Link to comment Share on other sites More sharing options...
nadie Posted June 8, 2013 Share Posted June 8, 2013 Yo te dejo un ejemplo muy basico, un formulario y el resultado. Te dejo un ejemplo muy basico. El modulo se llama: bloquenumeros Los ficheros del modulo son: bloquenumeros.php Contenido: <?php if (!defined('_PS_VERSION_')) exit; class BloqueNumeros extends Module { public function __construct() { $this->name = 'bloquenumeros'; $this->tab = 'advertising_marketing'; $this->version = '0.1'; $this->author = 'Vicente del Bosque (Entrenador Spain)'; parent::__construct(); $this->displayName = $this->l('Bloque Numeros'); $this->description = $this->l('Bloque para sumar dos numeros'); } public function install() { return (parent::install() && $this->registerHook('leftColumn')); } public function uninstall() { return (parent::uninstall()); } public function hookLeftColumn($params) { $numer1 = Tools::getValue('numero1'); $numer2 = Tools::getValue('numero2'); $suma = $numer1 + $numer2; $this->smarty->assign(array( 'numer1' => $numer1, 'numer2' => $numer2, 'suma' => $suma, )); return $this->display(__FILE__, 'bloquenumeros.tpl'); } } Y el contenido del fichero: bloquenumeros.tpl es este: <div class="block"> <form action="#" method="post"> {l s='Numero 1' mod='bloquenumeros'} <input type="text" name="numero1" /> <br/> {l s='Numero 2' mod='bloquenumeros'} <input type="text" name="numero2" /> <br/> <input type="submit" value="{l s='Sumar ' mod='bloquenumeros'}" name="sumar_numeros_res" /> </form> {if !empty($suma) } {l s='El resultado de suma: ' mod='bloquenumeros'} {$numer1} + {$numer2} {l s='es: ' mod='bloquenumeros'} {$suma} {/if} </div> (Atención, esto es solo una pequeña chapuza en modo demostracion) Link to comment Share on other sites More sharing options...
nadie Posted June 8, 2013 Share Posted June 8, 2013 (El ejemplo que te he dejado es muy básico, no me hago responsable de cualquier desastre ocasionado) Link to comment Share on other sites More sharing options...
Recommended Posts