将数组从Codeigniter传递到Smarty

时间:2015-04-21 18:22:30

标签: codeigniter smarty

我使用Codeigniter和Smarty作为我的模板引擎。我有一个主模板 (master.tpl)我在我的页面模板中继承。在我的一个页面中,我试图访问从数据库中提取的数据,但我还没有成功。

我的模型看起来像这样:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Class company extends CI_Model
{
    public function __construct()
    {       
        // Call the constructor
        parent::__construct();

        // Load database access 
        $this->load->database(); 
    }

    public function get_companies()
    {
        // Query the companies table
        $query = $this->db->get('companies');
        return $query->result();
    }
}

我的控制器看起来像这样:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Companies extends CI_Controller {

    public function index()
    {
        // Load the companies model
        $this->load->model('company');
        $companies = $this->company->get_companies();
        $data['complist'] = $companies;
        //load the department_view
        $this->load->view('companies',$data);
    }
}

这是我的网页浏览的主要部分:

...
<tbody>
    {foreach from=$companies item=company}
        <li>{$data.name}</li>
    {/foreach}
</tbody>
...

在我的master.tpl中,在页面视图中继承的代码块如下所示:     ...              {block name = content} {/ block}          ...

我只是想显示从我的数据库中检索到的公司列表,但我无法弄清楚如何访问保存数据的数组。我做错了什么?

编辑: 以下是我收到的错误消息:

Message: Undefined index: companies
Message: Trying to get property of non-object

2 个答案:

答案 0 :(得分:0)

尝试制作像$data['companies'] = $this->company->get_companies();

这样的公司

更好地自动加载config / autoload.php中的数据库库。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Companies extends CI_Controller {

public function index() {
    $this->load->model('company');
    $data['companies'] = $this->company->get_companies();

    $this->load->view('companies',$data);
}
}

模型

让模型类将公司更改为公司

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Company extends CI_Model {

    public function __construct() {       
       parent::__construct(); 
    }

    public function get_companies() {

    $query = $this->db->get('companies');

    if ($query->num_rows() > 0) {
    return $query->result();

    // or 

    // return $query->result_array();

    } else {

    return false;

    }

}

在视图中我知道你使用smarty但是php方式示例普通的php在视图上有巧妙的例子。

<?php foreach ($companies as $company) {?>

<?php echo $company['name'];?>

<?php }?>

Smarty的

<tbody>
    {foreach from = $companies item = $company}
        <tr>
        <td>{$company.name}</td>
        </tr>
    {/foreach}
</tbody>

答案 1 :(得分:0)

正如Tpojka所说,我试图访问错误的变量,所以我不得不改变它,但foreach循环中的语法是$ companies-&gt; name。这就是模板中现在的循环:

{foreach from=$companies item=company}
    <tr>
        <td>{$company->name}</td>
        <td>{$company->address}</td>
        <td>{$company->city}</td>
        <td><a href="tel:{$company->phone}">{$company->phone}</a><td>
        <td><a href="mailto:{$company->email_address}">{$company->email_address}</a></td>
        <td class="center">
            <a class="btn btn-success" href="#">
                <i class="fa fa-search-plus "></i>  
            </a>
            <a class="btn btn-info" href="#">
                <i class="fa fa-edit "></i>  
            </a>
            <a class="btn btn-danger" href="#">
                <i class="fa fa-trash-o "></i> 
            </a>
        </td>
    </tr>
{foreachelse}
    No records found.
{/foreach}