Foros del Web » Programando para Internet » PHP »

Mostrar Categorias en PHP

Estas en el tema de Mostrar Categorias en PHP en el foro de PHP en Foros del Web. Hola a todos estoy diseñando una tienda en linea de computadoras en mysql y php, en este ultimo tengo conocimientos basicos de programación siempre habia ...
  #1 (permalink)  
Antiguo 29/01/2014, 20:28
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Mostrar Categorias en PHP

Hola a todos estoy diseñando una tienda en linea de computadoras en mysql y php, en este ultimo tengo conocimientos basicos de programación siempre habia hecvho programas sencillos en php pero hacer esta en linea en verdad pienso que es un reto pues como toda tienda esta tiene sus categorias por mencionar un ejemplo hardware, software, accesorios,computadoas, laptops, tablets, etc.

se trata de lo siguiente, quiero que al momento que el usuario seleccione una categoria por ejemplo hardware en la sigiente pagina aparezca como:

inicio>hardware>

y despues por ejemplo si selecciona discos duros:

inicio>hardware>discos duros

despues de seleccionar sata:

inicio>hardware>discos duros>sata

y si el usuario hace click por ejemplo en discos duros se devuelva a discos duros y asi sucesivamente

mi duda es ¿Como podria hacer esto en php? si alguien me pudiera dar alguna se lo agradeceria muchismo.

este es el codigo que he utilizado para crear mi tabla y su estructura

CREATE TABLE categorias(
id INT AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
parent_id INT,

PRIMARY KEY(id)
);

INSERT INTO categorias(nombre) VALUES("hardware");
INSERT INTO categorias(nombre,parent_id) VALUES("discos duros",1);
INSERT INTO categorias(nombre,parent_id) VALUES("sata",2);
INSERT INTO categorias(nombre,parent_id) VALUES("gabinetes",1);
INSERT INTO categorias(nombre,parent_id) VALUES("Micro Atx",4);
INSERT INTO categorias(nombre,parent_id) VALUES("Atx",4);

id nombre parent_id
1 hardware NULL
2 discos duros 1
3 sata 2
4 gabinetes 1
5 Micro Atx 4
6 Atx 4
  #2 (permalink)  
Antiguo 29/01/2014, 22:08
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: Mostrar Categorias en PHP

Pues con esta query

Código MySQL:
Ver original
  1. select id, nombre1, nombre2, nombre3 from
  2. (SELECT *, nombre as nombre3 FROM `categorias`
  3. left join (SELECT id as idt2, nombre as nombre2, parent_id as  parent_id_t2  FROM `categorias`) as t2 on (parent_id=idt2)
  4. left join (SELECT id as idt1, nombre as nombre1, parent_id as  t2parent_id  FROM `categorias`) as t1 on ( parent_id_t2=idt1)
  5.  WHERE  `id`=9) as cats

ESTE ES ELRESULTADO

http://prntscr.com/2nu7m8

o para verlo en filas:

Código MySQL:
Ver original
  1. (select "1" as id, nombre1 as nombre from
  2. (SELECT *, nombre as nombre3 FROM `categorias`
  3. left join (SELECT id as idt2, nombre as nombre2, parent_id as  parent_id_t2  FROM `categorias`) as t2 on (parent_id=idt2)
  4. left join (SELECT id as idt1, nombre as nombre1, parent_id as  t2parent_id  FROM `categorias`) as t1 on ( parent_id_t2=idt1)
  5.  WHERE  `id`=9) as cats )
  6. UNION(select "2" as id, nombre2 as nombre from
  7. (SELECT *, nombre as nombre3 FROM `categorias`
  8. left join (SELECT id as idt2, nombre as nombre2, parent_id as  parent_id_t2  FROM `categorias`) as t2 on (parent_id=idt2)
  9. left join (SELECT id as idt1, nombre as nombre1, parent_id as  t2parent_id  FROM `categorias`) as t1 on ( parent_id_t2=idt1)
  10.  WHERE  `id`=9) as cats )UNION(
  11. select "3" as id, nombre3 as nombre from
  12. (SELECT *, nombre as nombre3 FROM `categorias`
  13. left join (SELECT id as idt2, nombre as nombre2, parent_id as  parent_id_t2  FROM `categorias`) as t2 on (parent_id=idt2)
  14. left join (SELECT id as idt1, nombre as nombre1, parent_id as  t2parent_id  FROM `categorias`) as t1 on ( parent_id_t2=idt1)
  15.  WHERE  `id`=9) as cats )

resultado:

http://prntscr.com/2nu72n

se ve complicado pero no lo es, si es autogenerada la query con php.
  #3 (permalink)  
Antiguo 29/01/2014, 23:13
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

Gracias por tu respuesta enlinea777 a simplevista si me parece un poco complejo esto en cuanto pasarlo a php voy a estudiarlo, justo ahora lo estoy probando. Saludos :D
  #4 (permalink)  
Antiguo 30/01/2014, 11:41
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Mostrar Categorias en PHP

Lo que te sugiere enlinea777 es correcto, pero esta limitado a dos categorías, si quieres implementar algo que tenga n sub categorías tienes que utiliza consultas recursivas.

te dejo el link para que lo cheques...

http://www.forosdelweb.com/f86/consu...-mysql-565357/
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #5 (permalink)  
Antiguo 30/01/2014, 12:51
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.551
Antigüedad: 12 años, 4 meses
Puntos: 977
Respuesta: Mostrar Categorias en PHP

Quizá me equivoque, pero creo que lo que buscas hacer son Breadcrumbs. Te dejo este interesante artículo para que aprendas a hacerlos: http://www.codejobs.biz/es/blog/2013...dcrumbs-en-php

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 30/01/2014, 14:30
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

Muchas gracias mark_ant0n y Alexis88 muy buenas sus respuestas y muy interesantes por cierto voy a checar ese dato tanto de las consultas recursivas como los breadcrumbs. Saludos :D
  #7 (permalink)  
Antiguo 31/01/2014, 07:32
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: Mostrar Categorias en PHP

La idea es que la consulta saque lo necesario de alli enmascarar las tablas como t1,t2,t3, etc.
eso es bueno cuando sabes cuantos datos sacarás.
ahora bien la forma mas correcta y menos engorrosa esusar URL's amigables y alli esposible usar breadcrumbs, asi matas 2 pajaros de un tiro (hacer lo que quieres e integrar SEO).
ahora bien se que eres nuevo asi que me limite a mostrar lo que quieres.
las consultas recursibas desde php a mysql estresanla conecion a la base de datos y son inecesarias cuando puedes mandar una sola query y retornar un solo resultado.
ahora si haces un procedimiento o funcion en mysql es igual.
  #8 (permalink)  
Antiguo 31/01/2014, 19:50
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

Muchas gracias a todos por sus respuestas en verdad me han sido de mucha ayuda tambien estuve investigando y encontre esto, se los comparto

http://www.sitepoint.com/hierarchical-data-database

tambien espero que la informacion que ustedes me han dado les sirva a otros que tienen mi mismas dudas tambien encontre esto aqui mismo en foros del web:

http://www.forosdelweb.com/wiki/PHP:_BreadCrumb

justo ahora me encuentro analizando toda esta información he visto muchos ejemplos buscando por google pero la verdad muy pocos que me ayuden enfocados a base de datos.
  #9 (permalink)  
Antiguo 02/02/2014, 20:07
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

he investigado mas acerca del tema de breadcrumbs pero he buscado en el google y y de todos los ejemplos ninguno me sirve para mi proposito pues la mayori no funciona con mysql incluyen algo como $_SERVER['PHP_SELF']; y lo que yo necesito es por ejemplo que al hacer click en hardware en la siguiente pagina me muestre las categorias discos duros y gabinetes y en la parte superior de la pagina me muestre hardware>discos duros>sata ó hardware>gabinetes>micro atx y si hago click en gabinetes me muestre de nuevo todas las subcategorias dentro de el.

para poder lograrlo necesito que me den una idea porque como dije tengo conocimientos basicos por ejemplo pudiera hacer esto con un bucle por ejemplo utilizando for, que se yo arrays o que me recomiendan enserio no tengo la mas minima idea les agradeceria mucho una pequeña ayuda.
  #10 (permalink)  
Antiguo 02/02/2014, 20:58
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.551
Antigüedad: 12 años, 4 meses
Puntos: 977
Respuesta: Mostrar Categorias en PHP

Creo que no tienes claro el concepto de los breadcrumbs. Tal y como sucede en el cuento de "Hansel y Gretel", en el que iban dejando caer migas de pan por el camino en el que andaban para recordar por dónde debían regresar, las "migas de pan" (traducción literal de breadcrumbs) en la web, tienen una función similar, la cual consiste en mostrar la ruta que el usuario ha recorrido desde un punto inicial hasta en el que se encuentra. Lo que buscas hacer es distinto, ya que buscas armar breadcrumbs sin antes haber pasado por la ruta que se mostrará en éstos.

