Foros del Web » Programando para Internet » PHP »

PHP OO Categorias y Subcategoria con OOP

Estas en el tema de Categorias y Subcategoria con OOP en el foro de PHP en Foros del Web. Saludos amigos tengo un gran problemita y creo que sera mejor ilustralo con codigo. basicamente he hecho esto con diferentes metodos y he conseguido el ...
  #1 (permalink)  
Antiguo 21/10/2010, 08:38
Avatar de GXT2  
Fecha de Ingreso: junio-2009
Ubicación: Fort Lauderdale, FL
Mensajes: 152
Antigüedad: 15 años, 5 meses
Puntos: 0
Exclamación Categorias y Subcategoria con OOP

Saludos amigos tengo un gran problemita

y creo que sera mejor ilustralo con codigo.
basicamente he hecho esto con diferentes metodos
y he conseguido el resultado deseado pero ahora quiero separar totalmente
la programacion del diseno y es donde encuentro el problema


Tengo una base de datos para esta ilustracion seria asi:

Código:
La tabla categorias que contendra las categorias 
___________ 
|Categorias |
---------------
| cat_id     |
| cat_name  |
---------------

La tabla subcategorias que contendra todas las subcategorias realcionadas
a su categoria y para esto le paso el id de la categoria .. "nada nuevo hasta ahora"


_______________
| SubCategorias   |
|--------------------|
|     subcat_id       |
|   subcat_name   |
|      cat_id  |
----------------------

Ok entonces lo que deseo es presentar en pantalla
todas las categorias con sus subcategorias debajo de cada
categoria ... ilustrandolo seria asi:

Código HTML:
Categoria1
  subcategoria1 - pertenceiente a la categoria1
  subcategoria2
  subcategoria3

Categoria2
  subcategoria4 - pertenceiente a la Categoria2
  subcategoria5
  subcategoria6

Muy bien entonces lo que hago es lo siguiente :

Trabajo.php
Código PHP:

class Categoria
{    
      private 
$get_list;
      
      function 
__construct()
      {
           
          
$this->get_list = array();

      }
      
