2015-09-07 47 views
0

我正在开发模块安装控制器。当我安装一个模块时,按钮应该显示为修改。但不会因为某些原因未正确查看数据

我已经安装了模块的幻灯片如图我VAR转储结果如下

array (size=1) 
    0 => string 'slideshow' (length=9) 

但是,当我重新加载/刷新我的网页属于该模块的按钮仍然说安装。

问:我怎样才能确保如果安装模块按钮,然后让它说修改

查看

<div class="container-fluid"> 
<div class="row"> 
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> 
<div class="page-header"> 
<h1>Modules</h1> 
</div> 
</div> 
</div> 
<div class="row"> 
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> 
<div class="table-responsive"> 
<table class="table table-bordered table-hover"> 
<tbody> 

<?php if ($extensions) { ?> 

<?php foreach ($extensions as $extension) { ?> 
<tr> 

<td><?php echo $extension['name']; ?></td> 

<td class="text-right"> 
<?php if (!$extension['installed']) { ?> 
<a href="<?php echo $extension['install']; ?>" class="btn btn-success">Install</a> 
<?php } else { ?> 
<a href="<?php echo $extension['modify']; ?>" class="btn btn-primary">Modify</a> 
<?php } ?> 
</td> 

</tr> 
<?php }?> 

<?php } ?> 

</tbody> 
</table> 
</div> 
</div> 
</div> 
</div> 

控制器

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 

class Module extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->model('extension/model_extension'); 
     $this->load->model('extension/model_module'); 
    } 

    public function install() { 
     $this->model_extension->install('module', $this->uri->segment(4)); 

     redirect('extension/module'); 
    } 

    public function index() { 
     $data['extensions'] = array(); 

     $extensions = $this->model_extension->get_installed('module'); 

     echo '<div class="container-fluid"'; 
     echo '<pre>'; 
     var_dump($extensions); 
     echo '</pre>'; 
     echo '</div>'; 

     $files = glob('controllers/modules/*.php'); 

     if ($files) { 
      foreach ($files as $file) { 

       $extension = basename($file, '.php'); 

       $this->lang->load('module/'. $extension, 'english'); 

       $data['extensions'][] = array(
        'name' => $this->lang->line('heading_title'), 
        'installed' => in_array($extension, $extensions), 
        'install' => site_url('extension/module/install' .'/'. strtolower($extension)), 
        'modify' => site_url('module/' . $extension) 
       ); 
      } 
     } 

     $this->load->view('template/common/header_view'); 
     $this->load->view('template/extension/module_view', $data); 
     $this->load->view('template/common/footer_view'); 
    } 
} 

型号

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 

class Model_extension extends CI_Model { 

    public function get_installed($type) { 
     $extension_data = array(); 

     $this->db->select('*'); 
     $this->db->from($this->db->dbprefix . 'extension'); 
     $this->db->where('type', $type); 
     $this->db->order_by('code'); 
     $query = $this->db->get(); 

     foreach ($query->result_array() as $result) { 
      $extension_data[] = $result['code']; 
     } 

     return $extension_data; 
    } 

    public function install($type, $code) { 
     $data = array(
      'type' => $type, 
      'code' => $code 
     ); 

     $this->db->set($data); 
     $this->db->insert('extension'); 
    } 

    public function uninstall($type, $code) { 
     $this->db->where('type', $type); 
     $this->db->where('code', $code); 
     $this->db->delete($this->db->dbprefix . 'extension'); 
    } 
} 

enter image description here

+0

什么是'var_dump()'的? –

+0

@JoaquínOvar dump是安装的扩展。 – user4419336

回答

1

你知道,如果是通过评估该

in_array($extension, $extensions) 

哪里$extensions是这样

array(
    0 => "extension_name_1", 
    1 => "extension_name_2", 
) 

而且$extension阵列安装或没有扩展名是的方式是通过这个计算 PHP函数

basename($file, '.php'); 

PHP basename将返回(例如)extension_name_1.php所以它永远不会匹配您的任何安装的扩展的。

您应该取出basename扩展名,或将其添加到您的安装的扩展阵列的每个位置。

+0

但是我不能使它在**视图上正确**我有in_array的控制器属于幻灯片的按钮仍然表示安装。现在应该说修改。 – user4419336

+0

我准备在我的控制器上有这个in_array($ extension,$ extensions)。 – user4419336

+0

对不起,如果我不清楚。以幻灯片扩展为例。在'$ extensions'数组中你有'幻灯片',但是在你的'$ extension'里,你有'slideshow.php'。他们永远不会匹配。现在看到区别? –