Cargando



Aprende a crear tu propio CMS y no morir en el intento

Completo manual para aprender a realizar tu propio CMS de calidad y bien implementado desde la bbdd y todos sus puntos vitales.


may 30 2016 11:28
Profesional

Creando nuestro sitio público


Antes de empezar a visualizar la información vamos a crear dos archivos importantes. El núcleo principal de nuestros sitio que lo llamaremos core.php que se guarda en el directorio de setting, y un archivo llamado snippets.php que se guarda en public/lib/
core.php
<?php
  require_once( 'config.php');
  require_once( 'mysql.php');
  require_once( '../public/lib/snippets.php');

  function info_web(){
    $mysql = new Mysql();
    $sql = <<<SQL
    SELECT * FROM configuracion LIMIT 1
SQL;
    $res = $mysql->search($sql);
   
    while( is_array($res[0]) &&  list($key,$value) = each($res[0]) ){
	  $name_var = Config::PREFIX.$key;
	  $GLOBALS[$name_var] = $value;
    }
  }
  function posts($category = ''){
   
    $where = (strlen($category) > 0 ) ? "AND categoria = '$category' " : "";
    $mysql = new Mysql();
    $sql = <<<SQL
    SELECT * FROM contenidos WHERE tipo = 'POST' $where
SQL;
   
    $res = $mysql->search($sql);
    return $res;
  }
  function page(){
   
    $uri = substr($_SERVER['REQUEST_URI'], 1);
    $uri = str_replace(Config::PATH_ROOT, "", $uri);
   
    $mysql = new Mysql();
    $sql = <<<SQL
    SELECT * FROM contenidos WHERE alias = '$uri' LIMIT 1
SQL;
    $res = $mysql->search($sql);
    while( is_array($res[0]) &&  list($key,$value) = each($res[0]) ){
	  $name_var = Config::PREFIX_PAGE.$key;
	  if($key == 'contenido'){
	    $value = analizadorContenido( urldecode($value) );
	  }
	  $GLOBALS[$name_var] = $value;
    }
   
  }

  function analizadorContenido($contenido){
    $pattern = '/\[[a-z_]+[a-z0-9_]*((:{1}[a-z0-9_\-\s]+)+(,{1}[a-z0-9_\-\s]+)*)*\]/i';
    preg_match_all($pattern, $contenido, $coincidencias, PREG_OFFSET_CAPTURE);
    foreach($coincidencias[0] as $arr ){
	 
	  $function = $arr[0];
	  $lenght_function = strlen($function);
	  $pos_string = strpos($contenido, $function);
	  $result_function = ejecutarFuncion($function);
	 
	  $contenido = substr_replace($contenido, $result_function, $pos_string, $lenght_function ); //Pegar resultado de la funcion en el HTML
    }
   
    return $contenido;
  }

  function ejecutarFuncion($function_string){
    $function =  extraerCadena($function_string, "[", "]");
	 
    $arr_ftn = explode(":", $function);
    $function_name = $arr_ftn[0];
    $params = explode(",", $arr_ftn[1]);
   
    $result_function = (function_exists($function_name)) ? call_user_func_array($function_name, $params) : $function_string;
   
    return $result_function;
  }
  function  extraerCadena($str, $findBegin, $findEnd){
    $posbegin = strpos($str, $findBegin) + 1;
    $posend = strpos($str, $findEnd);
    return substr($str, $posbegin, $posend-$posbegin);
  }
  function site_info($var){
    return info(Config::PREFIX, $var);
  }
  function page_info($var){
    return info(Config::PREFIX_PAGE, $var);
  }
  function info($prefix, $var){
    $varsite = $prefix.$var;
    return $GLOBALS[$varsite];
  }

  info_web();
  page( $_GET['page'] );
?>
Snippets.php
<?php
/* Tu código personal */
?>
Explicaré las funciones de core.php
  • info_web(): Retorna la información general de nuestro sitio web, como el título, la dirección, y cualquier otro dato que quieras configurar en tu web, todos los campos de configuración pasan a una variable global y esta pueda ser accedida desde cualquier lugar de nuestro sitio.
  • posts(): Extrae todos los post guardados.
  • site_info(‘nombre_variable’): Retorna la información global del sitio, como el título, la dirección, la geolocalización, etc. Dependiendo de los campos que hayamos configurado para nuestro sitio.
  • page_info (‘nombre_variable’): Esta función es igual que site_info, solo que nos va a extraer la información de una página en específico. Como el título, el contenido...
  • analizadorContenido: Será el encargado de llamar las funciones que indiquemos en el contenido del post o página que creemos, dichas funciones deben tener el formato [nombreFuncion], o [nombreFuncion:param1,param2]. Si has trabajado con CMS como Wordpress esto lo llaman Shortcode.

 

