Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: 01munrra en 27 Febrero 2013, 20:09 pm



Título: Problema con Codeigniter...
Publicado por: 01munrra en 27 Febrero 2013, 20:09 pm
Saludos!!!.... les comento...

tengo este controlador
controlador.php
Código
  1. class Controlador extends CI_Controller
  2. {
  3.  
  4. public function index()
  5. {
  6.  $data = array();
  7.  $data['variable'] = "Hola Mundo Como estas???";
  8.  $this->load->view('vista',$data);
  9. }
  10.  
  11. public function imprimir()
  12. {
  13.  $html = $this->load->view('vista','',true);
  14.  echo $html;
  15. }
  16. }
  17.  

y tengo la vista

vista.php
Código
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title> Prueba PDF</title>
  6.  
  7. </head>
  8. <body>
  9.  
  10. <h1><?php echo $variable; ?></h1>
  11.  
  12. <a href="<?php echo site_url("controlador/imprimir") ?>">Imprimir</a>
  13.  
  14. </body>
  15. </html>
  16.  

y pues al correr el eejercicio me muestra esto en el explorador:
Código
  1. Hola Mundo Como estas???
  2.  
  3. Imprimir
  4.  

imprimir claro esta en una etiqueta <a> que me permite imprimir la informacion que se esta mostrando...
y pues aqui viene la cuestion cuando yo presiono a la opcion de Imprimir me muestra esto:
Código
  1. A PHP Error was encountered
  2.  
  3. Severity: Notice
  4.  
  5. Message: Undefined variable: variable
  6.  
  7. Filename: views/vista.php
  8.  
  9. Line Number: 10
  10.  
  11.  
  12. Imprimir
  13.  

si ven la funcion imprimir que esta en el controlador, la funcion imprimir lo que estoy tratando de hacer es capturar la información que se mostro al correr el ejercicio..... y pues seegun el manual de CI tengo que usar esta funcion $html = $this->load->view('vista','',true); y le hago un echo a la variable $html pare que me muestre lo que esta caprurando.... y pues como que no esta funcionando puesto el error que me muestra....

les agradezco cualquier tipo de informacion... Gracias!!!


Título: Re: Problema con Codeigniter...
Publicado por: #!drvy en 27 Febrero 2013, 20:15 pm
Y donde declaras la variable "variable" ? Yo no la veo en ningún sitio  :silbar: El unico momento en el que la usas es para imprimirla justo donde te da el error.


Saludos


Título: Re: Problema con Codeigniter...
Publicado por: 01munrra en 27 Febrero 2013, 20:21 pm
ohhh... sorry lo escribi mal....

Código
  1. class Controlador extends CI_Controller
  2. {
  3.  
  4. public function index()
  5. {
  6. $data = array();
  7. $data['variable'] = "Hola Mundo Como estas???";
  8. $this->load->view('vista',$data);
  9. }
  10.  
  11. public function imprimir()
  12. {
  13. $html = $this->load->view('vista','',true);
  14. echo $html;
  15. }
  16. }
  17.  

lo copie mal.... esta si es....

saludos!!


Título: Re: Problema con Codeigniter...
Publicado por: #!drvy en 28 Febrero 2013, 03:59 am
Hola,

2 cosas:

1. Como llamas la función imprimir? Me refiero, el enlace que tienes puesto en la vista esta mal por eso pregunto xD

2.  
Citar
la funcion imprimir lo que estoy tratando de hacer es capturar la información que se mostro al correr el ejercicio.....

No... lo que estas haciendo en la función imprimir es volver a generar la vista solo que esta vez, en vez de mostrarla, la guardas en una variable. No capturas nada de lo que has mostrado anteriormente ni nada parecido.

Aparte de eso... Puedes hacerte un workaround declarando $data como variable de classe en vez de local de index().

Código
  1. <?php
  2. class Controlador extends CI_Controller {
  3.   private $data = NULL;
  4.  
  5.   public function index(){
  6.      $this->data = array();
  7.      $this->data['variable'] = "Hola Mundo Como estas???";
  8.      $this->load->view('vista',$this->$data);
  9.   }
  10.  
  11.   public function imprimir(){
  12.      $html = $this->load->view('vista',$this->data,true);
  13.      echo $html;
  14.   }
  15. }
  16. ?>

Saludos


Título: Re: Problema con Codeigniter...
Publicado por: 01munrra en 28 Febrero 2013, 17:09 pm
1. Como llamas la función imprimir? Me refiero, el enlace que tienes puesto en la vista esta mal por eso pregunto xD