Creo que debes replantear lo que quieres hacer, ya que si bien no es algo tan complicado, no creo que mostrar la ruta mediante breadcrumbs sea lo más conveniente para tu caso, o al menos no de esa forma. Podrías simplemente mostrar las opciones de cada categoría pero en el contenido de la página, no en los breadcrumbs, ya que como te dije, mostrar la ruta antes de haberla recorrido, no es lo adecuado y no concuerda con la finalidad de los breadcrumbs.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 02/02/2014, 22:04
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

Cita:
Iniciado por Alexis88 Ver Mensaje
Creo que no tienes claro el concepto de los breadcrumbs. Tal y como sucede en el cuento de "Hansel y Gretel", en el que iban dejando caer migas de pan por el camino en el que andaban para recordar por dónde debían regresar, las "migas de pan" (traducción literal de breadcrumbs) en la web, tienen una función similar, la cual consiste en mostrar la ruta que el usuario ha recorrido desde un punto inicial hasta en el que se encuentra. Lo que buscas hacer es distinto, ya que buscas armar breadcrumbs sin antes haber pasado por la ruta que se mostrará en éstos.

Creo que debes replantear lo que quieres hacer, ya que si bien no es algo tan complicado, no creo que mostrar la ruta mediante breadcrumbs sea lo más conveniente para tu caso, o al menos no de esa forma. Podrías simplemente mostrar las opciones de cada categoría pero en el contenido de la página, no en los breadcrumbs, ya que como te dije, mostrar la ruta antes de haberla recorrido, no es lo adecuado y no concuerda con la finalidad de los breadcrumbs.

Saludos
Hola Alexis88 quizas tengas razon con lo que dices, si estoy un poco enredado en este asunto jajajajaja me puse a trabajar despues de investigar y logré por ejemplo en pantalla primeramente aparecen las categorias en este caso hardware, al seleccionar en la siguiente pagina se enlistan todas las ctaegorias contenida en esa categoria y en la parte superior se imprime Categorias>>Hardware y si selecciono discos duros impime Categorias>>discos duros pero a mi me gustaria que lo imprimiera como Categorias>>Hardware>>discos duros

vuelvo a postear la estructua de la tabla (es con la que estoy trabajando):

CREATE TABLE categorias(
id INT AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
parent_id INT,

PRIMARY KEY(id)
);

INSERT INTO categorias(nombre) VALUES("hardware");
INSERT INTO categorias(nombre,parent_id) VALUES("discos duros",1);
INSERT INTO categorias(nombre,parent_id) VALUES("sata",2);
INSERT INTO categorias(nombre,parent_id) VALUES("gabinetes",1);
INSERT INTO categorias(nombre,parent_id) VALUES("Micro Atx",4);
INSERT INTO categorias(nombre,parent_id) VALUES("Atx",4);


y este es el codigo de browse.php
----------------------------------------------
<?php

$mysqli = new mysqli("localhost","usuario","clave","tienda_compu to");

if($mysqli->connect_errno)
{
echo "Fallo la conexion (" . $mysqli->connect_errno . ")" . $mysqli->connect_error;
}

// si no hay id
if(!isset($_GET['id']) || $_GET['id'] == 0)
{
$sql = "SELECT * FROM categorias WHERE parent_id IS NULL";
$menuNav = "<a href='browse.php?id=0'>Categorias</a>";
}else{

// si hay id
$ide = $_GET['id'];
$sql = "SELECT * FROM categorias WHERE parent_id = $ide";
$sqc = "SELECT nombre FROM categorias WHERE id = $ide";
$con = $mysqli->query($sqc);
if($r = $con){
$fila2 = $r->fetch_assoc();
$sub = $fila2['nombre'];
}

$menuNav = "<a href='browse.php?id=0'>Categorias</a> &raquo;" . $sub;

}

echo $menuNav . "<br /><br />";

$query = $mysqli->query($sql);
if($consulta = $query){
while($fila = $consulta->fetch_assoc())
{
$ide = $fila['id'];
$nom = $fila['nombre'];
echo "<a href='browse.php?id=$ide'>" . $nom . "</a><br />";
}
$consulta->free();
}else{
echo "No hay resultados";
}
$mysqli->close();


?>

Saludos
  #12 (permalink)  
Antiguo 02/02/2014, 22:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.551
Antigüedad: 12 años, 4 meses
Puntos: 977
Respuesta: Mostrar Categorias en PHP

