ayuda Codeigniter / Datamapper

naye

hola:

Acudo a ustedes por que siempre me han ayudado con los problemas que me han surgido.

Este es mi problema, a lo mejor y es algo tonto pero estoy bloqueada y ya no doy mas.

De una vista hago un array -> al controlador -> modelo y no puedo sacar las variables del arreglo

Vista

$data= array( 'carrera' =>$carrera, 'grado'=>$grado);

	}
	?>
</table>

<?php
//form_hidden($carrera, $grado);
	print_r($data);
	echo anchor('alumnosriesgo/sistemas/buscar_alumno_carrera_grado_pdf/'.$data,' pdf  <br>');

Controlador

public function buscar_alumno_carrera_grado_pdf($data) {
				//	echo "<pre> ". var_dump($data). "</pre>" ;
					print_r($data);
					//var_dump($array);
		$carrera = $this -> input -> post('carrera');
		$grado = $this -> input -> post('grado');
		echo $carrera;
	//print_r($array);
//$carrera = $datos[ 'carrera'];
//$grado =$datos[ 'grado'];
foreach ($data as $row) {	
	$carrera = $row -> carrera;
	echo $carrera;	
		$grado  = $row -> grado;		
		echo $grado; 
		echo  $key -> $value;
 }
 
 $datos_alumno_carrera_grado['dato'] = $data;
		$datos_alumno_carrera_grado['resultado_alumnos'] = $this -> model_alumnos -> busca_alumno_carrera_grado_n($data);
		
		$this -> load -> view('/pages/alumnosriesgo/ver_alumno_campus', $datos_alumno_carrera_grado);
}

Modelo

public function busca_alumno_carrera_grado_n($data) {
		$campus = $this -> input -> post('campus');
		/*	foreach ($datos as $row) {
	$carrera = $array -> carrera;
	echo $carrera;	
		$grado  = $row -> grado;		
		echo $grado;
			}*/
		
	$u = new Alumno();
$array;
	return $u -> group_start() -> where('nombre_carrera', $carrera) -> group_start() -> where('nombre_grado', $grado) -> group_end() -> group_end() -> get();
	//echo $u;

}

Me sale la consulta con los datos de toda la tabla y no solo los de la carrera y grado que esta en el array, ya estoy desesperada.

kraneok

Estoy leyendo y releyendo tu pregunta, pero no entiendo realmente cual es tu problema.
De todos modos, el $data del controlador de donde llega, ¿ que es ?.

#3 Osea, estás llamando al controlador desde la Vista no?

#3 Prueba a crear una consulta sin utilizar al Active Record y a ver que pasa.

naye

el data es un array llenado en la vista pero no puedo sacar los datos de ese array en el controlador para poder procesarlos

1 respuesta
txandy

No estas usando el patrón de MVC... No "puedes" generar un array en la vista, la vista solo tiene que recibir la información. Las cosas se "mezclan" en el controlador...

No puedes prentender prograr a tu manera, con una cosa preparada para programar de otra. Si quieres programar con CI, te tienes que amoldar a él un poco.

echo anchor('alumnosriesgo/sistemas/buscar_alumno_carrera_grado_pdf/'.$data,' pdf <br>');

Si data es un array como haces un echo?

Veo muchos problemas en ese codigo tanto de conceptos de PHP como de CI, que no se si los has puestos para depurar o que, pero realmente veo una falta de base muy grande (PHP). Antes de dar el salto a CI hay que conocer PHP bien, muy bien.

Saludos

naye

si, ya se que eso no se puede pero me piden que muestre la información y de esta imprimirla en un pdf y por eso quiero mandar esas variables desde la vista o me puedes decir como lo hago por que soy algo nueva en esto y me hago bolas, y me desespero y empiezo a escribir cosas para poder resolver el problema y hago un batidillo

de antemano gracias

1 respuesta
kraneok

Es lo que estaba pensando mismamente, se esta formando un arreju importante de informacion en el conjunto de datos. Ademas de que ciertamente estas rompiendo el patron MVC. Por otra parte y totalmente fuera de lugar, pero por avisarte, CI recomienda no dejar espacios entre elementos de sentencias. Un saludin.

txandy

#5 librerias, te recomiendo que te leas la documentación de CI, toda entera antes de seguir...

Wasd

Es que no acabo de entenderlo... Para mandar datos de una vista a un controlador, se utiliza normalmente un <form>, entonces desde el controlador las recibes por get o post, pero generar el array asociativo $datos desde un <table> no lo acabo de ver.

