Jump to content

¿Se puede operar con variables dentro de un módulo?


Serex

Recommended Posts

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!!!!!

post-546724-0-63412100-1369133360_thumb.png

Link to comment
Share on other sites

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

El formulario lo envias a un controlador que tu mismo te hayas creado, o lo envias directamente a un fichero basico php

Entonces 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

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

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

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!

post-546724-0-48056200-1369146047_thumb.png

Link to comment
Share on other sites

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

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

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

...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

  • 3 weeks later...

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...