Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Crear un ABM

Estas en el tema de Crear un ABM en el foro de Frameworks y PHP orientado a objetos en Foros del Web. He leido bastante de teoria sobre clases en PHP 5. Tambien sobre patrones.Ahora bien, me gustaria empezar por hacer algo practico. Y pense, que mejor ...
  #1 (permalink)  
Antiguo 10/12/2006, 11:40
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
Crear un ABM

He leido bastante de teoria sobre clases en PHP 5. Tambien sobre patrones.Ahora bien, me gustaria empezar por hacer algo practico. Y pense, que mejor que hacer un ABM (Alta, baja y modicacion de registros de una base de datos) .Ahora bien, francamente no se por donde empezar. He buscado en la web algun codigo de referencia pero francamente no veo aun algo que me sirva de guia y base (No deseo copiar y pegar, sino ver como otro programador encara el problema)
Agradeceria mucho si pueden guiarme en ese sentido
Saludos atentos
  #2 (permalink)  
Antiguo 10/12/2006, 18:23
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Crear un ABM

No sería mejor que lo intentarás tu? es decir, poner tu código y nosotros te corregimos, creo que de esa forma aprenderás mucho más, para ser exactos no hay una única forma de hacer ABM de hecho cada programador utiliza código diferente. Por eso no encuentras una solución estándar.

Deberías analizar primero el problema... que quieres utilizar, acceso a datos(xml,mysql,postgreSQL,Oracle...) controladores... templates ...
Depende de tus necesidades, puedes utilizar paquetes hechos del repositorio PEAR por ejemplo y hacer uso de paquetes de repositorio por ejemplo HTML_QUICKFORM para formularios y validacion con PEAR::DB como abstracción base de datos y SMARTY como sistema de templates... Hay infinitas combinaciones.
Aunque si quieres aprender hazlo tu mismo.

Luego cuando lleves un tiempo verás que tal paquete pues está mejor implementado o peor, o quizá veas que necesitas más soluciones y acabes utilizando un framework o diseñandote uno tu mismo depende de ti.
  #3 (permalink)  
Antiguo 11/12/2006, 07:25
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: Crear un ABM

Si, seria lo mejor, y de hecho lo he intentado, me he puesto un par de veces y he logrado una grilla de datos simple hecha clase. Estoy trabado sobre como encarar cada accion (insert, edit, delete) de esa grilla.
En realidad esos frameworks los use pero deseaba ver otras ideas para poder aprender sobre un codigo menos dependiente de frameworks, y desarrollar algo mas 'artesanal' y propio.
Bueno, gracias igual por tu respuesta.
Saludos

Última edición por tico74; 11/12/2006 a las 07:34
  #4 (permalink)  
Antiguo 11/12/2006, 10:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Crear un ABM

Para desarrollar un ABM, tienes que abstraer tus clases, y generar clases independientes pero que se centralizen en el ABM, una clase puede ser la grilla de datos, otro el acceso a la base de datos, otra la clase que se encarga de hacer los inserts, updates y deletes, otra clase el formulario y ya despues integrar todo el paquete.

Espero te sea de referencia para que empiezes a programar
  #5 (permalink)  
Antiguo 13/12/2006, 17:26
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Cita:
Iniciado por GatorV Ver Mensaje
Para desarrollar un ABM, tienes que abstraer tus clases, y generar clases independientes pero que se centralizen en el ABM, una clase puede ser la grilla de datos, otro el acceso a la base de datos, otra la clase que se encarga de hacer los inserts, updates y deletes, otra clase el formulario y ya despues integrar todo el paquete.

Espero te sea de referencia para que empiezes a programar
Bueno, yo sigo novato con esto y siempre con dudas... ya hace unos meses que intento ir mejorando mi manera de programar, pero siempre surgen nuevas dudas.

Dices "otra la clase que se encarga de hacer los inserts, updates y deletes", llamemosla "abm". Si tenes por ejemplo una tabla "usuarios" y necesitas hacerle un ABM.... creas una clase "usuarios" con los metodos necesarios para el alta-baja-modificacion (utilizando dentro una instancia de "abm")? o directamente usas la clase abm.. sin mas?

No se si me explico jeje. Hasta que punto crean clases para manejar las cosas?


Ojala haya sido claro... y gracias :D

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #6 (permalink)  
Antiguo 13/12/2006, 17:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Crear un ABM

