Autor
|
Tema: problema al pasar indexes de json a la vista con foreach (Leído 3,870 veces)
|
geshiro
Desconectado
Mensajes: 178
|
bueno mi error es que me da invalid argument supplied for foreach() y no me esta accediento bien al índice del arreglo, estoy usando codeigniter pero como pudiera arreglar ese error mi json del la función del controlador es [{"id":"1","sección":"Inventario","data":[{"id":"11","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png","value":"Productos","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/inventario\/product"},{"id":"14","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png","value":"Provedores","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/provedor\/provedor"}]},{"id":"2","sección":"Compras","data":[{"id":"22","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png","value":"Compras","seccion_id":"2","url":"http:\/\/localhost\/storeLTE\/compras\/compras"}]}]
controller public function getModules($id_module){ if($this->session->userdata('log')){ $data = $this->session->userdata('log'); $seccions = $this->module->get_rows(); foreach ($seccions as $index => $sección){ $modules = $this->module->query("SELECT CONCAT('".$sección['id']."',storelte_modulo.id) AS id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $sección[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1"); $seccions[$index]['data']= $modules; if (!count($seccions[$index]['data'])) unset($seccions[$index]); } foreach ($seccions as $item) $this->json($menu); } }
model public function get_rows(){ $this->db->select('id,sección'); $this->db->from('storelte_seccion'); return $this->db->get()->result_array(); } public function query($query){ return
<div class="row"> <h3 class="text-center">Welcome to storeLTE, click a module below to get started!</h3> <div class="home_module_list"> <div class="module_item"> <?php foreach ($seccions as $session) { ?> <div class="module_item" title="<?= $session['value'];?>"> <a href="<?= $session['url']; ?>"><img src="<?= $session['icon']; ?>"/></a> <a href="<?= $session['url']; ?>"><?= $session['value']?></a> </div> <?php } ?> </div> </div> </div>
|
|
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Hola. ¿Estás intentando usar un JSON en conjunto con un foreach?
Según entiendo, la respuesta JSON es solo una cadena, y lo más normal es que el foreach no lo admita como válido.
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
geshiro
Desconectado
Mensajes: 178
|
y como pudiera modificar mi json para poder usarlo en el foreach ya sea por como [data:{}] etc
|
|
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
La verdad es que solo 1 vez usé codeigniter y fue hace mucho. Deberías enviar la variable a la vista como lo haces normalmente, sin convertirlo en json. ¿No puedes usar otro método en el controlador que devuelva la vista con los datos en vez de responder json? (Para que no reemplaces el método que ya tienes, por si lo estás usando) $this->load->view('results_view', $data);
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
[u]nsigned
Desconectado
Mensajes: 2.397
JS/Node developer
|
Como te dicen, para PHP el recurso JSON no es un objeto, solo es un string. Para pasarlo a un arreglo de PHP tenes que usar la funcion json_decodeCodigo ilustrativo de ejemplo: <?php $json = '[{"id":"1","sección":"Inventario","data":[{"id":"11","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png","value":"Productos","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/inventario\/product"},{"id":"14","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png","value":"Provedores","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/provedor\/provedor"}]},{"id":"2","sección":"Compras","data":[{"id":"22","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png","value":"Compras","seccion_id":"2","url":"http:\/\/localhost\/storeLTE\/compras\/compras"}]}]'; ?>
|
|
|
En línea
|
No hay atajo ante la duda, el misterio se hace aquí... Se hace carne en cada uno, el misterio es existir!
|
|
|
geshiro
Desconectado
Mensajes: 178
|
como pudiera hacerlo?
|
|
|
En línea
|
|
|
|
WHK
|
Hola, no estas trabajando con datos jSon, tu estas trabajando con arrays, el resultado lo estas enviando por json pero el procesamiento de datos va por arrays. El problema que veo es que no estan llegando los valores al foreach y por eso te esta arrojando el error, yo pienso que el problema se encuentra en tu consulta sql a traves del active record. En tu código antes del foreach ponle una condicional para controlar si vienen los datos o no y con eso debiera bastar para darte cuenta que simplemente los datos no vienen. if($this->session->userdata('log')){ $data = $this->session->userdata('log'); $menu = array(); $seccions = $this->module->get_rows(); if($seccions){ foreach ($seccions as $index => $sección){ $menu[] = $sección; $modules = $this->module->query("SELECT CONCAT('".$sección['id']."',storelte_modulo.id) AS id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $sección[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1"); $seccions[$index]['data']= $modules; if (!count($seccions[$index]['data'])) unset($seccions[$index]); } $this->json($menu); } } Además no necesitas dos foreach, basta con el primero y ahi incluyes el push del array. También puedes reemplazar array_push por $var[] = ... , eso agrega un item al final del stack. Revisa tu consulta SQl porque me huele que ahi esta tu problema. Lanza un echo a tu consulta sql y pegalo en tu servidor mysql y vee que error te arroja o ejecuta print_f($this->db). Estás usando codeigniter no? Saludos.
|
|
« Última modificación: 22 Agosto 2016, 03:02 am por WHK »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Resuelto] problema con foreach en php para hacer insert
PHP
|
tecasoft
|
3
|
2,873
|
19 Octubre 2015, 23:55 pm
por tecasoft
|
|
|
problema con los indexes en foreach en codeigniter
PHP
|
geshiro
|
0
|
2,136
|
15 Agosto 2016, 18:39 pm
por geshiro
|
|
|
se puede pasar contenido de txt a .json?
Desarrollo Web
|
bengy
|
1
|
4,258
|
17 Octubre 2016, 05:43 am
por engel lex
|
|
|
PHP: pasar de Object a JSON
PHP
|
JonaLamper
|
2
|
2,580
|
3 Abril 2017, 18:14 pm
por engel lex
|
|
|
Problema en PHP, Foreach (Numeros del 1 al 100)
PHP
|
Ali Baba
|
4
|
7,556
|
13 Junio 2017, 06:17 am
por #!drvy
|
|