(y para imprimir arrays, si no me equivoco algo más óptimo es usar var_dump($datos);, para hacerlo bonito puedes hacer <pre><?php var_dump($datos); ?> </pre>).
Otro consejo, intenta apartar la vista siempre lo máximo que puedas del tema programación. Todos los datos dinámicos, que le vengan del controlador, y para enviar los datos de vista a controller, como ya he dicho, un formulario (si me equivoco, que alguien me corrija).

No llevo mucho con CodeIgniter, pero es que generar el array en la vista me parece... extraño.

naye

Soy nuevita en esto y si sé que no se tiene que hacer lo que estoy hacienda entonces de qué forma puedo mandar el grupo y la carrera o como mando todo el array (que ya es una consulta que ya se visualiza)
Y apoco en ningún lado desde una vista no puedes mandar un o unos parámetro(s) para poder sacar algo ???

lo que quiero hacer es mandar la información de la vista a un pdf y no he podido hacerlo gracias

1 respuesta
kraneok

#9 Es simple, si la información de la vista es enviada desde un controlador, envía a su misma vez a otro controlador que se encargue del pdf. o directamente el sea quien lo haga.

Lo suyo sería crearse un helper y cargarlo desde el controlador que envía la información a la vista y este mismo, generar el .pdf.

naye

hooooo, no lo había pensado lo checo y te digo en un rato que pasó
gracias por la idea

naye

hola otra vez

hice esto

$datos_alumno_carrera_grado['resultado'] =$this->load->model_alumnos -> busca_alumno_carrera_grado($carrera, $grado);
      $this->buscar_alumno_carrera_grado_pdf($datos_alumno_carrera_grado);

pero me manda directo al pdf y no a la vista y trate de hacer un formulario para mandarlo no lee las variables por que me manda el pdf en blanco

$submit1 = array('name' => 'Login_submit', 'value' => 'PDF' );
echo form_open('alumnosriesgo/sistemas/buscar_alumno_carrera_grado_excel');
$data = array ('carrera' => $carrera, 'grado' => $grado);
echo form_hidden ($data);
echo form_submit($submit1);
echo form_close();

que puede estar mal?

naye

Después de varios intentos más seguí los consejos de todos (un poquitín) y ya quedo por fin y lo hice con un formulario

Vista

<head> 
  
<script> function enviar_formulario1(){ document.formulario1.submit() } </script> <script> function enviar_formulario2(){ document.formulario2.submit() } </script> </head> <div> hola vista tabla de alumnos campus - grado <br/> <?php //print_r($resultado); ?> <br/> <table width="10" border="1"> <?php echo "<tr><td>NOMBRE</td> "; echo " <td>PATERNO</td> "; echo " <td>MATERNO</td> "; echo " <td>NOMBRE TUTOR</td> "; echo " <td>TEL TUTOR</td> "; echo " <td>CAMPUS</td> "; echo " <td>CARRERA</td> "; echo " <td>GRADO</td></tr> "; foreach ($resultado as $row) { //print_r($key); $id = $row -> id; echo "<tr><td>" . $row -> nombre_alumno2 . "</td>"; echo " <td>" . $row -> paterno . "</td>"; echo " <td>" . $row -> materno . "</td>"; echo " <td>" . $row -> nombre_tutor . "</td>"; echo " <td>" . $row -> tel_tutor . "</td>"; echo " <td>" . $row -> nombre_campus . "</td>"; echo " <td>" . $row -> nombre_carrera . "</td>"; echo " <td>" . $row -> nombre_grado . "</td>"; echo " <td>" . anchor('alumnosriesgo/sistemas/buscar_id_alumno/' . $id, 'Seleccionar ') . $id . " </td></tr>"; $carrera = $row -> nombre_carrera; $grado = $row -> nombre_grado; } ?> </table> <? $submit1 = array('name' => 'Login_submit', 'value' => 'PDF' ); $submit2= array('name' => 'Login_submit', 'value' => 'Excel' ); echo form_open('alumnosriesgo/sistemas/buscar_alumno_carrera_grado_prueba'); $data = array ('carrera' => $carrera, 'grado' => $grado); //echo element('carrera',$data); //echo element('grado',$data); echo form_hidden('carrera',$carrera); echo form_hidden('grado', $grado); //echo form_hidden ($data); echo form_submit($submit1); echo form_close(); echo form_open('alumnosriesgo/sistemas/buscar_alumno_carrera_grado_excel'); $data = array ('carrera' => $carrera, 'grado' => $grado); echo form_hidden ($data); echo form_submit($submit2); echo form_close(); ?> </div>

