0

我有一个示例脚本

<?php
class level_price extends CI_Controller {
   function __construct() {
        parent::__construct();
        session_start();
        $this->load->library('encrypt');
    }

    function index()
    {
         if(!isset($_SESSION['uname'])){
            redirect(base_url().'admin.php/login');
        }
        $data['users']=$this->db->query("SELECT count(*)AS user FROM user_table")->result_array();
        $data['pro_users']=$this->db->query("SELECT count(*)AS pro_user FROM user_table WHERE membership_type <>0")->result_array();
        $this->load->model('level_model');
        $data['level_list']=$this->level_model->get_all_level();
        $this->load->view('header',$data);
        $this->load->view('level_price');
        $this->load->view('footer');
    }


    function add_level()
      {
          if(!isset($_SESSION['uname']))
              {
                redirect(base_url().'admin.php/login');
              }
         $this->load->model('level_model');
         $data['users']=$this->db->query("SELECT count(*)AS user FROM user_table")->result_array();
         $data['pro_users']=$this->db->query("SELECT count(*)AS pro_user FROM user_table WHERE membership_type <>0")->result_array();
         if(count($_POST))
           {
              $data['msg']=$this->level_model->add_level();
           }
         $this->load->view('header',$data);
         $this->load->view('add_level',$data);
         $this->load->view('footer');
      }

      function edit_level($id){
           if(!isset($_SESSION['uname'])){
            redirect(base_url().'admin.php/login');
        }
            $this->load->model('level_model');
            $data['level_id'] = $id;
            $data['users']=$this->db->query("SELECT count(*)AS user FROM user_table")->result_array();
            $data['pro_users']=$this->db->query("SELECT count(*)AS pro_user FROM user_table WHERE membership_type <>0")->result_array();
            if(count($_POST))
             {
              $data['msg']=$this->level_model->edit_level($id);

             }
            $data['level_info'] = $this->level_model->get_level($id);
            $this->load->view('header',$data);
            $this->load->view('edit_level',$data);
            $this->load->view('footer');

      }
}

?>

正如你所看到的,我在每个函数中总是有这两行

$data['users']=$this->db->query("SELECT count(*)AS user FROM user_table")->result_array();
$data['pro_users']=$this->db->query("SELECT count(*)AS pro_user FROM user_table WHERE membership_type <>0")->result_array();

现在我想要一个替代品,以便自动调用这两个函数

说点什么,我定义了一个返回数组的函数

当我写这个脚本时

echo pro_user(), 然后显示 pro_user 数量

在 application/admin/config/autoload.php 中说

我已经添加了这个脚本

$autoload['model'] = array('special_model');

special_model中的函数是这样的

function  pro_user()
        {
            $data['pro_users']=$this->db->query("SELECT count(*)AS pro_user FROM user_table WHERE membership_type <>0")->result_array();
            echo $data['pro_users']['pro_user'];
        }

在视图 php 中我想要这样的东西 想要写这样的东西

<a data-rel="tooltip" title="" class="well span3 top-block" href="#">
                    <span class="icon32 icon-color icon-star-on"></span>
                    <div>Pro Members</div>
                    <div><?php $this->special_model->pro_user();?></div>
                    <span class="notification green">4</span>
                </a>

但我收到这样的错误

A PHP Error was encountered

Severity: Notice

Message: Undefined index: pro_user

Filename: models/special_model.php

Line Number: 12
4

3 回答 3

1

您可以在 ci_controller 中定义这些,每个控制器都对其进行扩展,因此您也可以在每个控制器功能中使用它们

system/core/codeigniter.php 

改变

class CI_Controller {

    private static $instance;

class CI_Controller {

    private static $instance;
        public $pro_users;
        public $any_thing ;

然后在__construct() 同一页面中的函数末尾

添加

$this->pro_users = $this->db->query("SELECT count(*)AS pro_user FROM user_table WHERE membership_type <>0")->result_array();

现在在每个控制器中,您都可以通过调用

$this->pro_users
于 2013-05-29T12:35:14.737 回答
0

我认为最好的解决方案是编写一个帮助程序并将其加载到自动加载中。

例如

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

function alphabetArray() {
    $alph = array();
    for ($i=65; $i<=90; $i++) {
        array_push($alph, chr($i));
    }
    return $alph;
}

现在我可以调用任何代码(视图中的代码)

<?php
     echo "|";
     foreach (alphabetArray() as $alphabet) {
     echo '<a href="#"> '.$alphabet.' </a> |';
}
?>

如您所见,我的alphabetArray()功能是“全局”功能,可以在模型/视图/控制器中使用

于 2013-05-29T11:53:37.770 回答
0

我认为最好的方法是编写一个codeigniter钩子并使用该函数设置变量的值,然后将该变量传递给视图。在视图中调用模型函数会破坏 MVC 模式。

您可以使用post_controlleror post_controller_constructor,更多信息:

于 2013-05-29T08:41:31.213 回答