Programacion de un foro

Iniciado por integeroverflow, 15 Marzo 2017, 23:51 PM

0 Miembros y 2 Visitantes están viendo este tema.

integeroverflow

hola que tal. lo que sucede es que estos dias se me ha dado por experimentar un poco con el desarrollo web. vengo de c/c++ y la verdad nunca me gusto el dise;o, asi que es lo que menos atencion le pongo. me estoy centrando en la programacion.

estoy programando un foro en php usando la base de datos mysql. no tengo problemas con la programacion ni el dise;o.

mi unica duda es que sospecho que la forma en la que estoy programando todo no es la manera correcta, o la indicada.

en un programa en C por ejemplo, lo organizo en varios ficheros fuente y de cabecera, que despues se compilan en un solo ejecutable.

en el caso del foro, solo tengo 3 archivos: index.php - estilo.css - config.php

en config.php tengo definidas ciertas variables como el nombre del foro, el nombre de los rangos, los datos de la conexion a mysql.

en estilo.css, bueno creo que es mas que obvio, tengo definidos todos los estilos de las clases y demas de los elementos html que hay en el archivo index.php

aca se viene lo que creo poco eficiente:

en index.php, tengo una parte fija que siempre se mostrara al usuario, esto incluye el header, el menu, el formulario de inicio de sesion (si es que no esta logueado) y el footer.

en el "medio digamos" es donde se pone el contenido variable.

ahi tengo una serie de if/elseif que lo que hacen es comparar el valor de la variable $_GET['accion'] para mostrar tal o cual contenido, segun el valor del parametro.
si ese parametro no esta seteado, se muestra la pagina principal.

esta idea la tome de SMF, no creo que sea una mala practica, pero lo que sucede es que TODO el contenido del foro, es decir, todas las posibles paginas se encuentran en el archivo index.php
incluso el formulario de registro.

la pregunta es, de que manera podria lograr "separar" todo el codigo en diferentes archivos php, asi por ejemplo, en el caso de que el parametro accion sea "perfil", se ejecute el codigo del archivo "perfil.php", pero si el usuario ingresa directamente a perfil.php le de error 404?
supongo que cambiando los permisos de ese archivo seria suficiente para que sea inaccesible desde afuera.

para ejecutar el codigo, bastaria con un include('perfil.php') y despues ejecutar una funcion dentro de ese archivo que se encargue de realizar las consultas necesarias a la db y mostrar el contenido html generado en el medio de la pagina entre el header y el footer?

gracias.


PD: les dejo una imagen de la home, a ver que opinan sobre el dise;o: (el header es una imagen al azar que venia con la libreria alpng)







flacc

Hola, te entiendo, todos hemos pasado por eso generalmente (casi siempre) se usan manejadores de ruta, me explico:

En el index se hacen configuraciones simples, se inicializan y llaman componentes de la aplicación, casi ya no se usan los require e include de PHP porque los archivos se cargan como clases (Full POO excepto el index) con composer que es un manejador de componentes y también maneja el autocargador de PHP (ver class autoload en documentación de PHP).

Con respecto a los manejadores de ruta o routers la petición por ejemplo un get para foro.com/user/panel se utilizan controladores asociados a rutas (url), en este caso habría un controlador asociado al panel de usuario (es decir una clase), luego habría un método que se encarga de devolver la vista (HTML) del panel y proveer la información asociada a este con respecto del usuario. Las url han pasado de: index.php?user=123 a foro/user/123/panel (hay discuciones acerca de donde poner el 123 para estándarizar) todo gracias a mod rewrite de apache.

En resumen la petición se enruta de la siguiente forma.


Request -> router ->
-> Error Handler -> Error page (404, 403, etc)
OR
-> Route -> Class -> Static Method -> Operations & GET DATA & Return HTML

Básicamente se trasladó el control desde el index al manejador de rutas, puedes investigar como funcionan los Frameworks Php Flight, Laravel, Cake, Sinfony o Code Igniter.

Saludos

#!drvy

#2
Citarla pregunta es, de que manera podria lograr "separar" todo el codigo en diferentes archivos php, asi por ejemplo, en el caso de que el parametro accion sea "perfil", se ejecute el codigo del archivo "perfil.php", pero si el usuario ingresa directamente a perfil.php le de error 404?

Defines una variable de entorno en tu index.php con la ruta del actual archivo.
Código (php) [Seleccionar]
define('FOROPATH', realpath(dirname(__FILE__)).'/');

Defines una lista de acciones que el visitante puede realizar en la url y el archivo asociado a ellas o incluso la clase si es que lo haces en POO.

