Quantcast
Viewing all articles
Browse latest Browse all 11602

[G] Crear un cms Panel para nuestra web

Buenas a todos, estoy desarrollando un panel de administración para web's(Backend o como gusten llamarlo). Esta sujeto a criticas constructivas o no, todo dato que aporten será bienvenido.

La idea original es crear un panel de administración con el cual podamos manejar nuestra web, es decir, editar articulos, crear articulos, crear categorias y subcategorias, subir contenido Y LO MÁS IMPORTANTE: "Que el diseño de la web a vistas de los usuarios visitantes sea basandose en una estructura o elementos marcados para llevar un diseño estandar"

El proyecto lo estoy realizando en:
SERVIDOR: PHP 4 o superior + MySQL
CLIENTE: HTML5+CSS3+JS(ajax,jquery).

Lo primero que realize fue analizar las necesidades y generar las tablas de la base de datos.
Empece por la base de datos, por que como he comentado en más de una ocación siempre la casa se empieza a construir por los simientos, y en el desarrollo de software similares a este los simientos son la Base de Datos

Tras estar pensando deduje que las tablas serán las siguientes:

Image may be NSFW.
Clik here to view.


Descripcion de cada tabla:

Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Image may be NSFW.
Clik here to view.


Tabla Configuración. Se me olvido cambiar el nombre en la cabecera de la tabla xls
Image may be NSFW.
Clik here to view.



Despues de tanto pensarme que estructura de ficheros utilizar para la web y ver muchas estructuras de ficheros navegando, se me ocurrió hacerlo a la vieja usansa.

Image may be NSFW.
Clik here to view.



Despues de tanta lógica y organización empiezo a mirar código.
Para empezar se me ocurre mirar como conectarme a la base de datos, para ello tengo la siguiente clase que tendría que cambiar ciertos metodos o nombres de metodos y mejorar la gestion de errores.
Donde esta clase sería el fichero:
Cita:

/panel/lib/conexion.php
Código:

<?php
/*
        Created by cuban 22/01/2013 ver: 0.1b
        Modo de uso:
$consulta2 = $cn->Mostrar_Consulta("campo1,campo2,campo3","nombre_tabla","campo1=:campo1",array(":campo1"=>"hit's"));
//Retorna un tipo integer
$consulta2 = $cn->Mostrar_Consulta("*","nombre_tabla","campo1=:campo1",array(":campo1"=>"hit's"));
//Retorna un array asociativo, si existe un error retorna null
$consulta2 = $cn->Mostrar_Consulta("*","nombre_tabla",null,null);
//Retorna un array asociativo, si existe un error retorna null
$cn->get_error();//Para ver el error
//Actualizar un campo
$cn->Actualizar_Campos($tabla,$campos,$camposASOC,$values,$where,$WhereValues) {
$cn->Actualizar_Campos("Nombre_Tabla","campo1,campo2,campo3",":campo1,:campo2,:campo3","valorcampo1,valorc2,vc3","campo1=:campo1",array(":campo1"=>"hit's"))
$cn->Actualizar_Campos("Nombre_Tabla","campo1,campo2,campo3",":campo1,:campo2,:campo3","valorcampo1,valorc2,vc3",null,null)
//Eliminar registros
$cn->Elminar_Registros("Nomre_Tabla","campo1=:campo1",array(':campo1'=>"hit's"))
$cn->Elminar_Registros("Nomre_Tabla",null,null)       
*/
$cn = new db("localhost",3306,"admin_caybeach","root","5432");
$consulta1 = $cn->num_rows("SELECT * FROM cms_idiomas");
$consulta2 = $cn->Mostrar_Consulta("*","cms_idiomas","id=:id",array(':id'=>"es"));

print_r($consulta2);
class db {
        public $errores=array();
    protected $connection = null;
    public function __construct($hostname,$port,$dbname,$username,$password) {
                #Creando la conexión
        try {
            # Estableciendo la conexión con MySQL mediante PDO
            $this->connection = new PDO("mysql:dbname=$dbname;host=$hostname;port=$port", $username, $password);
            $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            $this->connection = null;
                        $error=array('date("Y-m-d H:i:s")'=>"".$e->getMessage());
                        $this->errores = array_merge($error, $this->errores);
            die($e->getMessage());
        }
    }
   
