[英]How can I return JSON with all modules?
I would like to get my JSON with all modules like this: 我想使用以下所有模块获取JSON:
[
{
"id":"1",
"seccion":"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",
"seccion":"Compras",
"data":
[
{
"id":"22",
"icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png",
"value":"Compras",
"seccion_id":"2",
"url":"http:\/\/localhost\/storeLTE\/compras\/compras"
}
]
}
]
But my JSON is returning this: 但是我的JSON返回此:
{
"seccions":
{
"0":
{
"id":"22",
"icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png",
"value":"Compras",
"seccion_id":"2",
"url":"http:\/\/localhost\/storeLTE\/compras\/compras"},"index":1
}
}
The controller is just returning my last module, but I dont know why. 控制器只是返回我的最后一个模块,但我不知道为什么。 How can I fix it and change my controller method to return all modules?
如何修复它并更改控制器方法以返回所有模块?
Controller 控制者
public function getModules($module_id){
if ($this->session->userdata('log')){
$data = $this->session->userdata('log');
$menu = array();
$seccions = $this->module->get_rows();
foreach ($seccions as $index => $seccion) {
$modules = $this->module->query("SELECT CONCAT('".$seccion['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 = $seccion[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1");
//assuming you get 1 row only from the above query
if (!empty($modules)) {
$modules['index'] = $index;
$menu['seccions'] = $modules;
}
}
foreach ($seccions as $item) {
array_push($menu,$item);
}
$this->json($menu);
$this->load->view('modules_view',$menu);
}
}
Model 模型
public function get_rows(){
$this->db->select('id,seccion');
$this->db->from('storelte_seccion');
return $this->db->get()->result_array();
}
public function query($query){
return $this->db->query($query)->result_array();
}
View 视图
<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>
You are overwriting your results in the first "foreach" with this statement: 您将使用以下语句在第一个“ foreach”中覆盖结果:
$menu['seccions'] = $modules;
In every cycle, if the SQL query is successful, you simply overwrite all previous data by current value. 在每个周期中,如果SQL查询成功,则只需用当前值覆盖所有以前的数据即可。
It later corresponds to the output: 稍后对应于输出:
{
"seccions":
{
"0": { ... }
}
}
Your controller code should go like this: 您的控制器代码应如下所示:
public function getModules($module_id){
if ($data = $this->session->userdata('log')){
$seccions = $this->module->get_rows();
foreach ($seccions as $index => $seccion) {
// Consider using fetchAll() or similar method
$seccions[$index]['data'] = $this->module->query("SELECT CONCAT('".$seccion['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 = $seccion[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1");
}
$this->json($seccions);
$this->load->view('modules_view', $seccions);
}
}
Just consider using fetchAll() or similar method after $this->module->query() to fetch all data at once. 只需考虑在$ this-> module-> query()之后使用fetchAll()或类似方法一次获取所有数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.