Saludos esta vez traemos un sistema de comentarios con panel de administración, que nos servirá para autorizar y revisar cada comentario que se haya publicado en el sitio.
A su vez para poder publicar un comentario el usuario deberá registrarse a una base de datos , para asi tener un control de quién comenta.
Este sistema de sesión consta de autentificación vía email.
En una publicación anterior esta no usaba un inicio de sesión y su demostración estaba obsoleta, pero esto a sido mejorado.
La estructura para el sistema es el siguiente:
Para no hacer este post muy largo, vamos a ver los archivos mas importantes, ya que en la descarga y la demostración se podrá verificar su funcionamiento.
Empecemos.
Crearemos 3 tablas para este procedimiento :
Tabla : panel_mvc_admin_comentarios
CREATE TABLE `panel_mvc_admin_comentarios` ( `id` bigint(10) NOT NULL AUTO_INCREMENT, `parent` bigint(10) NOT NULL, `user` bigint(10) NOT NULL, `fecha` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `comentario` text COLLATE utf8mb4_spanish2_ci NOT NULL, `fecha_actu` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `estado` varchar(1) COLLATE utf8mb4_spanish2_ci NOT NULL DEFAULT 's', `love` bigint(10) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci; ALTER TABLE `panel_mvc_admin_comentarios` ADD PRIMARY KEY (`id`);
Tabla : panel_mvc_admin_rangos
CREATE TABLE `panel_mvc_admin_rangos` ( `id_rango` int(10) NOT NULL AUTO_INCREMENT, `parent_rango` int(10) NOT NULL, `nombre_rango` varchar(50) COLLATE utf8mb4_spanish2_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci; INSERT INTO `panel_mvc_admin_rangos` (`id_rango`, `parent_rango`, `nombre_rango`) VALUES (1, 1, 'Usuario'), (2, 2, 'Moderador'), (3, 3, 'Administrador'), (4, 0, 'Baneado'); ALTER TABLE `panel_mvc_admin_rangos` ADD PRIMARY KEY (`id_rango`);
Tabla : panel_mvc_admin_usuarios
CREATE TABLE `panel_mvc_admin_usuarios` ( `id_user` bigint(10) NOT NULL AUTO_INCREMENT, `nombre_user` varchar(150) COLLATE utf8mb4_spanish2_ci NOT NULL, `email_user` varchar(150) COLLATE utf8mb4_spanish2_ci NOT NULL, `pass_user` varchar(100) COLLATE utf8mb4_spanish2_ci NOT NULL, `img_user` varchar(100) COLLATE utf8mb4_spanish2_ci NOT NULL DEFAULT 'user.png', `estado_user` varchar(1) COLLATE utf8mb4_spanish2_ci NOT NULL DEFAULT 'p', `rango_user` int(1) NOT NULL DEFAULT '3', `ip_user` varchar(15) COLLATE utf8mb4_spanish2_ci NOT NULL, `fecha_ing` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `cod_ver` varchar(100) COLLATE utf8mb4_spanish2_ci DEFAULT NULL, `key_pass` varchar(50) COLLATE utf8mb4_spanish2_ci DEFAULT NULL, `new_pass` varchar(100) COLLATE utf8mb4_spanish2_ci DEFAULT NULL, `act_usuario` datetime DEFAULT '0000-00-00 00:00:00', `ult_conexion` int(50) NOT NULL, `notif` int(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci; ALTER TABLE `panel_mvc_admin_usuarios` ADD PRIMARY KEY (`id_user`);
Controladores :
Son los encargados de interactuar con los modelos y las vistas.No hay mucho que decir de ellos.
Helpers:
Son archivos que nos ayudarán a realizar acciones en nuestro sitio ejemplo:
EmailLogin.php
EmailRegistro.php
SendMailComment.php
Estos archivos obtienen datos de los modelos y a su vez crean una vista HTML para el usuario final.
Model o Modelos:
Conexion.php
: Creará una conexión con la base de datos aquí no se encuentra la configuración asi que dejemolos así como está.
Usuarios.php
: Tiene funciones especiales para obtener o registrar datos de la tabla panel_mvc_admin_usuarios
//Registra un usuario a la base de datos public function RegistrarUsuario($datos){ $query = $this->db_connect()->prepare("INSERT INTO $this->tabla (nombre_user, email_user, pass_user, ip_user, fecha_ing, cod_ver, act_usuario, ult_conexion) VALUES (:nombreuser, :emailuser, :passuser, :ipuser, :fechaing, :codver, :actusuario, :ultconexion)"); $query->bindvalue(':nombreuser', $datos['nombre'], PDO::PARAM_STR); $query->bindvalue(':emailuser', $datos['email'], PDO::PARAM_STR); $query->bindvalue(':passuser', $datos['clave_crypt'], PDO::PARAM_STR); $query->bindvalue(':ipuser', $datos['ip_user'], PDO::PARAM_STR); $query->bindvalue(':fechaing', $datos['curr_timestamp'], PDO::PARAM_STR); $query->bindvalue(':codver', $datos['keyreg'], PDO::PARAM_STR); $query->bindvalue(':actusuario', $datos['curr_timestamp'], PDO::PARAM_STR); $query->bindvalue(':ultconexion', $datos['time'], PDO::PARAM_INT); if($query->execute()){ true; }else{ echo 'Hubo un error al registrar usuario contacte con el administrador.'; } } //Obtenemos todos los registros de la Tabla en orden descendente. public function AllUsers(){ $query = $this->db_connect()->prepare("SELECT * FROM $this->tabla ORDER BY id_user DESC;"); $query->execute(); $Allusers = $query->fetchAll(PDO::FETCH_OBJ); return $Allusers; }
Comentarios.php
: Aquí tenemos funciones para hacer llamadas a la tabla.
//Con esta función chequeamos a los usuarios donde los estados sean igual a s (publicados) public function CheckComment() { $comments=array(); $sql_comment = $this->db_connect()->query("SELECT * FROM $this->tabla WHERE estado = 's' ORDER BY id ASC"); while($row = $sql_comment->fetch(PDO::FETCH_ASSOC)){ if($row['parent']==0) $comments[$row['id']] = $row; else { if(!$comments[$row['parent']]) continue; $comments[$row['parent']]['resp'][] = $row; } } $sql_comment->closeCursor(); return $comments; }
Carpeta Public :
Aquí encontraremos archivos de ayuda ejemplo:
ajax/bin/login.php
ajax/bin/new_comment.php
ajax/bin/registro.php
public/setup.php
Estos archivos contienen funciones y métodos de ingresos que sirven de ayuda a los modelos.
Carpeta Vendor :
Esta carpeta a sido descargada vía composer para usar phpmailer, no olvidemos configurar mas adelante los datos
de envío y recepción de emails.
Carpeta View :
Aquí se encuentra las vista que se genera al usuario para que interactúe con el controlador y este a su vez con las tablas.
index.php
: Esta obtiene una función importante, ejemplo de cómo mostrar los comentarios mediante un foreach.
<?php //$CheckComment creamos esta instancia para usarla y pasarsela a $c foreach($CheckComment as $c){ // a su vez showComment es una función creada en setup.php y le pasamos los parámetros // de $c showComment($c); } ?>
al final del index encontraremos funciones de javascript que nos servirá para crear un nuevo comentario
vía ajax. Vease su funcionamiento en la demostración.
En el directorio principal tenemos :
index.php :
Aquí cargaremos la página principal del sitio con sus respectivos controladores.
Cargamos los controladores y estos a su vez las vistas if(isset($_GET['view'])) { if(file_exists( ROOT_PATH . 'controller/' . strtolower($_GET['view']) .'.'.$ext )) { include( ROOT_PATH . 'controller/' . strtolower($_GET['view']) .'.'.$ext ); } else { //si no encuentra el controlador nos muestra una pagina de error include( ROOT_PATH.'controller/404.'.$ext ); } } else { //nos muestra el index si no se carga ningun controlador include( ROOT_PATH.'controller/index.'.$ext ); }
config.php :
Aquí cargaremos archivos de configuración del sitio, no olvidar configurar phpmailer para poder registrar usuarios (recibir notificaciones de respuestas e inicios de sesión).
/** El nombre de tu base de datos */ define( 'DB_NAME', 'database' ); /** Tu nombre de usuario de MySQL */ define( 'DB_USER', 'root' ); /** Tu contraseña de MySQL */ define( 'DB_PASS', '' ); /** Host de MySQL (es muy probable que no necesites cambiarlo) */ define( 'DB_HOST', 'localhost' ); /** Codificación de caracteres para la base de datos. */ define( 'DB_CHARSET', 'utf8mb4' ); #Config PHPMailer define( 'PHPMAILER_HOST', 'mail.dominio.com' ); define( 'PHPMAILER_USER', 'contacto@dominio.com' ); define( 'PHPMAILER_PASS', 'password' ); define( 'PHPMAILER_PORT', 465 );
Espero que este sistema de comentarios con panel de administración les sirva en algún proyecto gracias hasta la próxima.