Foros del Web » Programando para Internet » PHP »

Cómo creo una web modular similar a wordpress...?

Estas en el tema de Cómo creo una web modular similar a wordpress...? en el foro de PHP en Foros del Web. Buenas, La parte que me llama la atención... es como han conseguido traducir cada ID de cada tema/post para conseguir cargar el contenido correcto en ...
  #1 (permalink)  
Antiguo 26/07/2010, 14:30
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Cómo creo una web modular similar a wordpress...?

Buenas,

La parte que me llama la atención... es como han conseguido traducir cada ID de cada tema/post para conseguir cargar el contenido correcto en sus plantillas...

Partiendo que una web modular se construye con la función switch

Ejemplo de index.php

Código PHP:
Ver original
  1. <?php
  2. /* DISEÑO MODULAR */
  3. include_once( $_SERVER [ 'DOCUMENT_ROOT' ]. '/includes/metatags.php' );
  4. include_once( $_SERVER [ 'DOCUMENT_ROOT' ]. '/includes/header.php' );
  5.  
  6. $id=$_GET['pagina'];
  7. switch ($id) {
  8.    case 'inicio':
  9.        include("pages/inicio.php");
  10.        break;
  11.    case 'faq':
  12.        include("pages/ayuda/faq.php");
  13.        break;
  14.    case 'soporte':
  15.        include("pages/ayuda/soporte.php");
  16.        break;
  17.    case 'servicios':
  18.        include("pages/servicios.php");
  19.        break;
  20.     case 'directorio':
  21.         $apartado=$_GET['apartado'];
  22.         switch ($apartado) {
  23.             case 'futbol':
  24.                 include("pages/directorio/futbol.php");
  25.                 break;
  26.             case 'tenis':
  27.                 include("pages/directorio/tenis.php");
  28.                 break;
  29.              default:
  30.                 include("pages/404.php");
  31.         };
  32.         break;
  33.    default:
  34.        include("pages/404.php");
  35.        //include("pages/inicio.php");
  36. }
  37. ?>

Me surge la duda, de como diablos lo hará wordpress para relacionar cada post con su case.... está claro que no tienen una sentencia "case" para cada post eso sería inviable.

Entonces como se consigue partiendo que tienes una base de datos con el ID del tema, el ID de la categoria y el nombre del post hacer lo que hace wordpress...

Y si tienes dominio.com/index.php?cat=4&post=23 sepa que tiene que cargar...

Tiene que tener una consulta a la base de datos sí o sí, pero ¿Cómo junta esta consulta con el switch y el case?? utiliza switch y case?¿

Lo sabéis?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 26/07/2010, 17:39
 
Fecha de Ingreso: julio-2008
Mensajes: 201
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Cómo creo una web modular similar a wordpress...?

¿? No se si te he entendido mal o no te lo has planteado correctamente...

¿Ese código está hecho por ti o es de WP?

De todos modos, es la mar de sencillo... Simplemente tienes que hacer un "$_GET['cat']" y un $_GET['post'] de tal modo que cuando obtienes esos datos simplemente haces una consulta a la BBDD consultando el post de la categoría dentro de la sección en la que se encuentra.

en éste ejemplo: dominio.com/index.php?cat=4&post=23

para saberlo todo (sabiendo que la categoría pertenece a un apartado en concreto o está dentro de un apartado) simplemente hacemos lo siguiente:

Código PHP:
Ver original
  1. $c = $_GET['cat'];
  2. $p = $_GET['post'];
  3.  
  4. $query = mysql_query("SELECT titulo, descripcion FROM tabla WHERE categoria = '.$c.' and post = '.$p.' ");
  5. $datos = mysql_fetch_array($query);
  6.  
  7. echo $datos['titulo']."<br />".$datos['descripcion'];

Si es esto a lo que te referías... más sencillo imposible...
  #3 (permalink)  
Antiguo 26/07/2010, 23:54
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo creo una web modular similar a wordpress...?

Muchas gracias tld32, de esa manera es la única que imaginaba que podría estar utilizando wordpress.

Pero como asociaba web modular = switch y case... me chocaba la idea de que wordpress utilizase otra forma de acceder a sus páginas. Aunque esta forma era la mas evidente...

