Ayuda con menu ordenable jquery y php

  • Autor Autor andilien
  • Fecha de inicio Fecha de inicio
A

andilien

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas gente,

Os cuento mi problema a ver si me podéis ayudar. Estoy programando una web tipo wordpress y estoy con el editor del menú. El cual puede incluir sub-menús. El problema surge al mostrar los menús, el guardar el menú ordenado ya está hecho, solo necesito mostrarlo...

En la base de datos yo guardo el orden en formato json, el cual se interpreta de la siguiente manera:
MenuItem=MenuItemParent, en el cual MenuItem es el ID del Item guardado en la base de datos y MenuItemParent es el ID del Item superior, si es null significa que no tiene Item superior (no es un sub-menú).

El json que tengo para mostrar es el siguiente:
Insertar CODE, HTML o PHP:
[COLOR=#000000][FONT=&quot]{"1":"null","2":"1","3":"2","4":"1","5":"4","6":"5","7":"null"}
[/FONT][/COLOR]

Y como tendría que ser al mostrarse:
Captura-json.webp

Alguien podría ayudarme a solucionar éste problema?

Saludos y gracias de antemano
 
Creo que el problema está en el JSON que usas, creo debería ser así:
PHP:
array(
'Item 1' => array(
            'Item 2' => array(
                        'Item 3' => NULL
                        ),
            'Item 4' => array(
                        'Item 5' => array(
                                   'Item 6' => NULL
                                   ),                                  
                        ),
			),			
'Item 7' => NULL
);

Por lo que el JSON sería:
Insertar CODE, HTML o PHP:
{"Item 1":{"Item 2":{"Item 3":null},"Item 4":{"Item 5":{"Item 6":null}}},"Item 7":null}

Prueba así a ver si te resulta más sencillo, cualquier duda me dices 😀
 
Muchas gracias. Ya he resuelto mi problema al final lo que he hecho ha sido reconstruir el json de esta manera y guardarlo en la base de datos:
Insertar CODE, HTML o PHP:
[COLOR=#000000][FONT=&quot][{"menu_order":"1","item":"Item 1","menu_order_parent":"null"},{"menu_order":"2","item":"Item 2","menu_order_parent":"1"},{"menu_order":"3","item":"Item 3","menu_order_parent":"2"},{"menu_order":"4","item":"Item 4","menu_order_parent":"1"},{"menu_order":"5","item":"Item 5","menu_order_parent":"4"},{"menu_order":"6","item":"Item 6","menu_order_parent":"5"},{"menu_order":"7","item":"Item 7","menu_order_parent":"null"}][/FONT][/COLOR]

Y a la hora de mostrar los datos, de la siguiente manera:
Insertar CODE, HTML o PHP:
<?php
mysql_connect("localhost", "usuario", "contraseña");
mysql_select_db("db");


$sql = mysql_query("SELECT* FROM config WHERE option_name='menu_order'");
$fetch = mysql_fetch_array($sql);
$datos = json_decode($fetch['option_value'], true);
function tieneHijos($rows, $id) {
  foreach ($rows as $row) {
    if ($row['menu_order_parent'] == $id)
      return true;
  }
  return false;
}
function construirMenu($rows, $parent=0)
{
  $result = "<ol class=\"sortable\">";
  foreach ($rows as $row)
  {
    if ($row['menu_order_parent'] == $parent){
      $result.= "<li id=\"menuItem_{$row['menu_order']}\"><div data-id=\"{$row['menu_order']}\">{$row['item']}";
      if (tieneHijos($rows, $row['menu_order']))
        $result.= construirMenu($rows, $row['menu_order']);
      $result.= "</div></li>";
    }
  }
  $result.= "</ol>";


  return $result;
}
echo construirMenu($datos);
?>

Y listo, ya me muestra los resultados en orden.

Espero que alguien que haya tenido el mismo problema le ayude...

Por cierto, para el menu ordenable estoy utilizando la libreria nestedSortable de este repositorio:
https://github.com/ilikenwf/nestedSortable
 
Atrás
Arriba