Problema con Codeigniter...

Iniciado por 01munrra, 27 Febrero 2013, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

01munrra

Saludos!!!.... les comento...

tengo este controlador
controlador.php
Código (php-brief) [Seleccionar]

class Controlador extends CI_Controller
{

public function index()
{
 $data = array();
 $data['variable'] = "Hola Mundo Como estas???";
 $this->load->view('vista',$data);
}

public function imprimir()
{
 $html = $this->load->view('vista','',true);
 echo $html;
}
}


y tengo la vista

vista.php
Código (php-brief) [Seleccionar]

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title> Prueba PDF</title>

</head>
<body>

<h1><?php echo $variable?></h1>

<a href="<?php echo site_url("controlador/imprimir"?>">Imprimir</a>

</body>
</html>


y pues al correr el eejercicio me muestra esto en el explorador:
Código (php-brief) [Seleccionar]

Hola Mundo Como estas???

Imprimir


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 (php-brief) [Seleccionar]

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: variable

Filename: views/vista.php

Line Number: 10


Imprimir


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

#!drvy

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

01munrra

ohhh... sorry lo escribi mal....

Código (php-brief) [Seleccionar]

class Controlador extends CI_Controller
{

public function index()
{
$data = array();
$data['variable'] = "Hola Mundo Como estas???";
$this->load->view('vista',$data);
}

public function imprimir()
{
$html = $this->load->view('vista','',true);
echo $html;
}
}


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

saludos!!

#!drvy

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.  
Citarla 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 (php) [Seleccionar]
<?php
class Controlador extends CI_Controller {
   private 
$data NULL;

   public function 
index(){
      
$this->data = array();
      
$this->data['variable'] = "Hola Mundo Como estas???";
      
$this->load->view('vista',$this->$data);
   }

   public function 
imprimir(){
      
$html $this->load->view('vista',$this->data,true);
      echo 
$html;
   }
}
?>


Saludos

01munrra

Cita de: drvy | BSM en 28 Febrero 2013, 03:59 AM
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!!!!

cassiani

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 (php) [Seleccionar]
public function imprimir(){
      $data['variable'] = 'algun dato';
        $this->load->view('vista',$data);
}


2.- verificas que la variable este definida en la vista, antes de imprimirla:
Código (php) [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title> Prueba PDF</title>
</head>
<body>
<h1><?php echo isset($variable) ? $variable 'otra cosa'?></h1>
<a href="<?php echo site_url("controlador/imprimir"?>">Imprimir</a>
</body>
</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:
<a href="<?php echo site_url("controlador/imprimir"); ?>">Imprimir</a>

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


01munrra

#6
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 (php-brief) [Seleccionar]

Imprimir


tal como indicas cassiani


Saludos!!!

#!drvy

#7
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 (php,5,6,7,8) [Seleccionar]
<?php
class Controlador extends CI_Controller {
  private 
$data NULL;

  public function 
__construct(){
    
$this->data = array();
    
$this->data['variable'] = "Hola Mundo Como estas???";
  }

  public function 
index(){
    
$this->load->view('vista',$this->$data);
  }

  public function 
imprimir(){
    
$html $this->load->view('vista',$this->data,true);
    echo 
$html;
  }
}
?>


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

Saludos

cassiani

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!

01munrra

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