Motor sencillo para el manejo Modulos

Después de un tiempo de estar desarrollando páginas web se dan uno cuenta que mucho trabajo acaba siendo repetido varias veces, consumiendo tiempo que podría usarse para otra cosa, mucho de este tiempo es para utilizar el mismo diseño en una y otra pagina únicamente cambiando el tema de este, es por eso que muchos programadores adoptaron el sistema modular, el cual únicamente se programa un sencillo motor el cual conforme a la configuración del motor puede cargar uno u otro diseño a un mismo modulo, siendo esto una ayuda bastante en caso de sitios con muchas secciones o con muchas páginas que la mayoría si no es que todas comparten el mismo diseño, ahora a esto le sumamos el momento en el que queremos actualizar nuestro diseño de todo el sitio la tarea se hace realmente tediosa y a la vez costosa (en el caso de que sea actualizar el sitio a un cliente por ejemplo), pero con este sistema modular nos ayuda a mantener nuestro código limpio y sobre todo una facilidad para cambiar el diseño de todo el sitio o, como en algunos casos reales, cambiar el diseño a solo una parte del sitio.

Tomando como ejemplo lo anterior comentado vamos a diseñar un pequeño sistema modular, sin embargo hay que tener en cuenta en todo momento que esto es únicamente como aprendizaje, el diseño que se presentara a continuación carece de seguridad, sin embargo, la plataforma que diseñaremos es muy estable y con gran potencial, pero, sin ser complicado el programar y mucho menos el mantener, así que si estás dispuesto a utilizar este motor en futuros proyectos asegúrate de
proteger aun más el sistema.

Este sistema consta de 2 archivos básicos mas aparte, sus template o diseños, y sus respectivos módulos, el primero y más importante es el motor que manejará todo el sistema de módulos y template, el segundo será el archivo de configuración de los módulos en si, el cual indicara los módulos existentes, así como sus respectivos diseños.

Comencemos con el motor, creamos un archivo nuevo y lo llamaremos index.php

Primero les mostrare el código completo y posteriormente lo detallare.

