将数组从 Codeigniter 传递到 Smarty

Passing an array from Codeigniter to 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 在页面视图中继承的代码块如下所示: ... {块名=内容}{/块} ...

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

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

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

尝试让公司像这样$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);
}
}

型号

制作模型 Class 将 company 更改为 Company

<?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 在视图中没有 smarty 只是示例。

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

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

<?php }?>

聪明

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

正如 Tpojka 所提到的,我试图访问错误的变量,所以我不得不更改它,但是 foreach 循环中的语法是 $companies->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}