Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Motor plantilla php

Estas en el tema de Motor plantilla php en el foro de PHP en Foros del Web. Quiero hacer un drop down con smarty Y tengo lo siguiente: Clase ProductoDAO ============= Código PHP: function  listar (){         $query  =  "SELECT idproducto, nombre FROM producto" ;  Utilizaré ...
  #1 (permalink)  
Antiguo 09/10/2010, 18:12
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Motor plantilla php

Quiero hacer un drop down con smarty


Y tengo lo siguiente:

Clase ProductoDAO
=============
Código PHP:
function listar(){
       
$query "SELECT idproducto, nombre FROM producto"
Utilizaré el "idproducto" será el valor y el "nombre" será lo que vamos a mostrar y seleccionar.

Mi PHP:
=====
Código PHP:
$dao = new ProductoDAO();
$lista $dao->listar();
$tpl = new Plantilla();
$tpl->assign("lista"$lista);
$tpl->display('principal.tpl.php'); 
En mi plantilla TPL:
=============
Código PHP:
<select name="id_producto">
    <
option value='null'>-- none --</option>
    {
html_options options=$lista selected=$lista.nombre}
</
select
Leí el manual pero no entiendo bien los ejemplos: [URL="http://www.smarty.net/manual/en/language.function.html.options.php"]Manual Smarty[/URL]

Cuál es mi error??
Gracias.

Última edición por bandolera; 09/10/2010 a las 19:58
  #2 (permalink)  
Antiguo 09/10/2010, 20:18
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Motor plantilla php

Hola
bueno, pues es que en la función listar solo tienes el sql pero
no lo has ejecutado, ni estas retornando ningún valor en la función para que
sea asignado a $lista para pasarle eso a smarty
si te fijas en los ejemplos, hacen unos arrays que asignan luego a las variables
que se pasan a smarty
revisa eso
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 09/10/2010, 21:28
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Motor plantilla php

Cita:
Iniciado por mortiprogramador Ver Mensaje
Hola
bueno, pues es que en la función listar solo tienes el sql pero
no lo has ejecutado, ni estas retornando ningún valor en la función para que
sea asignado a $lista para pasarle eso a smarty
si te fijas en los ejemplos, hacen unos arrays que asignan luego a las variables
que se pasan a smarty
revisa eso
saludos
He agregado este código en la plantilla y si me muestra los valores de "idProducto" y "nombre":
Código PHP:
{section name=i loop=$lista}
  {
$lista[i]->idProducto}
  {
$lista[i]->nombre}<br/>
{/
section
Así que el problema está en el
Código PHP:
<select name="id_producto">
    <
option value='null'>-- none --</option>
    {
html_options options=$lista.nombre selected=$lista.idProducto}
</
select
Y en el ejemplo hace dos select a dos tablas, yo solo quiero un select a una tabla. Eso me confunde.

Última edición por bandolera; 09/10/2010 a las 21:33
  #4 (permalink)  
Antiguo 10/10/2010, 02:44
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Motor plantilla php

Cita:
Iniciado por bandolera Ver Mensaje
He agregado este código en la plantilla y si me muestra los valores de "idProducto" y "nombre":
Código PHP:
{section name=i loop=$lista}
  {
$lista[i]->idProducto}
  {
$lista[i]->nombre}<br/>
{/
section
a la plantilla en smarty directamente??


Así que el problema está en el
Código PHP:
<select name="id_producto">
    <
option value='null'>-- none --</option>
    {
html_options options=$lista.nombre selected=$lista.idProducto}
</
select
Y en el ejemplo hace dos select a dos tablas, yo solo quiero un select a una tabla. Eso me confunde.
Bueno, pues yo lo tengo de este modo

en el select (plantilla html)
Código PHP:
{#html_options values=$columns output=$columnOutput selected=$prueba#} 
en el php asociado a la plantilla

Código PHP:
        $consulta = new consulta();
        
$table "tabla";
        
$search "id, nombre";
        
$obtenido $consulta->getdatos($table$search);
        
$smarty->assign('columns'$obtenido->id);
        
$smarty->assign('columnOutput'$obtenido->nombre);
        
$smarty->assign('prueba'1); 
en la clase consulta


Código PHP:
    function getdatos($table$search){
        
$devolver '';
        
$sql " SELECT "$search ." FROM "$table ." ;";
       
//ejecuto el query
        
$i 0;
        if ( 
$this->numrows ){
            while(
$i $this->numrows){
                    
$devolver->id[$i] = valorid;//asigno
                    
$devolver->nombre[$i] = valornombre;//asigno
              
}
                
$i++;
            }
        }
        return 
$devolver;
    } 
espero te sirva la idea
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 10/10/2010, 15:31
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Motor plantilla php

Cita:
Iniciado por mortiprogramador Ver Mensaje
Bueno, pues yo lo tengo de este modo

en el select (plantilla html)
Código PHP:
{#html_options values=$columns output=$columnOutput selected=$prueba#} 
(...)
espero te sirva la idea
saludos
Muy interesante tu propuesta pero no entiendo por qué no funciona con el mío.
Mi función listar es la siguiente:
Código PHP:
    function listar(){
       
$query "SELECT id_producto, id_categoria, nombre, descripcion, precio, stock, importancia, imagen
                   FROM producto"
;
       
$BD = new ConexionDB();
       
$recordSet $BD->dbLink->Execute($query);
       if (!
$recordSet){
         
Debug::println("No se pudo ejecutar la consulta listar: " $query);
         return 
false;
       }

       
$productos = array();

       while(
$fila=$recordSet->FetchRow()) {
          
$productos[] = new ProductoVO($fila['id_producto'], $fila['id_categoria'], $fila['nombre'],
                                      
$fila['descripcion'], $fila['precio'], $fila['stock'], $fila['importancia'],
                                      
$fila['imagen']);
       }

      return 
$productos;
    } 
Y también utilizo un ProductoVO

Código PHP:
class ProductoVO {

    var 
$idProducto;
    var 
$idCategoria;
    var 
$nombre;
    var 
$descripcion;
    var 
$precio;} 
Y por eso en mi plantilla puedo mostrar mis registros así:

Código PHP:
{section name=i loop=$lista}
   {
$lista[i]->idProducto}
   {
$lista[i]->nombre}<br/>
{/
section
Pero cuando quiero separarlos como tú lo haces para el {html_options} no muestra nada.
  #6 (permalink)  
Antiguo 10/10/2010, 15:42
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Motor plantilla php

Cita:
Iniciado por bandolera Ver Mensaje
Muy interesante tu propuesta pero no entiendo por qué no funciona con el mío.
Mi función listar es la siguiente:
Código PHP:
    function listar(){
       
$query "SELECT id_producto, id_categoria, nombre, descripcion, precio, stock, importancia, imagen
                   FROM producto"
;
       
$BD = new ConexionDB();
       
$recordSet $BD->dbLink->Execute($query);
       if (!
$recordSet){
         
Debug::println("No se pudo ejecutar la consulta listar: " $query);
         return 
false;
       }

       
$productos = array();

       while(
$fila=$recordSet->FetchRow()) {
          
$productos[] = new ProductoVO($fila['id_producto'], $fila['id_categoria'], $fila['nombre'],
                                      
$fila['descripcion'], $fila['precio'], $fila['stock'], $fila['importancia'],
                                      
$fila['imagen']);
       }

      return 
$productos;
    } 
Y también utilizo un ProductoVO

Código PHP:
class ProductoVO {

    var 
$idProducto;
    var 
$idCategoria;
    var 
$nombre;
    var 
$descripcion;
    var 
$precio;} 
Y por eso en mi plantilla puedo mostrar mis registros así:

Código PHP:
{section name=i loop=$lista}
   {
$lista[i]->idProducto}
   {
$lista[i]->nombre}<br/>
{/
section
Pero cuando quiero separarlos como tú lo haces para el {html_options} no muestra nada.
uhm, bueno, tal vez sea porque en el section si te permite iterar
sobre el indice (i) pero en el html options no,
y no creo que permita dentro del section
dibujar un html options
podrías intentar devolver los datos de otro modo,
o intentar como te comente
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 10/10/2010, 18:15
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Motor plantilla php

Cita:
Iniciado por mortiprogramador Ver Mensaje
uhm, bueno, tal vez sea porque en el section si te permite iterar
sobre el indice (i) pero en el html options no,
y no creo que permita dentro del section
dibujar un html options
podrías intentar devolver los datos de otro modo,
o intentar como te comente
saludos
Creo que ya encontré mi problema , el problema está en los valores de mi variable $lista, esta variable contiene esto:

Código PHP:
Array
(
    [
0] => ProductoVO Object
        
(
            [
idProducto] => 1
            
[idCategoria] => 3
            
[nombre] => Osito Hugo con globo
            
[descripcion] => 20 cmfelpa marron corbata azul toko
            
[precio] => 50
        
)

    [
1] => ProductoVO Object
        
(
            [
idProducto] => 2
            
[idCategoria] => 1
            
[nombre] => Arreglo Princesa
            
[descripcion] => Rosas y claveles jarron vidrio
            
[precio] => 85
        
)

    [
2] => ProductoVO Object
        
(
            [
idProducto] => 3
            
[idCategoria] => 1
            
[nombre] => Rosa Roja en caja
            
[descripcion] => 40 cmRosa Importada
            
[precio] => 26
        
)
    
etc... 
Cómo hago para asignar idProducto y nombre a la plantilla del {html_options} ??

Le he puesto esto pero no sale:
Código PHP:
$tpl->assign('lista1'$lista->ProductoVO($idProducto)); 
Código PHP:
$tpl->assign('lista2'$lista->ProductoVO($nombre)); 
Y mostrarlo aquí.
Código PHP:
{html_options name="type" options=$lista1 selected=$lista2
Solo falta extraer los valores de $lista.

Última edición por bandolera; 10/10/2010 a las 18:41
  #8 (permalink)  
Antiguo 10/10/2010, 18:59
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Motor plantilla php

Hola
bueno, en efecto, ese es el problema, revisa la función getdatos que te deje, de ese modo tienes que dejar el tuyo (en cuanto al retorno de datos)
para que te devuelva algo así

Código:
stdClass Object 
(
 [id] => Array([0] => 1)     
 [nombre] => Array([0] => nombre1)
 )
y la asignación sería $lista->id y $lista->nombre
si no, te tocaría antes de asignar, como tu lo tienes, recorrer el array
y concatenar los valores de id en una variable, de nombre en otra,
y darle espacios con un br o parecido para finalmente asignarlos
a smarty

saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 21/10/2010, 13:07
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
De acuerdo Respuesta: Motor plantilla php

Sip, ya está todo ok.
Tuve que cambiar un poco la función que genera la lista y hacer un barrido a la variable para sacar los campos que necesitaba.
Gracias.

Etiquetas: motor, plantillas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:45.