      public function 
get_categories()
      {

                         
$sQuery"SELECT *
             FROM Categorias "
;
             
$rsDatos mysql_query ($sQuery)
             or die (
"Error  for categorias".mysql_error());

                         
//creo un array bidimencional con mysql_fetch_assoc
             
while($Datos mysql_fetch_assoc($rsDatos))
             {
                 
                               
$this->get_list[] = $Datos;
     
             }
             return  
$this->get_list;

      }


Lo que acabe de hacer es traer un arreglo bidimencional
para poder acceder a sus datos por medio de un FOR
en la parte del diseno.

Ahora para imprimir esto por pantalla lo voy a hacer
en otro documento para que se me entiendo mejor que la
presentacion la deseo trabajar totalmente separda de la programacion:


Index.php
Código PHP:

include("Trabajo.php");

$list = new Categoria();
$categorias_array $list->get_categories();

//ahora llamo al array bidimencional para que me presente los datos.



for ($i=0$i <count($categorias_array); $i++ )
{
     
     echo 
$categorias_array[$i]["cat_name"] ;
         echo 
"<br>"//le creo un salto de linea para que los ponga en clumna


Hasta este punto todo marcha bien y lo uqe veria por pantalla seria :


Código HTML:
 Categoria1
 Categoria2
 Categoria3
 Categoria4

Entre cada categoria deberia imprimir las subcategorias
Ahora la respuesta mas sencilla seria ....repetir el proceso
anterior pasandole el id de la categoria al la instancia del objeto
que trae las subcategorias de esa categoria en especifico.

Alguien me podria decir cual seria la mejor manera de traer
las subcategorias debajo de cada categoria ..

Como dije antes yo podria popular las subcategorias debajo de
cada categoria pero yo imprimo las subcategorias dentro del objeto
.. osea asi :


Index.php
Código PHP:

include("Trabajo.php");
include(
"Subcategoria.php");

$list = new Categoria();
$categorias_array $list->get_categories();

//ahora llamo al array multidimencional para que me presente los datos.



for ($i=0$i <count($categorias_array); $i++ )
{
     
     echo 
$categorias_array[$i]["cat_name"] ;
         echo 
"<br>"//le creo un salto de linea para que los ponga en clumna
         
         
$subcate_id  $categorias_array[$i]["cat_id"] ;
         
$subcategorias = new Subcategorias$subcate_id );


Y la clase Subcategoria quedaria asi:


Subcategoria.php
Código PHP:

class Subcategorias
{    
      protected 
$cat_id  ;    

      function 
__construct$cat_id )
      {
           
          
$this->cat_id $cat_id;
          
$this->get_subcategories();

      }
      
      public function 
get_subcategories()
      {

                         
$sQuery"SELECT *
             FROM SubCategorias where cat_id= $this->cat_id"
;
             
$rsDatos mysql_query ($sQuery)
             or die (
"Error  for subcategorias".mysql_error());

                         
//creo un array bidimencional con mysql_fetch_assoc
             
while($Datos mysql_fetch_array($rsDatos))
             {
                 
                               echo 
$Datos["subcat_name"];
                               echo 
"<br>";
     
             }
            

      }


Como ven lo resuelvo dentro de la clase y lo que yo quiero es resolverlo
en el diseno , pero cuando trato de hacerlo de la misma manera que llame
a las Categorias .. solo me muestra la primera categoria y las subcategorias de la
primera categoria ... luego se cicla y me da muchos mas errores ....

La verdad no se que estare haciendo mal
pero si alguien me podria decir como resolver esto
se lo agradeceria millon

Y estoy seguro que ayudara mucho a otras personas con el mismo problema

Gracias
  #2 (permalink)  
Antiguo 21/10/2010, 10:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Categorias y Subcategoria con OOP

no entiendo la razón de hacerlo así, si ya lo tienes bien claro con tu primer objeto... ¿que necesidad hay de cambiar el comportamiento para el otro?

de verdad, sería interesante que nos muestres el tipo de problemas que te genera implementando las dos soluciones de manera idéntica...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/10/2010, 11:30
Avatar de GXT2  
Fecha de Ingreso: junio-2009
Ubicación: Fort Lauderdale, FL
Mensajes: 152
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Categorias y Subcategoria con OOP

Hi gracias por responder pateketrueke

Las razones por las que necesito hacerlo asi es para resolver la impresion
de los datos en la parte del diseno ...

Como tu ves en
Código PHP:
new Subcategorias$subcate_id ); 
adentro de la clase imprimo los datos verdad?

pero en la clase Categoria lo que retorno es un array
Código PHP:
return  $this->get_list
y luego en el index.php cojo los datos de ese array y los imprimo
con el FOR

index.php
Código PHP:
include("Trabajo.php");

$list = new Categoria();
$categorias_array $list->get_categories();


for (
$i=0$i <count($categorias_array); $i++ )
{
     
    
//aqui le puedo asignar la presentacion de como se veran los datos
     
echo $categorias_array[$i]["cat_name"] ;
     


dandome la capacidad de ponerle diferentes disenos al mismo array
de datos, y de esta manera hacemos reusable al objeto.

Y si ves
Código PHP:
new Subcategorias$subcate_id ); 
le doy el formato, adentro de la clase ,
haciendome imposible modificar el diseno en caso
de querer llamara a ese mismo objetos en otra parte pero con otro diseno .... quiza populado horizontalmente y no verticalmente.

No se si soy claro del porque necesito hacerlo asi.



Pero cuando uso el FOR dentro de otro FOR
me imprime asi :

Código HTML:
Categoria1
 Subcategoria1
 Subcategoria2

Pero no me imprime la categoria2 ni la Categoria3 
solmante me imprime la primera categoria.

Ese es mi problema amigo .. :)
  #4 (permalink)  
Antiguo 21/10/2010, 11:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Categorias y Subcategoria con OOP

si, si... he entendido tu problema desde un inicio, pero mencionabas que cuando implementabas del mismo modo que Categoria tu clase Subcategoria surgían errores...

¿cuales?

y bueno, un objeto hace lo que tu le dices... si el primero ya lo tienes, te aseguro que el segundo debería funcionar exactamente igual!!

quizá el problema esta en la manera de mostrar los resultados...
Código PHP:
for (/* ... */)
{
  
$subcategorias = new Subcategorias$subcate_id ); 
  foreach (
$subcategorias->get_categories() as $one)
  {
     
print_r($one);
  }

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 21/10/2010, 13:13
Avatar de GXT2  
Fecha de Ingreso: junio-2009
Ubicación: Fort Lauderdale, FL
Mensajes: 152
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Categorias y Subcategoria con OOP