A la técnica del mapeo en que una tabla se representa como un objeto se puede llamar a grandes rasgos ORM. Esto se representa en los framework modernos como rails, zend framework... como una implementación del patrón ActiveRecord.

Recordemos que los Patrones de Diseño (Design Patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. (wikipedia te quiero).

Asi que soluciones a problemas comunes.... no se extrae mucho. Bien ejemplo claro. Diseñamos un weblog (bienvenido a la bloggesfera) somos así de chulos y decidimos crearmos uno, pasando de blogger y de wordpress...

Bien en un Blog podemos ver rápidamente que necesitaremos una tabla para posts, los posts necesitaran categorias, y también necesitaremos una tabla de enlaces amigos.
Así podemos ver que en la parte pública se listaran las categorias y cada categoria tendrá n posts, y se listaran los links por completo. Pero en la parte privada podremos crear, borrar y modificar.
Así que tenemos todas las tablas (posts, categorias, links) que utilizaran alta, baja, modificar. Bien pues un buen patrón nos ahorraria mucho codigo.

Solución:

Crear una clase abstracta con los siguientes metodos (esenciales):

findAll($where='',$order='');
findOne($where='',$order='')
findById($id)
deleteAll($where)
deleteById()
updateAll($set,$where)
updateById($id)
insert($rows=array())
save()
y los siguientes atributos (esenciales):
protected $primary_key;
protected $table_name;
protected $fields;


y luego los objetos que representan tabla extienden de esta clase. De esta manera tenemos hecha la parte esencial del modelo. Ahora todos los objetos que extiendan de este tendran las propiedades de seleccionar, actualizar, borrar.

Es un comienzo
  #7 (permalink)  
Antiguo 13/12/2006, 18:19
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Muchas Gracias Casuis, eso me aclara bastante

Y por ejemplo, tengo una clase para realizar validaciones:

checkMail()
checkNumber()
etc..

Esta clase se usa "libre" y "sola" antes de realizar el insert con la clase "usuarios" que extiende de la clase abstracta(la de tu ejemplo)? o se crea una instancia de la clase de validacion dentro de la clase "usuarios"?

Este tipo de dudas, que me imagino que son muy basicas, me estan volviendo loco. Hay algun texto que me puedan recomendar que hable precisamente de estas cosas?


Muchas gracias
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #8 (permalink)  
Antiguo 14/12/2006, 03:23
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
Re: Crear un ABM

Hola Fridureiks
Interesante lo que comentas de la clase que tienes.
Podrias publicar un ejemplo de implantación la clase.?
Saludos
  #9 (permalink)  
Antiguo 14/12/2006, 05:39
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Hola lcervantes, es mas bien simple y sin muchas vueltas, pero tambien intento mejorarla.

Código PHP:
<?php
$validator 
= new validator();
if(! 
$validator->checkMail($mail))
{
         echo 
"Ingrese un e-mail correcto";
}
?>
checkMail($mail), devuelve true o false si el mail es correcto o incorrecto. Es decir, es una clase con todos los metodos para validacion de tipos de datos. Lo que me pregunto es si este pequeño proceso que expongo, el separar los datos y aplicarles una regla de validacion, lo deberia hacer dentro de mi clase "usuarios" con un metodo "validar" que cree una instancia de mi clase de validacion... o bien, validar fue de la clase usuarios antes de llamar al metodo que me inserte en la BD.

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #10 (permalink)  
Antiguo 14/12/2006, 06:59
Avatar de Felippe  
Fecha de Ingreso: octubre-2006
Mensajes: 54
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Crear un ABM

Hola Fridureiks,

Me parece que en el fondo tu duda está relacionada con la Estructura que puede tomar tu sistema (tema muy discutido).

En mi humilde opinion, puedo aconsejarte que emplees el Patron de Desarrollo MVC (Modelo, Vista, Controlador) sobre el cual existe actualmente un debate en este portal (www[dot]forosdelweb[dot]com/showthread.php?t=441141 ).

Cita:
Lo que me pregunto es si este pequeño proceso que expongo, el separar los datos y aplicarles una regla de validacion, lo deberia hacer dentro de mi clase "usuarios" con un metodo "validar" que cree una instancia de mi clase de validacion... o bien, validar fue de la clase usuarios antes de llamar al metodo que me inserte en la BD.
Al definir una buena estructura (arquitectura) para tu sistema, podras darte cuenta que las validaciones (posiblemente sintáctica y semántica), deberían hacerse fuera de la parte lógica del sistema, es decir puedes definirte un conjunto de herramientas encargadas de la validacíon, en principio sintáctica, que funcione como una especie de 'firewall' para tu sistema, de manera que los datos validados entren a tus clases (del Modelo) que se encargarán de fluir los datos adecuadamente, interactuando posiblemente con un BD.

Espero haber sido claro con mi explicación.

Un saludo
  #11 (permalink)  
Antiguo 14/12/2006, 07:20
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Crear un ABM

Por lógica deberia hacerse antes la validación. te pongo un ejemplo claro:

*anotación: voy a utilizar como ejemplo un Model - Vista -Controlador simulado

Imaginate que tengo la siguiente estructura de projecto siguiendo el ejemplo anterior:

Código:
+--Myblog
 |+-- controllers
 |+-- models
 |+-- views
 |- index.php
 |- config.php
 |- .htaccess
Bien dentro de la carpeta models tengo (AbstractModel.php) la clase que hemos definido antes, asi como Post.php, Link.php, Categorias.php.
Todas ellas extienden de AbstractModel.php. Asi que heredaran todos sus métodos y propiedades.
Dentro de views tendremos las templates
Dentro de controllers tendremos los controladores. Yo elegiria crear un AbstractController.php y después que los demás controladores
extiendan de esta clase asi como pasaba con el modelo.

Pongamos el ejemplo de post (donde se almacenaran los mensajes).

Un post facilón seria con los siguientes campos (id, titulo, mensaje, autor,fecha_publicacion, categoria).

Asi por ejemplo el modelo quedaria:

Código PHP:
require_once(ROOTPATH."models/AbstractModel.php");
class 
Post extends AbstractModel{
    public function 
__construct(){
        
$fields = array('id','titulo','mensaje',
                        
'fecha_publicacion','categoria','email');
        
// parametros: nombre_campos, nombre_tabla, primary_key
        
super::__construct($fields,'post',array('id'));
    }

El controlador:


Código PHP:
require_once(ROOTPATH."controllers/AbstractController.php");
require_once(
ROOTPATH."models/Post.php");
require_once(
ROOTPATH."view/AbstractView.php");

class 
PostController extends AbstractController{
    
    private 
$view// el Objeto view puede ser una clase extendida de Smarty o de MockTemplate o Lite Smarty etc.
    //modelos
    
private $postModel// postModel será el objeto modelo
    
    
public function __construct(){
        
$this->view = new View(); 
        
$this->postModel = new Post(); 
    }

    function 
defaultAction(){
      
$this->view->assign("titulo","Mi Blog");
      
$this->view->render("Portada.tpl");
    }
    
    function 
addAction(){
        
// quiere decir que hemos enviado un nuevo post y lo tenemos que insertar
        
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') { 
            
            
$postValidation = new Validation($_POST); // le pasamos todo el array de post para que pueda ir validando
            //recogemos los campos del formulario
            
$titulo  trim($postValidation>noTags('titulo')); // le quitaremos todos los tags 
            
$mensaje trim($postValidation>noTags('mensaje'));
            
$fecha   date("Y-m-d H:m:s");  // generaremos una fecha
            
$autor   trim($postValidation>getAlpha('autor')); // devolvera solo los caracteres alfabeticos
            
$categoria $postValidation->getNumeric('categoria'); // devolvera el numero identificador de categoria
            
if(!$postValidation->checkEmail('email')){
               
$this->view->assign("titulo","Insercion de post");
               
$this->view->assign("errors",array('email'=>'el email no es valido'));
               
$this->view->render("PostAdd.tpl");
            }
            
$email trim($post->Validation->getRaw("email")); // no hace nada lo retorna sin filtro
            
$data = array('titulo' => $titulo,
                          
'mensaje' => $mensaje,
                          
'fecha_pub' => $fecha,
                          
'autor' =>$autor,
                          
'categoria' => $categoria,
                          
'email'=> $email
                         
);
            
$this->postModel->insert($data);
            
$this->_redirect(SITE);
        }
        
// Como no hemos enviado el post entonces enseñaremos la plantilla de insercion
        
$this->view->titulo "Nueva entrada";
        echo 
$this->view->render('PostAdd.tpl');        
    }
    
    
funciton deleteAction(){
        
$id = (int) $_GET["id"];
        
$where "uid=".$id;
        
$this->postModel->delete($where);
        
$this->redirect("/myBlog");
    }
    
    function 
noAction(){ // cuando no encuentra ruta
        
$this->view->assign("titulo""Peticion no encontrada");
        
$this->view->render("NotFound.tpl");
    }
    
    


La vista no pongo ningun ejemplo ya que pueden ser código variado y al fin y al cabo será xhtml + tags.

Como ves antes de insertar etc. Se hace la validación.

P.D Este código es inventado dista mucho de ser válido (he tomado como ejemplo la filosifia CAKE o Zend Framework)

Última edición por Casuis; 14/12/2006 a las 07:27
  #12 (permalink)  
Antiguo 14/12/2006, 07:37
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Que lujo este foro

Cita:
Iniciado por Felippe Ver Mensaje
Hola Fridureiks,

Me parece que en el fondo tu duda está relacionada con la Estructura que puede tomar tu sistema (tema muy discutido).

(...)

Espero haber sido claro con mi explicación.

Un saludo
Muchas gracias Felippe, creo que das en lo justo y Casuis avanzo un poco mas sobre ello. Vengo viendo Frameworks y veo mucho sobre MVC, pero la verdad no me enteraba bien como se podia armar.... ycomo sigo resistiendome a los frameworks... aca estoy inventando xD. Voy a leer

Cita:
Iniciado por Casuis Ver Mensaje
Por lógica deberia hacerse antes la validación. te pongo un ejemplo claro:

*anotación: voy a utilizar como ejemplo un Model - Vista -Controlador simulado

Imaginate que tengo la siguiente estructura de projecto siguiendo el ejemplo anterior:

Código:
+--Myblog
 |+-- controllers
 |+-- models
 |+-- views
 |- index.php
 |- config.php
 |- .htaccess
(...)

P.D Este código es inventado dista mucho de ser válido (he tomado como ejemplo la filosifia CAKE o Zend Framework)
Casuis, muchisimas gracias. No se cuanto le falta para ser valido a tu codigo, pero la verdad es que me ha quitado muchisimas dudas de tiron, dudas que tenia y dudas que iba a preguntar en breve jeje.

Seguire investigando, estudiando estos ejemplos y practicando, ya volvere a la carga... muchisimas gracias nuevamente.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #13 (permalink)  
Antiguo 18/12/2006, 09:27
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: Crear un ABM

Gracias por los mensajes. Tal como decia GatorV yo ya tenia hecha una grilla pero me esta costando encarar las acciones.Veremos que pasa.Saludos
  #14 (permalink)  
Antiguo 28/12/2006, 22:54
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Vuelvo a la carga.

Empece armando algo sencillito, muy sencillito, pero para luego ir reformandolo a medida que voy tomando carrera en esto de MVC.

En el archivo de configuracion quiero colocar los datos de la BD, pero luego no se cual es la mejor manera de hacer llegar dichos datos hasta la clase modelo, para poder realizar la conexion a la bd. Tengo que pasar los datos por parametro al controlador y que este los pase al modelo cuando crea la instancia? ¿tengo que usar GLOBALS(se me hace que no jeje)?

Es una tontera, pero no se cual es la mejor manera. Vi un ejemplo en phppatterns pero la verdad es que hace las cosas distinto al ejemplo que dio Casuis, y me gusta mas el ejemplo de Casuis que el de phppatterns.

En fin, cualquier aporte me sera de gran ayuda.


Saludos y gracias.

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #15 (permalink)  
Antiguo 29/12/2006, 10:31
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Crear un ABM

Lo mejor será que pongas algo de tu codigo y te podremos decir, el ejemplo que dices está muy bien basado en DAO (direct Access Object) bueno el tema consiste en un Modelo con los metodos básicos insert, update, find....
el problema es que necesita un db es decir una conexion a base de datos, el problema viene cuando tenemos más de un modelo, entonces que pasaría tendríamos n instancias de conexion a base de datos y eso no es bueno. Como se evita??

Puedes construir una clase dataManager que implemente el patron Singleton así te aseguras que tienes solamente una instancia a base de datos. Es decir solo cargará una vez el objeto de connexion

por ejemplo :
Código PHP:

abstract class ActiveRecord{
   
   protected 
$db;

   public function 
__construct(){
      
$this->db dataManager::getInstance();
  }

Tengo un post que te explica mejor esta implementacion.

Por ejemplo yo utilizo el dataManager en uno de los primeros frameworks que hice en php5 te pongo el codigo para que lo veas no hace falta que lo entiendas todo:
Código PHP:
require_once 'External/adodb/adodb-exceptions.inc.php';
require_once 
'External/adodb/adodb.inc.php';
require_once 
'External/yaml/spyc.php';

require_once 
'Db/Exception/dataManagerException.php';



class 
DataManager{
    
    static 
$db;
    
    private function 
__construct(){}
    
    static public function 
getInstance(){
        
$params DataManager::dbParams();
        if(Empty(
$params)){
            throw new 
dataManagerException("El archivo de configuracion no se ha definido");
        }
        
$dsn $params['adapter']."://".$params['username'].":".
               
$params['password']."@".$params['host']."/".$params['dbname']; 

        if(!isset(
self::$db)){
            try {
                
self::$db =  NewADOConnection($dsn);
            } catch (
exception $e) {
                
var_dump($e);
                
adodb_backtrace($e->gettrace());
            }
        }
        return 
self::$db;
    }
    
    static public function 
dbParams(){
        
$name = array("development","test","production");
        
$params Spyc::YAMLLoad(CONFIG.'database.yml');
        
$level $params["application"]["level"];
        if(
in_array($level$name)){
            return 
$params[$level];
        }
        return array();
    }        

}
//final de la classe dataManager 
Mi dataManager le devolvia a la clase abstract Model una unica instancia de adodb utilice adodb pq ya tenia abstaccion de base de datos y asi no la tenia que programar.

Este codigo require_once 'External/yaml/spyc.php'; y $params = Spyc::YAMLLoad(CONFIG.'database.yml');
Es otra libreria para leer ficheros yml. Lo que hace es cargar los datos del fichero database.yml
me gusta este formato porque es más humano que el xml (además también lo utilizo en ruby jeje)
Código PHP:

development
:
  
hostlocalhost
  username
casuis
  password
demo
  dbname
blog
  adapter
mysql
  
#socket: /path/to/your/mysql.sock

test:
  
hostlocalhost
  username

  
password:
  
dbnameblog_test
  adapter
mysql
  
#socket: /path/to/your/mysql.sock

production:
  
hostlocalhost
  username
prod
  password
:
  
dbnameblog_production 
  adapter
mysql  
  
#socket: /path/to/your/mysql.sock

application:
   
leveldevelopment 
Espero que te sirva de ayuda

Última edición por Casuis; 29/12/2006 a las 10:46
  #16 (permalink)  
Antiguo 29/12/2006, 12:43
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Gracias por este codigo Casuis, al igual que los anteriores me los estudiare para comprenderlos. De todas formas creo que ya voy entendiendo como utilizas la clase DataManager y puede que sea la solucion que estaba buscando. En breve posteare mis codigos :D



Muchisimas gracias, otra vez.
Feliz año nuevo!
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #17 (permalink)  
Antiguo 29/12/2006, 22:49
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Crear un ABM

Bueno ya volvi con mas, al final para evitarme un poco (mucho) de codigo opte por usar zend_db, pero no estoy seguro de estar haciendo las cosas del todo bien. Uso la estructura de archivos que dio como ejemplo casuis mas arriba y esto es un poco de lo que he hechohasta ahora.

En el archivo de configuracion coloque:

Código PHP:
<?php
$params 
= array ('host'     => 'localhost',
                 
'username' => 'root',
                 
'password' => '',
                 
'dbname'   => 'mvc');
?>
y el index.php, de momento:

Código PHP:
<?php
require_once 'config.inc.php';

require_once 
'Zend/Db.php';
require_once 
'Zend/Db/Table.php';

require_once 
'models/PostModel.php';

$db Zend_Db::factory('PDO_MYSQL'$params);
Zend_Db_Table::setDefaultAdapter($db);
?>
models/PostModel.php
Código PHP:
<?php
class PostModel extends Zend_Db_Table
{
    protected function 
_setup()
    {
        
$this->_name 'posts';
        
$this->_primary 'id';
        
parent::_setup();
    }
}
?>

De esta forma, para insertar un registro seria:
(solo a modo de ejemplo)
Código PHP:
<?php
$post 
= new PostModel();

$data = array(
    
'titulo' => 'Intento de MVC',
    
'mensaje'  => 'mmm sera para el año que viene me parece.',
);

$id $post->insert($data);
?>

Ahora bien, pasando por alto que falta el controller y demas, esta bien la forma en la que utilizo zend_db con mi "proyecto a futuro" de mvc? Creo que de esta manera no voy a necesitar de la clase DataManager con el singleton.

Me siento como cuando me enseñaron a programar, que cada 2 minutos tenia que ir a preguntar dudas... en este caso, molestar un poco aqui y al google.. .pero bueno, supongo que ire mejorando. Si esto que muestro esta mas o menos bien, solo me faltara luchar un poco con smarty ya que nunca lo use... y el controller, que (mirando lo basico) no lo veo muy complicado.

Nuevamente Gracias.
__________________
Federico.

Mi página: www.jourmoly.com.ar

Última edición por Fridureiks; 29/12/2006 a las 23:09
  #18 (permalink)  
Antiguo 01/01/2007, 15:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Crear un ABM

Creo nos hemos salido un poco del tema, y para ayudar a tico74, te posteo un poco de codigo de como puede "funcionar" tu clase.

Código PHP:
/**
Pensando en una tabla asi:
idCliente - Autonumerico
RazonSocial - Texto
FechaRegistro - Date
FechaModificacion - Date
Calle - Texto
Numero - Numero
Colonia - Texto
CP - Numero
Logo - Texto
**/
$config = array(
       
'server' => "localhost",
       
'username' => "root",
       
'password' => '',
       
'database' => 'test_bd',
);

GeckoDB::setDefaultConfig$config );

$logoFormat = new GeckoCellFormatterPicture();
$logoFormat->setPathgetcwd() . '/uploads/pictures/' );

class 
Clientes extends GeckoModuleManager {
        protected 
$_table 'clientes';
        protected 
$_gridColumns = array(
               
"idCliente",
               
"RazonSocial",
               
"Logo",
        );
        protected 
$_gridColumnFormat = array(
                
"Logo" => $logoFormat,
        );

        protected function 
setUpForm() {
              
$razonSocialField = new GeckoFormFieldText();
              
$razonSocialField->setRequired(true);
              
$razonSocialField->setLength(100);

              
$logoField = new GeckoFormFieldPicture();
              
$logoField->setUploadPathgetcwd() . '/uploads/pictures/' );
              
$logoField->setMaxPictureSize100 1024 ); // 100 kb
              
$logoField->setAllowedPictureTypesGeckoFormFieldPicture::IMG_JPG GeckoFormFieldPicture::IMG_GIF GeckoFormFieldPicture::IMG_PNG );

              
$dateField = new GeckoFormFieldDate();
              