<?php
require(‘conf_modulos.php’);
If (isset($_GET[“modulo”])) {
$modulo=$_GET[“modulo”];
}else {
$modulo=’index’;
}
If (empty($conf_modulo[$modulo][“archivo])) {
$modulo=’index’;
}
If (empty($conf_modulo[$modulo][“template”])) {
$conf_modulo[$modulo][“template”] = ‘template.php’;
}
If (empty($conf_modulo[$modulo][“css”])) {
$conf_modulo[$modulo][“css”] = ‘na’;
}
If (empty($conf_modulo[$modulo][“js”])) {
$conf_modulo[$modulo][“js”] = ‘na’;
}
require(‘conexión.inc.php’);
$path_archivo = ‘modulos/’.$conf_modulo[$modulo][“archivo”];
$path_template = ‘template/’.$conf_modulo[$modulo[“template”];
If (file_exists($path_template)) {
require($path_template);
}else {
echo ‘No se pudo cargar el template de este modulo.’;
}
?>

Ahora comencemos a desentrañar el código:

Primero comenzamos incluyendo el archivo que configurará los modulos con su respectivo diseño
require(‘conf_modulos.php’);

Ahora verificamos que exista la variable GET modulo el cual indicara el modulo a cargar, cabe destacar que en este punto utilizaremos un denominador, mas no el nombre del archivo del modulo, por ejemplo, para el contacto el denominador seria contacto, pero el nombre del archivo puede ser modulo_contacto.php, obviamente el modulo debe de estar en otra carpeta el cual evitara que un usuario mal intencionado intente acceder a este sin pasar por el index.php, esto es imprescindible porque si no tendremos un serio problema de seguridad. Ahora, si la variable GET modulo no existe se cargara el modulo de inicio o index, en este caso será index, pero también puede ser inicio, home, etc; todo depende de su ingenio.

if (isset($_GET[“modulo”])) {
$modulo=$_GET[“modulo”];
}else {
$modulo=’index’;
}

Ahora verificamos si el modulo indicado existe en el archivo de configuración, ya que si este esta en el archivo de configuración indica que esta disponible para cargar el modulo, esto es indispensable ya que sin esto podría un usuario mal intencionado utilizar nuestro propio motor modular para acceder a archivos del sistema, por ejemplo login, conexión, etc; el cual obviamente no queremos que tengan acceso más que a los archivos indicados en el archivo conf_modulos.php

if (empty($conf_modulo[$modulo][“archivo”])) {
$modulo = ‘index’;
}

Ahora verificamos si el modulo indicado tiene un diseño asociado, en caso de no tenerlo cargamos el diseño por defecto.

if (empty($conf_modulo[$modulo][“template”])) {
$conf_modulo[$modulo][“template”] = ‘template01.php’;
}

Esto es opcional, pero puede ser algo necesario en caso de que el contenido del modulo necesite un archivo css, al ser modular no podremos agregar directamente el archivo css al template, de hecho podríamos, pero entonces en ese caso no tendría objeto utilizar este sistema, ya que se supone que lo que queremos hacer es aumentar el rendimiento asi como su usabilidad y fácil manipulación de código y diseño.

if (empty($conf_modulo[$modulo][“css”])) {
$conf_modulo[$modulo][“css”] = ‘na’;
}

Al igual que el ejemplo anterior, este se utilizará para cargar archivos js externos al template original que, sin embargo el modulo requiere para su funcionamiento.

if (empty($conf_modulo[$modulo][“js”])) {
$conf_modulo[$modulo][“js”] = ‘na’;
}

Ahora creamos las direcciones de los archivos a cargar, tanto del modulo como del template

$path_archivo = ‘modulos/’.$conf_modulo[$modulo][“archivo”];
$path_template = ‘template/’.$conf_modulo[$modulo][“template”];

Ahora incluimos el template que este a su vez cargara el modulo.

if (file_exists($path_archivo)) {
require($path_archivo);
}else {
echo ‘No se pudo cargar el template de este modulo.’;

}

Ahora constuimos el archivo de configuración de los módulos

<?php
$conf_modulo[“index”] = array(
“archivo” => “inicio.php”,
“template” => “template01.php”,
“titulo” => “Titulo que mostrará este modulo”,
“css” => “”,
“js” => “”
);

$conf_modulo[“contacto”] = array(
“archivo” => “contacto.php”,
“titulo” => “Titulo que mostrará este modulo”,
“css” => “”,
“js” => “”
);
?>

Como pueden observar la configuración de cada modulo es muy sencillo.

Primero indicamos el archivo a cargar, en este caso el modulo mismo

“archivo” => “inicio.php”

Ahora indicamos el template a cargar, esta es opcional, si recuerdan en el motor modular verificamos si se indico un template, si no, se cargara el template por defecto.

“template” => “template01.php”

Ahora indicamos el titulo que mostrará la ventana al cargar el modulo, esto es necesario para identificar el modulo de los demás, aparte anqué usted no lo crean, funciona para que los buscadores identifiquen la pagina y la tomen como diferente a los demás módulos o archivos que pueda a ver.

“titulo” => “Titulo que mostrará este modulo”

Ahora indicamos si el modulo necesita cargar un archivo css extra, en caso de no ser necesario incluso pueden no indicarlo en la configuración del modulo

“css” => “”

Al igual que el anterior, este sirve para indicar si se cargará un archivo extra de js

“js” => “”

Ahora programamos el template ya que los módulos no necesitan nada especial, únicamente el contenido que quieran mostrar, obviamente este es un ejemplo de cómo diseñar su template, y que este funcione con el motor modular

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $conf_titulo_general. ' - ' .$template_titulo; ?></title>
<link href="css/template01.css" rel="stylesheet" type="text/css" />
<?php
if ($template_css != 'na') {
echo '<script language="javascript" type="text/javascript" src="js/jquery_con.js"></script>\n';
}
?>
<script language="javascript" type="text/javascript" src="js/jquery_con.js"></script>
<?php
if ($template_js != 'na') {
echo '<script language="javascript" type="text/javascript" src="js/jquery_con.js"></script>\n';
}
?>
</head>
<body>
<div id="div_base">
<div id="div_cabecera"><h1><?php echo $conf_titulo_general; ?></h1></div>
<div id="div_menu"><?php include('conf/menu.php'); ?></div>
<div id="div_cuerpo">
<?php
if (!isset($modulo)) {
echo '<p>No se ah definido la variable <strong>$modulo</strong>';
}else {
if (file_exists($path_modulo)) {
require($path_modulo);
}else {
echo '<h2>Error!!!</h2>
<p>No se puede cargar el modulo indicado.</p>';
}
}
?>
</div>
<div id="div_piepag">
<p>Todos los derechos reservados.</p>
<p><?php echo $conf_titulo_general.'. '.$conf_fecha.' - '.date('Y'); ?></p>
</div>
</div>
</body>
</html>

Ahora como verán el diseño es muy sencillo, consta de una cabecera, un menú, un cuerpo y un pie de página, sin embargo cabe destacar varias cosas en el código anterior
La primera es que validamos en el titulo indicamos el titulo indicado en la configuración del modulo, esto es para distiguir de un modulo a otro si el usuario desear ir mas atrás de la última sección visitada, posteriormente según se estipula en el archivo de configuración del modulo se cargará un archivo css o js extra y por último, y lo más importante, ya que junto con el motor modular esto es lo que hace funcionar todo
Primero verificamos si la variable $modulo se ah definido y si tiene algún contenido, si esta se ah definido proseguimos a verificar que el modulo a cargar exista, si este existe se carga, si no se imprime un error dentro del template


if (!isset($modulo)) {
echo 'No se ah definido la variable $modulo';
}else {
if (file_exists($path_modulo)) {
require($path_modulo);
}else {
echo '

Error!!!

No se puede cargar el modulo indicado.’;
}
}

Y bueno, así es como funciona un sistema modular con opciones en template que es fácil de programar y fácil de mantener, así como modificar.

3 comentarios to “Motor sencillo para el manejo Modulos”

  1. Ali Says:

    wao tremendo articulo se lo voy a referir a mis amigos, estoy haciendo algo muy parecido a este codigo y lo voy a probar, cualquier progreso te lo mando para uqe opines

  2. jorge Says:

    amigo me parece exelente tu explicacion solo que tengo unas preguntas.
    1- en el archivo index.php para que es esto: require(‘conexión.inc.php’)

    2.- a la hora de cargar el modulo, en el template me sale “No se puede cargar el modulo indicado” y tampoco me aparece el titulo, que puede ser?

  3. LordNemutagk Says:

    Que tal jorge, mira, he aqui tus respuestas
    1.- esto indica que puedes agregar en ese lugar tu conexion a base de datos (si esta es necesaria en tu proyecto)

    2.- el error indica que la direccion (url) del modulo no existe o al menos no lo encuentra, esto puede ser por 2 cosas, una, estas apuntando mal la direccion del modulo (‘$path_archivo = ‘modulos/’.$conf_modulo[$modulo][“archivo”];’) o tambien depende en que so esta corriendo tu aplicacion, si es en linux tienes que tener encuenta el nombre de tu archivo no es igual Modulo.php a modulo.php ta vez es igual, pero el hecho de que la primera letra sea mayuscula lo hace diferente, enc uanto a que no sale el titulo es por un error en el template, para solucionarlo cambia lo siguiente:


    echo $conf_titulo_general. ‘ - ‘ .$template_titulo;

    por


    echo $conf_titulo_general. ‘ - ‘ .$conf_modulo[$modulo]['titulo'];

    con eso deberia de funcionar, si aun asi no te funciona publica el codigo que estas usando


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: