Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 02-abr-2008, 14:35   #1 (permalink)
destor77 está en el buen camino
 
Avatar de destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 1.059
Enviar un mensaje por MSN a destor77 Enviar un mensaje por Yahoo  a destor77
dudas mvc + POO

buenas estoy intentando mudar un blog modular a mvc y me surgieron algunas dudas

1- Investigando sobre singleton encontre este ejemplo con PDO:

Código PHP:
class DB extends PDO 
    
{
        private static 
$instance null;
     
        public function 
__construct() 
        {
            
$config Config::singleton();
            
parent::__construct('mysql:host=' $config->get('dbhost') . ';dbname=' $config->get('dbname'), 
    
$config->get('dbuser'), $config->get('dbpass'));
        }
     
        public static function 
singleton() 
        {
            if( 
self::$instance == null 
            {
                
self::$instance = new self();
            }
            return 
self::$instance;
        }
    } 
quisiera saber si se puede hacer lo mismo sin usar PDO ni otra libreria de base de datos, o sea como indican los manuales sobre una conexion a mysql simple.

2- Como a mi blog quiero hacerle una administracion esta bien que arme la estructura de los directorios asi:
Código HTML:
htdocs/
           /admin/
                      /vistas/
                     /modelos/
                     /controladores/
          /includes/
          /modelos/
         /vistas/
        /controladores/
       /index.php
3- La platilla va a ser simple un cabecera, el contenido (las noticias), un footer y un siderbar con las categorias y los links. Bien mi idea era crear un modelo para obtener los links y las categorias de la base de datos, mi duda es si en una controlador puedo llamar a varios modelos, es decir que en el controlador noticias llame al modelo noticias para obtner estas y que llame al modelo inicio para poder obtener las categorias y los links para despues poder mostrarlos en la plantilla.

4- Si no estoy equivocado por cada accion que necesite tengo que crear un controlador y/o modelo. Por ejemplo:
para leer/crear/borrar comentarios necesito crear un modelo comentarios para el manejo de la db y un controlador para la acciones leer/crear/borrar, para la noticias lo mismo con su controlador y modelo, para ver las categorias, etc, etc, etc

salu2
destor77 está desconectado   Responder Citando
Antiguo 02-abr-2008, 15:11   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: dudas mvc + POO

1.- Si es posible hacerlo, pero tendrías que implementar toda la lógica para trabajar sobre las funciones de MySQL por decir:
Código PHP:
class DB {
        private 
$connection null;
        private static 
$instance null;
        private function 
__construct() {
                    
$config Config::getInstance();
                    
$this->connection mysql_connect$config->get'db' ), $config->get('user'), $config->get'pass' ) );
        }

        public static function 
getInstance() {
                if( 
self::$instance == null ) {
                          
self::$instance = new self();
                }

                return 
self::$instance;
        }

        public function 
__destruct() {
                 
mysql_close$this->connection );
        }

2.- Si esa estructura te sirve para tu aplicación no veo porque no la debas de usar, no hay una "regla" mas que la separación de capas.

3.- Recuerda que el controlador es la unión de la información, así que no hay ningún problema en llamar a diferentes modelos para tener toda la información lista.

4.- Debes de crear un modelo por cada entidad de datos requieras, y puedes tener un solo controlador, pero es mas limpio si separas cada controlador en su caso especifico de uso.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 02-abr-2008, 16:34   #3 (permalink)
destor77 está en el buen camino
 
Avatar de destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 1.059
Enviar un mensaje por MSN a destor77 Enviar un mensaje por Yahoo  a destor77
Re: dudas mvc + POO

otra duda GatorV, en el index de mi blog uso este codigo:
Código PHP:
//Incluimos el FrontController
    
require 'include/FrontController.php';
    
//Lo iniciamos con su método estático main.
    
FrontController::main(); 
mi duda ahora esta en si en el index.php de la carpeta /admin tengo que usar el mismo codigo o algo distinto?

salu2
destor77 está desconectado   Responder Citando
Antiguo 02-abr-2008, 17:05   #4 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: dudas mvc + POO

Si vas a enrutar de la misma manera en /admin yo creo que si debes de incluir otra vez el FrontController.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 04-abr-2008, 20:17   #5 (permalink)
destor77 está en el buen camino
 
Avatar de destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 1.059
Enviar un mensaje por MSN a destor77 Enviar un mensaje por Yahoo  a destor77
Re: dudas mvc + POO

hola de nuevo, yo aca molestando otra vez, esta vez quiero hacer la siguiente consulta:

arme mi archivo modelo llamado iniciomodelo.php en el cual entre otras cosas contiene estas funciones:
Código PHP:

            $ip 
='202.164.32.81';
            
$fecha date("j del n de Y");
            
$hora date("h:i:s");
            
$segundos time();
            
$can "3600";
            
$resta $segundos-$can;
            
            
//Se genera la consulta a la base de datos, solicitando cualquier registro 3600 segundos 
             //anteriores a los segundos actuales(obtenemos todos los registros una hora atrás).
             
$sql $this->db->prepare("SELECT segundos, IP FROM `contador` WHERE segundos >= ? 
                                         AND IP LIKE ? "
);
             