    public function num_rows($query) {
                #Obtener el numero de filas en la consulta.
        # Preparando para ejecutar la consulta.
                try {
                        $stmt = $this->connection->prepare($query);
                        $stmt->execute();
                        return $stmt->rowCount();# Retornando el nº de filas
                        }
                } catch (PDOException $e) {
                        $error=array('date("Y-m-d H:i:s")'=>"".$e->getMessage());
                        $this->errores = array_merge($error, $this->errores);
                        return -1;
                }
    }
        public function Insertar($campos,$camposASOC$tabla,$where,$values) {
                # Mostrar datos de una tabla.
                try {
                        #Preparando la consulta
                        $stmt = $this->connection->prepare("INSERT into $tabla ($campos) VALUES($camposASOC)");
                        $stmt->execute($values);
                        return true;
                } catch (PDOException $e) {
                        $error=array('date("Y-m-d H:i:s")'=>"".$e->getMessage());
                        $this->errores = array_merge($error, $this->errores);
                        return false;
                }
        }
        public function Mostrar_Consulta($campos,$tabla,$where,$values) {
                # Mostrar datos de una tabla.
                try {
                        if ($where==null) {#El $where tendrá valor null si no se se requiere
                                #Preparando la consulta
                                $stmt = $this->connection->prepare("SELECT $campos FROM $tabla");
                                $stmt->execute();
                        } else {
                                $stmt = $this->connection->prepare("SELECT $campos FROM $tabla WHERE $where");
                                $stmt->execute($values);
                        }
                        return $stmt->fetchAll(PDO::FETCH_ASSOC);
                } catch (PDOException $e) {
                        $error=array('date("Y-m-d H:i:s")'=>"".$e->getMessage());
                        $this->errores = array_merge($error, $this->errores);
                        return null;
                }
        }
        public function Actualizar_Campos($tabla,$campos,$where,$values) {
                try {
                        if ($where==null) {#El $where tendrá valor null si no se se requiere
                                $stmt = $this->connection->prepare("UPDATE $tabla SET $campos ");
                                $stmt->execute();
                        } else {
                                $stmt = $this->connection->prepare("UPDATE $tabla SET $campos WHERE $where");
                                $stmt->execute($values);
                        }
                        return true;
                } catch (PDOException $e) {
                        $error=array('date("Y-m-d H:i:s")'=>"".$e->getMessage());
                        $this->errores = array_merge($error, $this->errores);
                        return false;
                }
        }
        public function Elminar_Registros($tabla,$where,$values) {
                try {
                        if ($where==null) {#El $where tendrá valor null si no se se requiere
                                $stmt = $this->connection->prepare("DELETE FROM $tabla");
                                $stmt->execute();
                        } else {
                                $stmt = $this->connection->prepare("DELETE FROM $tabla WHERE $where");
                                $stmt->execute($values);
                        }
                        return true;
                } catch (PDOException $e) {
                        $error=array('date("Y-m-d H:i:s")'=>"".$e->getMessage());
                        $this->errores = array_merge($error, $this->errores);
                        return false;
                }
        }
    # Mostrando Error. Display error
    public function get_error() {
        $this->connection->errorInfo();
    }
        public function getError($var) {
                if ($var=='log') {
                        return $this->error;
                } else {
                        return end($this->error);
                }
        }
    # Cerrando la conexión con la base de edatos. Closes the database connection when object is destroyed.
    public function __destruct() {
        $this->connection = null;
    }
}
?>

El fichero funciones_standar.php contendrá todas las funciones comunes que podrán ser utilizada en toda la web. Como la obtencion de todos los articulos, obtener las categorias y subcategorias.
Cita:

/panel/lib/funciones_standar.php
La carpeta idiomas contendrá un fichero .php por cada idioma en que se de soporte al panel de administración con una estructura similar a la siguiente:
Cita:

/panel/idiomas/¿?
espanol.php
Código:

<?php
define ('BIENVENIDO','Buenas usuario: &usuario')
?>

ingles.php
Código:

<?php
define ('BIENVENIDO','Welcome user: &usuario')
?>

En resumen sería la traduccion para cada idioma soportado para mostrar cada mensaje o accion a realizar en el panel de administración.

Pd: a medida que vaya avansando ire actualizando el post. Si tienen alguna sugerencia o corrección a cualquier cosa que realice podrían indicarlo en el hilo del tema y será añadido al cms_Admin open source

Viewing all articles
Browse latest Browse all 11602

Trending Articles