Sin embargo, aparece otro problema que explico a continuación.

Sabemos que wordpress utiliza este formato para sus url internas
dominio.com/index.php?cat=4&post=23

En cambio, gracias a la opción de permalinks puedes decirle a través del área de administración que utilice la nomenclatura /%category%/%postname%/
La cual haría transformar la URL de la siguiente forma:

cat=4 // php
post=23 // tutorial-php

dominio.com/php/tutorial-php

Como diablos sabe el fichero .htaccess que la categoría y el post corresponde a php y a tutorial-php. Hasta donde yo sé. el fichero .htaccess no consulta ninguna base de datos. Y para conseguir algo así no se me ocurre otra forma!

¿Sabéis como se consigue?

En el ejemplo anterior de switch y case, la regla podría ser esta

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?pagina=$1 [QSA,L]


En el caso de wordpress no logro ver como lo hace para cambiar su url según categoria y post...

Muchas gracias de antemano
  #4 (permalink)  
Antiguo 27/07/2010, 01:55
 
Fecha de Ingreso: julio-2008
Mensajes: 201
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Cómo creo una web modular similar a wordpress...?

Eso se denomina URL Amigable. .htaccess no necesita para nada acceder a una base de datos, simplemente se le indica que cuando en el navegador se escriba: index.php/categoría/post/ lo interprete de forma interna como index.php?cat=^&post=^

mírate este post para entenderlo mejor

el tema de que salga la palabra, es decir, el nombre del post en lugar del número, se consigue porque al crear un nuevo post te deja seleccionar qué dirección tendrá. En ese momento tú estás declarando que el post con la id=X es igual al post con el número=X

P.D: Por cierto, eso creo que WP lo hace internamente, mediante base de datos; Sino el htaccess sería terriblemente grande y haría que la página fuese mucho más lenta.

Última edición por tld32; 27/07/2010 a las 02:09
  #5 (permalink)  
Antiguo 27/07/2010, 07:46
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo creo una web modular similar a wordpress...?

Cita:
Iniciado por tld32 Ver Mensaje
Eso se denomina URL Amigable. .htaccess no necesita para nada acceder a una base de datos, simplemente se le indica que cuando en el navegador se escriba: index.php/categoría/post/ lo interprete de forma interna como index.php?cat=^&post=^

mírate este post para entenderlo mejor

el tema de que salga la palabra, es decir, el nombre del post en lugar del número, se consigue porque al crear un nuevo post te deja seleccionar qué dirección tendrá. En ese momento tú estás declarando que el post con la id=X es igual al post con el número=X

P.D: Por cierto, eso creo que WP lo hace internamente, mediante base de datos; Sino el htaccess sería terriblemente grande y haría que la página fuese mucho más lenta.
A eso me referia, a cómo diablos lo hace internamente, no creo que sea el único que trabaja de esa forma, todos los grandes sitios que tengan temas y paginas diferenciadas por un id, de bien seguro que tiran de bbdd y de una relación.

Mi pregunta no es como hacer la relación, eso es fácil, cuando doy de alta un nuevo tema ya me encargo que en la base de datos se rellene todos los campos.
Ejemplo:

Tengo que el post con id=23 es "Tutorial PHP" y que la url tiny es "tutorial-php" y que pertenece a la cat=4 que corresponde con PHP

De qué forma le digo que cuando ponga

dominio.com/php/tutorial-php/

Sepa qué me están pidiendo la cat=4 y el post 23

Cómo me entero de esto, esa es mi pregunta :S

Sabéis la forma?

Muchas gracias de antemano!
  #6 (permalink)  
Antiguo 27/07/2010, 08:11
 
Fecha de Ingreso: julio-2008
Mensajes: 201
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Cómo creo una web modular similar a wordpress...?