$sql->execute(array($resta$IP));
             
            
// Creamos el condicionamiento de loguear o no la entrada, 
            // dependiendo si el numero de registros es o no mayor a cero.
            
if ($sql->rowcount()>0){
                
//no se cuenta la visita
            
}
            else{
                
$sql $this->db->prepare("INSERT INTO `contador` (id, IP, fecha, hora, segundos)
                                          VALUES ('','?','?','?')"
);
                
$sql->execute(array($IP,$fecha,$hora,$segundos));
            }
            
            
// Contamos los registros que tenemos en la tabla y se los asignamos
            // a la variable $visitas que es la que después visualizaremos en pantalla.
            
$visitas $this->db->prepare("select * from contador where id");
            
$visitas->execute();
            
$visitas->rowcount();
            return 
$visitas;
        }
        
        
/**
         * @name : get_visitante().
         * @return : Devuelve la ip y el pais desde donde nos visitan.
         */
        
        
public function get_visitante(){
                    
            
//obtengo la ip del visitante
            //$ip =$_SERVER["REMOTE_ADDR"];
            
$ip ='202.164.32.81';
            
            
//busco la ip en la base de datos.
            
$ip_country $this->db->prepare("SELECT country_code2,country_name FROM paises 
                                               WHERE IP_FROM<=inet_aton('?')
                                                AND IP_TO>=inet_aton('?') "
);
            
$ip_country->execute(array($ip,$ip));
            
            
//extraigo los datos
            
$nombre$ip_country->fetch();
            
            
//armo el resultado a mostrar.
            
$visitante="tu ip es: <b>".$ip."</b> - <B> - Pais: </B>".ucfirst(strtolower($nombre['country_name']))."
                         <img src='images/flag/"
.ucfirst(strtolower($nombre['country_name'])).".gif'  height='20' width='20' border='0'>";
            return 
$visitante;
        }
        
        
/**
         * @name : set_referencia().
         * @return : guarda las referencias en la base de datos.
         */
        
public function set_referencia(){
            
            
//obtengo la ip
            //$ip =$_SERVER["REMOTE_ADDR"];
            
$ip ='202.164.32.81';
            
            
//busco la ip en la base de datos.
            
$ip_country $this->db->prepare("SELECT country_code2,country_name FROM paises 
                                               WHERE IP_FROM<=inet_aton('?')
                                                AND IP_TO>=inet_aton('?') "
);
            
$ip_country->execute(array($ip,$ip));
            
            
//extraigo los datos
            
$nombre$ip_country->fetch();
            
            
//seteo la fecha
            
$fecha=date("l j F, Y, H:i");
            
            
//seteo la referencia
            
$dom=getenv("HTTP_REFERER");
            
            
//controlo la ip y guardo los datos
            
if (($ip!='200.43.135.145') ){
                
$sql$this->db->prepare("INSERT INTO referencias (`id_ref`, `ip`, `dominio`, `pais`,`fecha`) VALUES (NULL,'$ip','$dom','$nombre[country_name]','$fecha')");
                
$sql->execute();
            }
        } 
despues en mi controlador uso esto:
Código PHP:
class IndexController extends ControllerBase {
        
        
/**
         * @name : Index().
         * @return : Devuelve los datos para mostrar en la pagina principal del blog.
         * @access : public.
         */
        
public function index()
        {
            
            
//llamo a los modelos
            
require('modelo/InicioModelo.php');
            
            
//creo una instancia del modelo
            
$inicio= new InicioModel();
            
            
//pido al modelo todas las secciones
            
$visitantes=$inicio->get_visitante();
            
$visitas=$inicio->get_visitas();
            
$categorias=$inicio->get_cetegorias();
            
$referencias=$inicio->set_referencia();
            
$links=$inicio->get_links();
            
$post=$inicio->get_noticias();
            
            
//preparo los datos para la vista
            
$data['visitantes']=$visitantes;
            
$data['visitas']=$visitas;
            
$data['categorias']=$categorias;
            
$data['links']=$links;
            
$data['referencias']=$referencias;
            
$data['post']=$post;
            
            
//presento nuestra plantilla
            
$this->view->show("index.php"$data);
        }
        
    } 
y por ultimo en la vista pongo asi:
Código PHP:
<div  id="menu">
            <ul>
                <li id="current"><a href="index.html">Inicio</a></li>
                <li><a href="index.html">Archivo</a></li>
                <li class="last"><a href="index.html">About</a></li>        
                <li class="last">Sos el visitante nº: <?php //echo $visitas;?></li>
                <li class="last"><?php echo $visitante;?></li>
            </ul>
            <?php
                
//armo la referencias
                
$referencias
            ?>
        </div>
Bien el problema que estoy teniendo es que no me muestra el contador ($visitas) ni el origen de la visita($visitantes) y no me guarda la referencia ($refencias) en que me estoy equivocando?

Desde ya muchas gracias
destor77 está desconectado   Responder Citando
Antiguo 04-abr-2008, 23:47   #6 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: dudas mvc + POO

Prueba, antes de llamar a tu vista, hacer un var_dump( $data ); para ver si el problema esta en el paso de las variables del controlador a la vista, o tu problema esta en otro lado.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 3,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:29.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93