Ajuda com menu ordenável jquery e php

  • Autor Autor andilien
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
A

andilien

Beta
Usuário com poucas negociações! Use sempre o saldo do 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:
Inserir CODE, HTML ou 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
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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:
Inserir CODE, HTML ou 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:
Inserir CODE, HTML ou 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:
Inserir CODE, HTML ou 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
 
Voltar
Topo