Foros del Web » Programando para Internet » PHP »

Modificar código - base de datos

Estas en el tema de Modificar código - base de datos en el foro de PHP en Foros del Web. Hola amigos, maravillosa comunidad! El siguiente script funciona bien, necesito ayuda en mejorar la organización de los campos de las tablas de mi base de ...
  #1 (permalink)  
Antiguo 18/07/2013, 07:57
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Información Modificar código - base de datos

Hola amigos, maravillosa comunidad!

El siguiente script funciona bien, necesito ayuda en mejorar la organización de los campos de las tablas de mi base de datos.

Cuestión que este código es de un menú para vender productos, tanto las categorías y subcategorías están en la misma tabla. El problema es cómo hacer que funcione bien teniendo 1 tabla 'categorias' y otra 'subcategorías'.

Ver Menú en funcionamiento: http://demos.9lessons.info/jsonmenu/index.html

Código completo:

BD:

Código:
CREATE TABLE `categories` 
(
`cat_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) ,
`parent` int(11) ,
`media` varchar(100),
PRIMARY KEY (`cat_id`)
);
IMAGEN DE LA TABLA:



PHP:

Código:
$sql = mysql_query("select cat_id,name,media from categories where parent=0");
// parent categories node
$categories = array("Categories" => array());

while ($row = mysql_fetch_array($sql))
{
$cat_id = $row['cat_id'];
$ssql = mysql_query("select cat_id,name,media from categories where parent='$cat_id'");

// single category node
$category = array(); // temp array
$category["cat_id"] = $row["cat_id"];
$category["name"] = $row["name"];
$category["media"] = $row["media"];
$category["sub_categories"] = array(); // subcategories again an array

while ($srow = mysql_fetch_array($ssql))
{
$subcat = array(); // temp array
$subcat["cat_id"] = $srow['cat_id'];
$subcat["name"] = $srow['name'];
// pushing sub category into subcategories node
array_push($category["sub_categories"], $subcat);
}

// pushing sinlge category into parent
array_push($categories["Categories"], $category);
}
echo ((isset($_GET['callback'])) ? $_GET['callback'] : "") . '(' . json_encode($categories) . ')';
IMAGEN JSON:


SCRIPT:

Código:
$(document).ready(function()
{

$.getJSON("categories.php?callback=?", function(data)
{
$.each(data.Categories, function(i, category)
{
var subjsondata='';
$.each(category.sub_categories, function(i, sub_categories)
{ 
subjsondata += "<li>"+sub_categories.name+"</li>";
});
var jsondata ="<li class="category" id=''"+category.cat_id+"'>"+category.name+"<ul class="hideul" id='hide"+category.cat_id+"' media='"+category.media+"'>"+subjsondata+"</ul>
</li>";
$(jsondata).appendTo("#menu_ul");
});
}
);

//MouseOver on Categories
$(".category").live('mouseover',function(event)
{
$("#menu_slider").show();
var D=$(this).html();
var id=$(this).attr('id');
var V=$("#hide"+id).html();
var M=$("#hide"+id).attr("media");
$("#submenu_ul").html(V);
$("#menu_slider h3").html(D);
//Background Image Check
if(M!='null')
{
$("#menu_slider").css({"width": "450px"});
}
else
{
$("#menu_slider").css({"width": "250px"});
}
$("#menu_slider").css('background', 'url(backgrounds/' + M + ') #ffffff no-repeat right bottom');
});

//Document Click
$(document).mouseup(function()
{
$("#menu_slider").hide();
});

//Mouse click on sub menu
$("#menu_slider").mouseup(function(){ return false });

//Mouse click on my account link
$("#menu_box").mouseup(function(){ return false });
});


MIKEPIANIST- "Vivir es un desafío y solo para valientes"
  #2 (permalink)  
Antiguo 18/07/2013, 11:08
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 6 meses
Puntos: 56
Respuesta: Modificar código - base de datos

Este artículo te puede servir: http://mikehillyer.com/articles/mana...data-in-mysql/
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #3 (permalink)  
Antiguo 23/07/2013, 23:03
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Modificar código - base de datos

Gracias cjxnet, estuve estudiando el sitio y la manera de hacer esto. Me sirvió mucho.
Ahora mostraré lo que avancé. Me trabé en el script para el menú.

Problema a corregir:


Código:
  $(document).ready(function()
            {
                $.getJSON("categories.php?callback=?",  function(data)
                {
					
                    $.each(data.Categories, function(i, category)
                    {
                       
                        var subjsondata='';
                        $.each(category.sub_categories, function(i, sub_categories)
                        { 
                          
                            subjsondata += "<li>"+sub_categories.nombreCategorias+"</li>";
					});
                 
                        var jsondata ="<li id='"+idCategorias+"' class='category'>"+category.nombreCategorias+"<ul id='hide"+category.idCategorias+"' class='hideul'>"+subjsondata+"</ul></li>";

                        $(jsondata).appendTo("#menu_ul");
                    });
                }
            );
});
El efecto que necesito es del menú-botón "Productos" de esta página: http://www.fravega.com/

Mi recorrido de arrays es así:

Código:
$user = 'root';
$pass = '';
$conn = new PDO('mysql:host=localhost;dbname=menu_categorias', $user, $pass);
 
$sql ='SELECT * FROM categorias ORDER BY lft';
$stmt = $conn->query($sql);
 
$categories = array();
$left = array();
$right = array();
$level = 0;
while ($row = $stmt->fetchObject()) {
    if (empty($right) === false) {
        $lastRight = end($right);
        if ($lastRight > $row->rgt) {
            $level = $level + 1;
        }
    }
    if (empty($left) === false) {
        $lastLeft = end($left);
        if ($row->lft - $lastLeft > 2) {
            $level = $level - 1;
        }
    }
    $categories[] = array('idCategorias' => $row->idCategorias,
                          'nombreCategorias' => $row->nombreCategorias,
                          'level' => $level);
    $left[] = $row->lft;
    $right[] = $row->rgt;	
}

 
echo '<ul>', "\n";
$count = count($categories);
if ($count == 1) {
    echo '<li>', $categories[0]['nombreCategorias'], '</li>', "\n";
} else {
    $i = 0;
    while (isset($categories[$i])) {
        echo '<li>', $categories[$i]['nombreCategorias'];
        if ($i < $count - 1) {
            if ($categories[$i + 1]['level'] > $categories[$i]['level'])
            {
                echo '<ul>', "\n";
            }
            else {
                echo '</li>', "\n";
            }
            if ($categories[$i + 1]['level'] < $categories[$i]['level']) {
                echo str_repeat('</ul></li>' . "\n",
                                $categories[$i]['level'] - $categories[$i + 1]['level']);
            }
        } else {      
            echo str_repeat('</ul></li>' . "\n", $categories[$i]['level']);
        }
    $i++;
    }
}
Imagen de la BD:


Imagen del recorrido de arrays:






mikepianist.- "Vivir es un desafío para valientes"

Etiquetas: php+base+de+datos
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 10:30.