se puede hacer por varios métodos. A mi el primero que se me ocurre y el más sencillo de todos es el siguiente:
Código PHP:
Ver original
  1. <?php
  2. //Obtenemos la dirección de la página web
  3. $direccion = $_SERVER['PHP_SELF'];
  4. //sacamos los datos de la dirección dividiendolo por la barra diagonal
  5. $var = explode("/",$direccion);
  6. //el primer valor equivale a la categoría
  7. $c = $var[1];
  8. //el segundo valor equivale al post
  9. $p = $var[2];
  10. //conectamos a la bbdd
  11. mysql_connect("localhost","usuario","password");
  12. //obtenemos el titulo, descripción e ID del post que corresponde a esa categoría
  13. $query = mysql_query("SELECT titulo, descripcion, id FROM tabla WHERE categoria = ".$c." AND post = ".$p."");
  14. //creamos un array con los datos obtenidos
  15. $array = mysql_fetch_array($query);
  16. echo "Título: ".$array['titulo']."<br />";
  17. echo "Contenido: ".$array['descripcion']."<br />";
  18. echo "ID: ".$array['id']."<br />";
  19. ?>
Evidentemente si quieres evitar el tema de las inyecciones SQL añade un mysql_escape_string sobre las variables $c y $p
Por cierto, gracias por hacer esta pregunta porque de todas formas tenía que hacerlo para un proyecto personal, así que mato dos pájaros de un tiro :D
¡Espero que te sirva ya que funciona perfectamente !

Última edición por tld32; 27/07/2010 a las 08:16
  #7 (permalink)  
Antiguo 27/07/2010, 08:44
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo creo una web modular similar a wordpress...?

Cita:
Iniciado por tld32 Ver Mensaje
se puede hacer por varios métodos. A mi el primero que se me ocurre y el más sencillo de todos es el siguiente:
Código PHP:
Ver original
  1. <?php
  2. //Obtenemos la dirección de la página web
  3. $direccion = $_SERVER['PHP_SELF'];
  4. //sacamos los datos de la dirección dividiendolo por la barra diagonal
  5. $var = explode("/",$direccion);
  6. //el primer valor equivale a la categoría
  7. $c = $var[1];
  8. //el segundo valor equivale al post
  9. $p = $var[2];
  10. //conectamos a la bbdd
  11. mysql_connect("localhost","usuario","password");
  12. //obtenemos el titulo, descripción e ID del post que corresponde a esa categoría
  13. $query = mysql_query("SELECT titulo, descripcion, id FROM tabla WHERE categoria = ".$c." AND post = ".$p."");
  14. //creamos un array con los datos obtenidos
  15. $array = mysql_fetch_array($query);
  16. echo "Título: ".$array['titulo']."<br />";
  17. echo "Contenido: ".$array['descripcion']."<br />";
  18. echo "ID: ".$array['id']."<br />";
  19. ?>
Evidentemente si quieres evitar el tema de las inyecciones SQL añade un mysql_escape_string sobre las variables $c y $p
Por cierto, gracias por hacer esta pregunta porque de todas formas tenía que hacerlo para un proyecto personal, así que mato dos pájaros de un tiro :D
¡Espero que te sirva ya que funciona perfectamente !
Buenas tld32,

Esa forma funciona... :)

Solo que tienes que tener en la base de datos, el nombre de la url amigable tanto de la categoria como del post

categoria = "Otros Programas" -> otros-programas
Post = "Tutorial de cómo hacer el pino!" -> tutorial-como-hacer-pino

De forma que puedas hacer la consulta luego en la base de datos. Lo ideal sería poder hacer la consulta con un ID número, ya que imagino que irá más rapido, no?

Pero de todas formas, ¿crees que wordpress utiliza esta técnica o utiliza los identificadores númericos y luego los transforma de manera MAGICAMENTE¿?¿

Muchas gracias de antemano!
  #8 (permalink)  
Antiguo 27/07/2010, 10:42
 
Fecha de Ingreso: julio-2008
Mensajes: 201
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Cómo creo una web modular similar a wordpress...?

Estoy seguro de que WP utiliza el mismo método que el que yo te he expuesto. Cuando creas un nuevo post en wordpress y le indicas la URL que quieres que tenga ese post, lo que hace WP es añadir esa URL amigable a la base de datos. En la misma tabla guarda la id, la URL amigable, el título del post, etc...

Realmente con éste método te va a rendir mejor tanto la bbdd como el archivo htaccess ya que solo consultas lo que realmente vas a mostrar.

Recuerda que no existe la mágia, sino los trucos que hacen que lo parezca ;)
Mucha suerte con tu proyecto.

Etiquetas: modular, similar, wordpress
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 12:07.