Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, eu tenho um nestable pra salvar os dados no banco de dados.
Pra quem não conhece o nestable é um sistema de de menus, igual o do wordpress.
Bom o nestable retorna todos os dados da lista dentro de um textarea, e esses dados é retornado via json.
1º var_dump
array(1) {
["menu"]=>
string(138) "[{"id":1},{"id":2,"children":[{"id":3},{"id":4},{"id":5,"children":[{"id":6},{"id":7},{"id":8}]},{"id":9},{"id":10}]},{"id":11},{"id":12}]"
}
2º var_dump
string(138) "[{"id":1},{"id":2,"children":[{"id":3},{"id":4},{"id":5,"children":[{"id":6},{"id":7},{"id":8}]},{"id":9},{"id":10}]},{"id":11},{"id":12}]"
Bom eu dei um var_dump na variavel que armazena os dados do textarea, o json. Ele está me retornando isso aqui. Eu criei um for, para separar as chaves e os valores mais sem sucesso!
Alguém tem alguma solução?
Att,
Alisson Maciel
Eu uso o nestable para esse mesmo fim!
Vou te mostrar como eu fiz.
<?php
$resultado = AQUI VEM SEU JSON;
$resultado = json_decode($resultado, true);
if(!empty( $resultado ) ){
$templateMenu .= "<ul>";
for( $i = 0; $i < count( $resultado ); $i++ ){
$templateMenu .= "<li><a href=\"#\">".$resultado[$i]['id']."</a></li>";
}
$templateMenu .= "</ul>";
}
echo $templateMenu;
?>
Se tiver childrens, só usar mais um for dentro deste que já existe, utilizando a index 'children'.
>
Eu uso o nestable para esse mesmo fim!
Vou te mostrar como eu fiz.
<?php
$resultado = AQUI VEM SEU JSON;
$resultado = json_decode($resultado, true);
if(!empty( $resultado ) ){
$templateMenu .= "<ul>";
for( $i = 0; $i < count( $resultado ); $i++ ){
$templateMenu .= "<li><a href=\"#\">".$resultado[$i]['id']."</a></li>";
}
$templateMenu .= "</ul>";
}
echo $templateMenu;
?>
Se tiver childrens, só usar mais um for dentro deste que já existe, utilizando a index 'children'.
Bom gostei, muito bom, possui children sim, porque com o nestable, estou dando a possibilidade utilizar varios niveis, então eu não vou restringir muito, mais eu vou restringir apenas no segundo nivel, ou seja, vou deixar categorias e subcategorias apenas. Com isso preciso da sua ajuda agora que você me deu essa luz.
Eu até encontrei uma forma semelhante a sua pra recuperar os ID's do primeiro nivel, ou seja, as categorias.
Fiz assim:
$json = json_decode($save['menu'], true);
foreach ($json as $key => $value):
// echo $key. '<br>';
$IDPAI = $value['id'];
echo '<pre>';
echo $IDPAI;
echo '</pre>';
endforeach;
Bom, mesmo assim, vou utilizar o seu exemplo, agora vou ver se consigo recuperar os children, você informou que devo recuperar pela variavel $resultado[$i]['id'], correto?
Isso, com a index ['id'], faço uma consulta no banco de dados para trazer as informações correspondentes (como o nome da seção, o slug, etc).
Para usar o children, faço assim (não testei, escrevi aqui rapidinho):
<?php
$resultado = AQUI VEM SEU JSON;
$resultado = json_decode($resultado, true);
if(!empty( $resultado ) ){
$templateMenu .= "<ul>";
for( $i = 0; $i < count( $resultado ); $i++ ){
$templateMenu .= "<li><a href=\"#\">".$resultado[$i]['id']."</a>";
if( !empty( $resultado[$i]['children'] ) ){
$templateMenu .= "<ul>";
$segundoNivel = $resultado[$i]['children'];
for( $y = 0; $y < count( $segundoNivel ); $y++ ){
$templateMenu .= "<li>".$segundoNivel[$y]['id']."</li>";
}
$templateMenu .= "</ul>";
}
$templateMenu .= "</li>";
}
$templateMenu .= "</ul>";
}
echo $templateMenu;
?>
Use para decodificar, tem dois exemplos
http://php.net/manual/pt_BR/function.json-decode.php