Y ¿Por qué snippets.php está vácio?. Simple, en este archivo vas a crear tus funciones personalizadas para el sitio que vayas a hacer.

 

Ahora creemos el archivo donde se va a visualizar todo en nuestro sitio web, index.php y lo guardado en el directorio public.

 

Código index.php

<?php require_once(dirname(__FILE__) . '/../setting/core.php' ); ?>
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title><?= site_info('titulo') .' - '. page_info('titulo') ?></title>
</head>
<body>
<h1><?= site_info('titulo') ?></h1>
<?= page_info('contenido') ?>
<small><?= site_info('titulo') ?> todos los derechos reservados. Dirección: <?= site_info('direccion') ?></small> 
</body>
</html>
Como queda nuestro CMS hasta ahora.

 

crear-propio-cms-18.jpg

 

Si visualizamos todo con http://localhost/cms/public/ nos saldrá lo siguiente.

 

crear-propio-cms-19.jpg

 

Enhorabuena! Hemos finalizado nuestro CMS!

 

Lo que nos queda ahora es hacer pruebas de todo el poder que tenemos con lo que hemos creado.

 


¿Te ayudó este Tutorial?


14 Comentarios

Muchas gracias, es un tutorial que voy a leerlo con calma. Lo he visto por encima y es super completo. Saludos.

Graciasss, he sacado unas ideas jeje

Menudo curro te has pegado, yo me embarqué en la aventura de crear mi propia web sin conocer nada de nada de programación, hice una web de anuncios clasificados sin saber , la verdad , dónde me metia, si o hubiera sabido probablemente no lo habría hecho.

 

Unas cuantas veces estuve a punto de dejarlo por que veia que se me apoderaba, lo que pasa es que llegado a un punto sería tirar todo el trabajo por la borda.

 

Lo que más me ha gustado de intentarlo es lo que se aprende sobre html, php, bases de datos, diseño, etc, aunque es un trabajo muy laborioso.

 

La web la teminé este año pasado y está en marcha, no es nada del otro mundo pero ahí está, lo que pasa es que le falta un empujoncillo, a ver si saco tiempo y puedo promocionarla un poco más.

Quien quiera hecharle un vistazo se llama ZonAnuncio, y si quereis anunciaros estais invitados, es totalmente gratuita y solo para España.

 

Un Saludo y ánimo, felicidades por el trabajo.


José Villarroel
oct 23 2016 04:38

no puedo descargar el cms, me pide loguearme, pero melogueo y me vuelve a pedir que me loguee


Aldair Floréz
nov 13 2016 00:29

La descarga no funciona ¿ sera que nos podrías compartir el código ?


Pablo Santos
nov 13 2016 17:53

La descarga no funciona ¿ sera que nos podrías compartir el código ?

 

Yo pulso en el enlace cms.zip este y me deja bajarlo. ¿Que navegador usais para descargarlo? Yo uso Chrome y sin problemas...


Pablo Santos
nov 13 2016 17:55

Por cierto que no he dicho nada, impresionante tutorial. bravo solvetic.


Aldair Floréz
nov 14 2016 05:41

Amigo cada vez que voy a descargar me pide el login, me logueo de nuevo y me sigue pidiendo logueo. y nunca lo puedo descargar, serias tan amable de enviarmelo a este correo aldairflorezacuna@gmail.com


Esterlin Perez
nov 24 2016 23:24

Buenoas el tutorial esta bastante bueno gracias de ante manos me gustaria saver como ver un listado de categoria si es posibles


Jorge Bastidas
feb 07 2017 19:14

Buenas amigo, estoy realizando un manejador de contenido siguiendo las pautas de este tutorial, ya estoy finalizando las funciones y tengo problemas con la función de analizar contenido, si hay alguna forma de contactar para mostrarte mi código y ver que problema puede tener, utilizo PHP 5.6, mi correo es jorgebastidas9@gmail.com


CristianCardona
abr 04 2017 22:40

Apenas los conocí los felicito excelente tutorial


Skullkrusher314
ago 15 2017 03:21

Hola chicos, me podiran ayudar en algo?

¿Como podria hacer una funcion para borrar un post/pagina desde el editor?

Estimados, tengo el siguiente problema. Ayuda por favor

 

Warning: require_once(C:\xampp\htdocs\cms\public/../../../setting/config.php): failed to open stream: No such file or directory in C:\xampp\htdocs\cms\public\data.php on line 3

Buenas noches, felicito al autor del tutorial ya que considero que es excelente base para empezar.

Y mi pregunta es la siguiente ¿bajo que licencia distribuyen el código?

¿Puedo usar parte del código para crear un cms "más completo" y distribuirlo?

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X