Código (php) [Seleccionar]
$actions = array(
   'usuario' => 'userClass.php',
   'perfil' => 'profileClass.php',
   'ver' => 'topicClass.php',
   'borrar' => 'moderationClass.php'
);


Defines un main GET en el index.php o en el router para estas acciones y compruebas si pertenece a alguno.

Código (php) [Seleccionar]
if(isset($_GET['accion']) && isset($actions[$_GET['accion']])){
   include_once FOROPATH.'archivos/'.$actions[$_GET['accion']];
   // codigo que sigue.
} else {
   // que hacer si la variable no esta definida o no tiene una accion valida.
}


y en los archivos simplemente compruebas si esta definida tu variable:

Código (php) [Seleccionar]
<?php
if(!defined('FOROPATH')){ die(header('HTTP/1.0 403 Forbidden')); }

echo 
'Bienvenido usuario...';


Esto seria un sistema muy básico y varios CMS's hacen algo parecido a esto (Wordpress y SMF entre ellos).




Lo que te recomendaría sin embargo es que uses un framework. No solo porque ya incluyen la mitad de lo que tienes que hacer si no porque realmente la mayoría te hace utilizar el modelo MVC que es lo que te ayuda a tener controlada y definida toda la estructura.

Yo por ejemplo actualmente estoy en SLIM y no me arrepiento de nada. Es un framework básico que soporta módulos de Laravel y lo más importante... liviano.

Ademas, en sistemas CMS tipo un foro, te interesa mucho la parte de los template (diseños diferentes..) como los temas. Por eso viene bien un framework que soporte templates.

Saludos

integeroverflow

les agradezco por sus respuestas.

voy a probar con la solucion que propuso #!drvy, que creo que va a ser facil de aplicar a el codigo que ya tengo hecho.

Freishner me parecio interesante lo que dijiste, voy a investigar sobre el tema pero por ahora no quiero usar ningun framework, la idea es terminar el foro tal cual lo empeze. mi objetivo es poder ordenar un poco el codigo para no tener todo junto en el index.

de todas formas no es ningun proyecto serio, por el momento lo unico que me interesa es que funcione como deberia, es un experimento nomas.

luego vere si profundizare en el desarrollo web o me quedo ahi.


flacc

Cita de: integeroverflow en 16 Marzo 2017, 05:27 AM
les agradezco por sus respuestas.

voy a probar con la solucion que propuso #!drvy, que creo que va a ser facil de aplicar a el codigo que ya tengo hecho.

Freishner me parecio interesante lo que dijiste, voy a investigar sobre el tema pero por ahora no quiero usar ningun framework, la idea es terminar el foro tal cual lo empeze. mi objetivo es poder ordenar un poco el codigo para no tener todo junto en el index.

de todas formas no es ningun proyecto serio, por el momento lo unico que me interesa es que funcione como deberia, es un experimento nomas.

luego vere si profundizare en el desarrollo web o me quedo ahi.

Por nada, espero que te resulte, el mundillo web no es tan aburrido aunque llegué a el por trabajo mas que nada jajaja, podrías ver algo de machine learning si pasas de web, es lo que esta pegando fuerte ahora, o desarrollo en móviles.

Saludos

integeroverflow

Cita de: Freishner en 16 Marzo 2017, 15:23 PM
Por nada, espero que te resulte, el mundillo web no es tan aburrido aunque llegué a el por trabajo mas que nada jajaja, podrías ver algo de machine learning si pasas de web, es lo que esta pegando fuerte ahora, o desarrollo en móviles.

Saludos

lo mio es la programacion de aplicaciones de escritorio, pero pense que quizas sabiendo desarrollar webs podria aprovechar muchas oportunidades de trabajo, ya que he mirado un par de paginas de trabajo freelance y el 80% de las ofertas se trata de dise;o y programacion de aplicaciones web.

terminare el foro y creo que me tirare por aprender a utlizar el framework bootstrap para hacer dise;os responsive. porque todas las plantillas que he dise;ado se deforman al hacer resize en el navegador.

flacc

Bueno, Bootstrap no es un framework en si, para la parte de diseño, a parte de bootstrap tienes Fundation y otros que desconozco. En conjunto con Bootstrap te recomendaría una biblioteca para javascript que te hace la vida mas fácil que es JQuery, también de la manos de JQuery tienes cosas tipo bootstrap como JQuery Mobile o Jquery UI, y lo otro que se usa mucho es el diseño material de Google, el gigante aporta desde todo tipo de gráficos hasta colores y componentes.

Saludos