la funcion la llamo de esta forma: <a href="<?php echo site_url("controlador/imprimir") ?>">Imprimir</a>, segun el manual CI....

y si es cierto, en la funcion Imprimir se esta generando de nuevo la vista y esta ves la estoy guardando en una variable...... mi idea de esto es aplicarle la libreria DOMPDF a la variable $html, para imprimir la informacion generada en la vista....

aplique lo que me indicas.... pero sigue generando el error.... no entiendo que esta pasando....



saludos!!!!


Título: Re: Problema con Codeigniter...
Publicado por: cassiani en 28 Febrero 2013, 18:18 pm
hola 01munrra, el error te lo da porque no le estas enviando la variable "variable" a la vista, cuando ejecutas el método imprimir, así que tienes dos soluciones:

1.- le envías la variable desde el método imprimir:
Código
  1. public function imprimir(){
  2.     $data['variable'] = 'algun dato';
  3.        $this->load->view('vista',$data);
  4. }

2.- verificas que la variable este definida en la vista, antes de imprimirla:
Código
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title> Prueba PDF</title>
  6. </head>
  7. <body>
  8. <h1><?php echo isset($variable) ? $variable : 'otra cosa'; ?></h1>
  9. <a href="<?php echo site_url("controlador/imprimir") ?>">Imprimir</a>
  10. </body>
  11. </html>

Además, no es necesario que uses site_url para crear el enlace, usa en su lugar la función anchor, ejemplo:
sustituyes esto:
Código:
<a href="<?php echo site_url("controlador/imprimir"); ?>">Imprimir</a>

por esto:
Código:
<?php echo anchor('controlador/imprimir','imprimir'); ?>



Título: Re: Problema con Codeigniter...
Publicado por: 01munrra en 28 Febrero 2013, 19:19 pm
el error consiste..... al parecer cuando voy a Imprimir, cuando CI hace esto $html = $this->load->view('vista',$this->data,true); parece que no encuentra la variable con informacion y arroja el error de desconocer la variable y por lo tanto no imprime nada..... muestra solo esto, y claro la idea es Imprimir el valor que trae la variable....

Código
  1. Imprimir
  2.  

tal como indicas cassiani


Saludos!!!


Título: Re: Problema con Codeigniter...
Publicado por: #!drvy en 28 Febrero 2013, 20:01 pm
Es que la variable $data, la defines en el index() no en imprimir(). Por eso te pregunte como llamabas la función imprimir xD. La función "index()" es solo para cuando llamas directamente el controlador sin especificar una función.

La solución esta en que definas la variable $data (hacerlo todo...) en __construct(). Así se "setea" nada mas se cargue el Class dando igual si directa o indirectamente.

Código
  1. <?php
  2. class Controlador extends CI_Controller {
  3.  private $data = NULL;
  4.  
  5.  public function __construct(){
  6.    $this->data = array();
  7.    $this->data['variable'] = "Hola Mundo Como estas???";
  8.  }
  9.  
  10.  public function index(){
  11.    $this->load->view('vista',$this->$data);
  12.  }
  13.  
  14.  public function imprimir(){
  15.    $html = $this->load->view('vista',$this->data,true);
  16.    echo $html;
  17.  }
  18. }
  19. ?>

O en declarar imprimir() como privada y llamarla desde index().

Saludos


Título: Re: Problema con Codeigniter...
Publicado por: cassiani en 28 Febrero 2013, 22:53 pm
eso, siempre y cuando la variable no deba cambiar de valor, yo por ejemplo trabajo titulos diferentes en una misma vista, según que método accediste, pero si la variable mantendra un valor estático, la mejor forma es la que expone el viejo monkey, ya que el constructor siempre es lo primero que se ejecuta en la clase.

saludos!


Título: Re: Problema con Codeigniter...
Publicado por: 01munrra en 1 Marzo 2013, 23:17 pm
pienso lo mismo cassiani, la solución que plantea drvy | BSM sirve mas, para un sistema estático, mas no funcionaria en mi caso, ya que la idea es añadir mas funciones, mas vistas y a la final es hacerle  una opción para imprimir reportes a tantas vistas tenga el controlador, un sistema dinámico en pocas palabras........


Saludos!!!


Título: Re: Problema con Codeigniter...
Publicado por: Shell Root en 1 Marzo 2013, 23:28 pm
Y sí sólo mandas un null, a la variable $variable...  :silbar:


Título: Re: Problema con Codeigniter...
Publicado por: #!drvy en 2 Marzo 2013, 00:19 am
Pfff xD

Es realmente necesario llamar a imprimir de esa forma ? Me refiero, podrias replantear como se llama la funcion imprimir.. en vez de directamente... por $_GET por ejemplo..

Código
  1. <?php
  2. class Controlador extends CI_Controller {
  3.  
  4.  public function index(){
  5.    $data = array();
  6.    $data['variable'] = "Hola Mundo Como estas???";
  7.    $this->loadme('vista',$data);
  8.  }
  9.  
  10.  private function imprimir($vista,$data){
  11.    $html = $this->load->view($vista,$data,true);
  12.    /* Manejo PDF */
  13.    echo $html;
  14.  }
  15.  
  16.  private function loadme($vista,$data){
  17.    if(!empty($_GET['imprimir']) && $_GET['imprimir']=='true'){
  18.      $this->imprimir($vista,$data);
  19.    } else {
  20.      $this->load->view($vista,$data);
  21.    }
  22.  }
  23.  
  24. }
  25. ?>

Código
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.   <meta charset="utf-8">
  4. <title> Prueba PDF</title>
  5. </head>
  6.   <h1><?php echo isset($variable) ? $variable : 'otra cosa'; ?></h1>
  7. <a href="?imprimir=true">Imprimir</a>
  8. </body>
  9. </html>

Ya no se me ocurre otra cosa xD

Saludos


Título: Re: Problema con Codeigniter...
Publicado por: 01munrra en 4 Marzo 2013, 19:14 pm
drvy | BSM, gracias!!!.... tomare en cuenta tu punto de vista, y veré a que solución puedo llegar....... en CI parece ser que puedo usar la funcion $this->load->view('vista','',true) solamente cuando se esta cargando la vista mas no puedo aplicarlo despues de que se haya cargado la vista es decir, no puedo obtener la informacion una ves que se alla cargado la vista, es por eso que no me muestra nada.......

la informacion sobre la funcion esta aqui en el manual: http://ellislab.com/codeigniter/user-guide/libraries/loader.html (http://ellislab.com/codeigniter/user-guide/libraries/loader.html), ellos no explican muy bien como usarlo, ya queda como Conclusión del programador ps....



Gracias!!


Saludos!!


Título: Re: Problema con Codeigniter...
Publicado por: 01munrra en 4 Marzo 2013, 23:04 pm
llegue a una solucion sencilla pero funciona al menos..... fijence:
 edite los siguientes archivos:

controlador.php
Código
  1. class Controlador extends CI_Controller
  2. {
  3. public function __construct()
  4. {
  5. parent::__construct();
  6. }
  7.  
  8. public function index()
  9. {
  10. $this->load->view('index');
  11. }
  12.  
  13. public function funcion($opcion="default", $id="", $accion="default")
  14. {
  15. if( $opcion == "default" )
  16. {
  17. $data = array();
  18. $data['variable'] = "Hola Mundo Como estas";
  19. $this->load->view('vista',$data);
  20. }
  21. if( $opcion == "imprimir" )
  22. {
  23. $data['variable'] = $id;
  24. $html = $this->load->view('vista',$data,true);
  25. $html="<html><head></head><body>".$html."</body></html>";
  26. $this->dompdf_lib->createPDF($html,"Estructura Clientes");
  27. }
  28. }
  29. }
  30.  

vista.php
Código
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title> Prueba PDF</title>
  6. </head>
  7. <body>
  8.  
  9. <?php if( isset($variable) ): ?>
  10. <h1><?php echo $variable; ?></h1>
  11. <?php endif; ?>
  12.  
  13. <a href="<?php echo site_url("controlador/funcion/imprimir") ?>/<?php echo $variable ?>"> Imprimir </a>
  14.  
  15. </body>
  16. </html>
  17.  

y index.php
Código
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title> Prueba PDF</title>
  6. </head>
  7. <body>
  8.  
  9. <a href="<?php echo site_url("controlador/funcion") ?>"> Prueba PDF</a>
  10.  
  11. </body>
  12. </html>
  13.  

y pues bueno la solucion como pueden ver es pasar por parametro variable y pues claro esta al tratarse de un sistema se va a pasar es el ID como tal para que luego se dirija a imprimir he contruya la vista de acuerdo al ID como tal, yo paso como variable es "Hola mundo como estas", por que es una prueba. pero en fin a esta solucion llegue...


Gracias por la información también me sirvió de mucho... ;-)

saludos!!!!