$dateField->setPastEnabled(0); // No pueden seleccionar una fecha               en el "pasado"
              
$dateField->setRequired(true);

              
$cpField = new GeckoFormFieldNumber();
              
$cpField->setLength);

              
$fields = array(
                      
"RazonSocial" => $razonSocialField,
                      
"Logo" => $logoField,
                      
"FechaRegistro" => $fechaField,
                      
"CP" => $cpField,
                      
"Numero" => null// Los pasamos como null para que "dibujen" un campo de texto normal.
                      
"Calle" => null,
                      
"Colonia" => null,
              );

              
$this->setFormFields$fields );
        }

        protected function 
onUpdate$fields ) {
               
$fields['FechaModificacion'] = date"Y-m-d" );
               
               return 
parent::onUpdate($fields);
        }
}

$clientes = new Clientes(); // Construimos una instancia del modulo
echo $clientes// esto llama a __toString() que "dibuja" la salida, ya sea el grid, o un formulario. etc. 

Última edición por GatorV; 01/01/2007 a las 15:33
  #19 (permalink)  
Antiguo 04/01/2007, 11:15
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: Crear un ABM

Gracias Gatorv! No solo por retomar la idea real inicial de este post sino por mostrarme ese ejemplo que ya mismo voy a analizar para tratar de aprender.En estos ultimos dias estuve mirando sobre ORM (o mapeo de datos) y veo que tiene alguna relacion con el tema ABM (o CRUD como dicen los gringos) .Al menos parece que usan el patron Active Record, que de a poco trato de aprender.
Saludos!

Última edición por tico74; 11/01/2007 a las 15:10
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:15.