Hi pateketrueke

gracias por ayudarme eres muy amable

veras probe igual asi como me dices pero sigo teniendo el mismo problema
lo que tengo en el index.php es lo siguiente y es como deberia trabajar :

Index.php
Código PHP:

include("Trabajo.php");
include(
"Subcategoria.php");

$list = new Categoria();
$categorias_array $list->get_categories();

//ahora llamo al array multidimencional para que me presente los datos.



for ($i=0$i <count($categorias_array); $i++ )
{
     
       echo 
$categorias_array[$i]["cat_name"] ;
         echo 
"<br>";
        
//le creo un salto de linea para que los ponga en clumna
         

         
$lista = new Subcategorias$categorias_array[$i]["cat_id"]  );
         
$subcategorias_array $lista->get_subcategories();

         for (
$i=0$i <count($subcategorias_array); $i++ )
         {
               
                echo 
$subcategorias_array[$i]["subcat_name"];
                echo
"<br>";

         }



Y es exactamente de esta forma es como lo tenia desde el principio
pero lo que me imprime es lo siguiente:

Código HTML:
Categoria1
  Subcategoria1
  Subcategoria2

El For que debe de traer la siguiente categoria 
 no sigue repitiendo el bucle... y me imprime
solo la primera categoria y sus subcategorias.


Pero lo que deberia de imprimir es :

Categoria1
  Subcategoria1
  Subcategoria2

Categoria2
  Subcategoria3
  Subcategoria4

Categoria3
  Subcategoria5
  Subcategoria6


Como ves ese es mi problema al poner el FOR
dentro de otro FOR al parecer el primer FOR solo se
ejecuta una vez ....




Subcategoria.php
Código PHP:

class Subcategorias
{    
      protected 
$cat_id;  
      private 
$data_list

      function 
__construct$cat_id )
      {
           
          
$this->cat_id $cat_id;
          
$this->data_list= array();

      }
      
      public function 
get_subcategories()
      {

             
$sQuery"SELECT *
             FROM SubCategorias where cat_id= $this->cat_id"
;
             
$rsDatos mysql_query ($sQuery)
             or die (
"Error  for subcategorias".mysql_error());

             
//creo un array bidimencional con mysql_fetch_assoc
             
while($Datos mysql_fetch_assoc($rsDatos))
             {
                 
                     
$this->data_list[] = $Datos ;
             }
             return  
$this->data_list;
            

      } 
Me estoy volviendo loco ...
gracias si alguien tiene la solucion porfavor ayudeme con esto
gracias de antemano...y espero haber sido claro.
  #6 (permalink)  
Antiguo 21/10/2010, 13:26
Avatar de GXT2  
Fecha de Ingreso: junio-2009
Ubicación: Fort Lauderdale, FL
Mensajes: 152
Antigüedad: 15 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Categorias y Subcategoria con OOP

Haaaaaaaaaaa encontre el problema

me quiero morir !! jajaj

que bueno en todo caso ..

El problema esta en las variables de los for
el primer FOR usa $i
y el segundo FOR usa $i tambien

entonces al segundo FOR le cambien el nombre
de la variable $i por $a
y ahy el segundo FOR no coje el valor del primer FOR
haciendo que pience que el FOR termina en el primer registro.

Dejo el Index como debe queda al final

Código PHP:

include("Trabajo.php");
include(
"Subcategoria.php");

$list = new Categoria();
$categorias_array $list->get_categories();

//ahora llamo al array multidimencional para que me presente los datos.



for ($i=0$i <count($categorias_array); $i++ )
{
     
       echo 
$categorias_array[$i]["cat_name"] ;
         echo 
"<br>";
        
//le creo un salto de linea para que los ponga en clumna
         

         
$lista = new Subcategorias$categorias_array[$i]["cat_id"]  );
         
$subcategorias_array $lista->get_subcategories();

         for (
$a=0$a <count($subcategorias_array); $a++ )
         {
               
                echo 
$subcategorias_array[$a]["subcat_name"];
                echo
"<br>";

         }


pateketrueke mil gracias por apoyarme eres lo maximo gracias por tus respuestas :).

Etiquetas: categorias, oop
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 14:35.