Para que se muestre de la forma en la que explicas, la información del enlace que te pasé sobre breadcrumbs te será muy útil, puesto que el propósito de los breadcrumbs es precisamente ese, el de ir formando la ruta que el usuario va siguiendo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #13 (permalink)  
Antiguo 02/02/2014, 22:16
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

Cita:
Iniciado por Alexis88 Ver Mensaje
Para que se muestre de la forma en la que explicas, la información del enlace que te pasé sobre breadcrumbs te será muy útil, puesto que el propósito de los breadcrumbs es precisamente ese, el de ir formando la ruta que el usuario va siguiendo.

Saludos
Ok voy a checarlo de nuevo amigo saludos :D
  #14 (permalink)  
Antiguo 03/02/2014, 21:33
 
Fecha de Ingreso: septiembre-2013
Mensajes: 17
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Mostrar Categorias en PHP

Muchas a gracias todos por sus respuestas ya encontre la solución al problema en cuestión, me puse a investigar mas acerca de los breadcrumbs (migas o migajas de pan) y encontre un articulo interesante [URL="http://www.sitepoint.com/hierarchical-data-database/"]aqui[/URL] al principio de este tema mark_ant0n me sugería hacer el metodo de los breadcrumbs con consulta recursivas lo cual es correcto de acuerdo a todo lo que he investigado y tambien agradezco a Alexis 88 por hacer mencion de los breadcrumbs y pero tambien a enlinea777 por darme idea en cuanto a la sintaxis en MySql.

Me encontré con un tema que fue iniciado hace 10 años aquí mismo en forosdelweb.com por ZoLkIeN con el nombre de [URL="http://www.forosdelweb.com/f18/menu-navegacion-190980/"]Menu de Navegacion[/URL] y 4 años mas tarde krlosva da l solución al problema pero tambien le da solución a mi problema con su respuesta con este codigo:

La funcion:
function urhere($codigo,$simbolo='>'){

$sql="select * from categorias where codigo='$codigo'";
$sql=mysql_query($sql);
$categoria=mysql_fetch_array($sql);
if($categoria['padre']==0){
echo $categoria['nombre'];
return;
}
else{
urhere($categoria['padre'],$simbolo);
echo $simbolo.$categoria['nombre'];
}
}

espero no estar infrigiendo ninguna regla del foro con esto. Lo que yo queria gracias a krlosva ya esta resuelto y aqui esta mi codigo PHP con la solucion de krlosva implemnetada en el

browse.php
-----------------------------------------------------------------------------------------
<?php

$mysqli = new mysqli("localhost","usuario","clave","tienda_compu to");

if($mysqli->connect_errno)
{
echo "Fallo la conexion (" . $mysqli->connect_errno . ")" . $mysqli->connect_error;
}


// si no hay valor de id
if(empty($_GET['id']) || $_GET['id'] == 0)
{
$ide = 0;
$sql = "SELECT * FROM categorias WHERE parent_id IS NULL";

}else{
// si hay valor de id
$ide = $_GET['id'];
$sql = "SELECT * FROM categorias WHERE parent_id = $ide";

cargarMenu($ide,' &raquo; ',$mysqli);

}

echo "<br><br>";

$consulta = $mysqli->query($sql);
if($result = $consulta)
{
while($row = $result->fetch_assoc())
{
$cat_id = $row['id'];
echo "<a href='browse.php?id=$cat_id'>" . $row['nombre'] . "</a><br>";
}
$result->free();
}
$mysqli->close();

function cargarMenu($cat_clave,$simbolo,$mysqli)
{
$sql = "SELECT * FROM categorias WHERE id = $cat_clave";
$consulta = $mysqli->query($sql);
$categoria = $consulta->fetch_assoc();
if($categoria['parent_id'] == 0)
{
$idcat = $categoria['id'];
echo "<a href='browse.php?id=$idcat'>" . $categoria['nombre'] . "</a>";
}else{
cargarMenu($categoria['parent_id'],$simbolo,$mysqli);
$idcat = $categoria['id'];
echo $simbolo . "<a href='browse.php?id=$idcat'>" . $categoria['nombre'] . "</a>";
}

}

?>

-----------------------
Basicamente es eso ya me he dado una idea con eso y espero que esto también sirva a otros como yo que tengan esta misma duda.

Agradecimientos:

Forosdelweb.com
enlinea777
mark_ant0n
Alexis88
krlosva


Saludos y que esten bien :D

Etiquetas: mysql
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




La zona horaria es GMT -6. Ahora son las 09:30.