Controlador

		public function buscar_alumno_carrera_grado_prueba() {
	
		$carrera = $this -> input -> post('carrera');
	$grado = $this -> input -> post('grado');
	echo $carrera;
	echo $grado;
	$datos_alumno_carrera_grado['resultado'] = $this -> model_alumnos -> busca_alumno_carrera_grado_prueba($carrera, $grado);
	$this -> load -> view('/pages/alumnosriesgo/ver_alumnos_campus_grado_pdf', $datos_alumno_carrera_grado);
	
}

Modelo

public function busca_alumno_carrera_grado_prueba($carrera, $grado) {
		echo "bd prueba";
	//	echo $carrera;
		//echo $grado;
		$u = new Alumno();
		 $u -> group_start() -> where('nombre_carrera', $carrera) -> group_start() -> where('nombre_grado', $grado) -> group_end()  -> group_end()-> get();
		return $u;
			}	

La nueva vista

<?php
$this -> load -> library('mpdf');

$mpdf = new mPDF();
$mpdf -> WriteHTML('<table width="10" border="1">');
$mpdf -> WriteHTML('<tr><td>NOMBRE</td>');
$mpdf -> WriteHTML('<td>PATERNO</td> ');
$mpdf -> WriteHTML('<td>MATERNO</td>  ');
$mpdf -> WriteHTML('<td>NOMBRE TUTOR</td> ');
$mpdf -> WriteHTML('<td>TEL TUTOR</td>	');
$mpdf -> WriteHTML('<td>CAMPUS</td>	 ');
$mpdf -> WriteHTML('<td>CARRERA</td>	 ');
$mpdf -> WriteHTML('<td>GRADO</td></tr>');
		foreach ($resultado as $row) {

		
$mpdf -> WriteHTML('<tr><td>' . $row -> nombre_alumno . '</td>');
$mpdf -> WriteHTML('<td>' . $row -> paterno . '</td>');
$mpdf -> WriteHTML('<td>' . $row -> materno . '</td>');
$mpdf -> WriteHTML('<td>' .  $row -> nombre_tutor . '</td>');
$mpdf -> WriteHTML('<td>' .  $row -> tel_tutor . '</td>');
$mpdf -> WriteHTML('<td>' . $row -> nombre_campus . '</td>');
$mpdf -> WriteHTML('<td>' .  $carrera = $row -> nombre_carrera. '</td>');
$mpdf -> WriteHTML('<td>' .  $grado = $row -> nombre_grado . '</td></tr>');
}

$mpdf -> WriteHTML('</table >');
$mpdf -> Output(); 

?>	

y quedo perfecto

GRACIAS A TODOS

PiradoIV

Pues ahora que te funciona, te toca refactorizar y ceñirte al patrón MVC. Puede que hoy te funcione, pero a nada que tengas que modificar algo no vas a recordar ni por dónde empezar... es como ponerle sillones de mimbre a un Ferrari.

En los casos concretos en los que necesitas usar algo de código PHP dentro de la vista (limitándote a bucles y poco más), puedes usar la sintaxis alternativa de PHP, que te explican muy bien en la documentación de CodeIgniter:

<table>
  <?php
  foreach($objetos as $elemento) {
    echo '<tr>';
    echo '<td>' . $elemento->nombre . '</td>';
    echo '<td>' . $elemento->apellidos . '</td>';
    echo '</tr>';
  }
  ?>
  </tr>
</table>

Este tipo de cosas puedes reescribirlas de esta manera:

<table>
  <?php foreach($objeto as $elemento): ?>
  <tr>
    <td><?= $elemento->nombre ?></td>
    <td><?= $elemento->apellidos ?></td>
  </tr>
  <?php endforeach ?>
</table>

En las vistas tampoco nos podemos encontrar con este tipo de código, que tienes en la tuya:

$data = array ('carrera' => $carrera, 'grado' => $grado);

Todos los datos se generan o preparan en el controlador y se le pasan a la vista:

Controlador

<?php
// ...

  public function buscar_alumno_carrera_grado($carrera = NULL, $grado = NULL) {
    $data = array(
      'carrera' => $this->input->get('carrera', TRUE),
      'grado' => $this->input->get('grado', TRUE)
    );

$this->load->view('la_vista_que_sea', $data);
  }

Vista

<h1><?= $carrera ?></h1>
<h2>Estás viendo el grado <?= $grado ?>.</h2>

Saludos

naye

Muchas gracias voy a tomar en cuenta todos tus comentarios, ya se que no me tengo que apresurar y querer hacer las cosas como yo quiero sino como de debe gracias

Saludos a Todos y Muchas gracias

Usuarios habituales

  • naye
  • PiradoIV
  • kraneok
  • Wasd
  • txandy