Hola amigos, soy nuevo en el foro y tengo un problemita y queria que me ayudacen, por favor!
-Estoy tratando recien el tema de Sistema de Plantillas especificamente el patrón de diseño MVC(modelo-Vista- Controlador). En primer lugar tengo mi clase VO(value object . que representa a la trabla con sus columnas respectivas) el codigo es:
Código PHP:
Ver original<?php
class DetalleVO {
public $art_cod;
public $art_nom;
public $art_pre;
public $art_can;
public $total;
public function __construct($cod, $nom, $pre, $can, $tot){
$this->art_cod = $cod;
$this->art_nom = $nom;
$this->art_pre=$pre;
$this->art_can = $can;
$this->total=$tot;
}
}
?>
Ahora tengo el DAO (data acces object) que representa la persistencia. Dada un numero de factura que me devueva los productos que contiene factura
Código PHP:
Ver original<?php
require_once DIRECTORIO_RAIZ . "/clases/util/Conexion.class.php";
require_once DIRECTORIO_RAIZ . "/clases/util/DAOExcepcion.class.php";
require_once DIRECTORIO_RAIZ . "/clases/vo/DetalleVO.class.php";
class DetalleDAO {
public function obtener($fac_num){
try{
$cnx=Conexion::getInstancia();
$fac_num=$cnx->dbLink->qstr($fac_num);
$query="select d.art_cod, a.art_nom, a.art_pre,d.art_can, a.art_pre*d.art_can as total";
$query.=" from articulos a, fac_deta d";
$query.= " where a.art_cod=d.art_cod and fac_num='%".$fac_num."%' group by d.art_cod, a.art_nom, a.art_pre,d.art_can;";
$resultSet=$cnx->dbLink->Execute($query);
if(!$resultSet){
throw new DAOExcepcion($cnx->dbLink->ErrorMsg());
}else{
while(!$resultSet->EOF){
$resultado[]=new DetalleVo($resultSet->fields['art_cod'],
$resultSet->fields['art_nom'],
$resultSet->fields['art_pre'],
$resultSet->fields['art_can'],
$resultSet->fields['total']);
$resultSet->MoveNext();
}
}
$resultSet->Close();
$cnx->dbLink->Close();
}catch(ConexionExcepcion $e){
throw new DAOExcepcion($e->getMessage());
}catch(DAOExcepcion $dao){
throw new DAOExcepcion($dao->getMessage());
}
return $resultado;
}
}
?>
Luego tengo un controlador que se encarga de las dos capas anteriores y que trabaja con la plantilla
Código PHP:
Ver original<?php
require_once "conf.php";
require_once "./clases/dao/DetalleDAO.class.php";
$accion =(!isset ($_REQUEST['accion']))?
'': $_REQUEST['accion']; $tpl = new Savant3();
$dao = new DetalleDAO();
switch ($accion){
case 'detalle':
try{
$vo=$dao->obtener($_POST['fac_num']);
$tpl->detalle=$vo;
$tpl->display('/plantillas/detalle_listar.tpl.php');
}catch(DAOExcepcion $e){
$tpl->mensaje_error=$e->getMessage();
$tpl->display('/plantillas/detalle_listar.tpl.php');
return;
}
header("Location: detalles.php"); return;
break;
default:
try {
$tpl->display('/plantillas/detalle_listar.tpl.php');
} catch(DAOExcepcion $e){
print "Problemas con su red.";
}
return;
}
?>
y por ultimo la plantilla que muestra los datos
Código PHP:
Ver original<!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>Untitled Document</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="detalles.php">
<input type ="hidden" name="accion" value="detalle"/>
<p><strong><em>Detalle de Una Factura</em></strong></p>
<p>Factura
<label>
<input type="text" name="fac_num" />
</label>
<label>
<input type="submit" name="button" id="button" value="Buscar" />
</label>
</p>
</form>
<table width="399" border="1" cellspacing="1" cellpadding="3">
<tr>
<th width="64" scope="col">Codigo</th>
<th width="104" scope="col">Descripcion</th>
<th width="73" scope="col">Precio Unitario</th>
<th width="56" scope="col">Cantidad</th>
<th width="54" scope="col">Total</th>
</tr>
<tr>
<?php if(isset($_POST['fac_num']) && $_POST['fac_num']!=""){ foreach($this->detalle as $vo ){?> <td><?php print $vo->art_cod;?></td>
<td><?php print $vo->art_nom;?></td>
<td><?php print $vo->art_pre;?></td>
<td><?php print $vo->art_can;?></td>
<td><?php print $vo->total;?></td>
</tr>
<?php }}?>
</table>
<p> Total de Importe
<label>
<input type="text" name="textfield2" id="textfield2" readonly="readonly" />
</label>
</p>
<p> </p>
</body>
</html>
Luego que ingreso el número de factura y envio el formulario me salen dos errores:
Código HTML:
Ver originalNotice: Undefined property: Savant3::$detalle in C:\wamp\www\Eclipse.projects\ProyectoVentas\plantillas\detalle_listar.tpl.php on line 30
Warning: Invalid argument supplied for foreach() in C:\wamp\www\Eclipse.projects\ProyectoVentas\plantillas\detalle_listar.tpl.php on line 30
Como les repito soy novato con el trabajo de plantillas, por favooor que alguien me ayude please!