2013-04-23 36 views
14

Tôi có dữ liệu có thể thay đổi, nằm ngang trong toàn bộ trang web. Thay vì truyền dữ liệu này đến từng khung nhìn của mỗi bộ điều khiển, tôi đã tự hỏi liệu có cách nào để làm cho dữ liệu này có sẵn cho mỗi khung nhìn trong trang web hay không.Dữ liệu có sẵn cho tất cả các chế độ xem trong mã vạch

Pd. Lưu trữ dữ liệu này dưới dạng biến phiên/cookie phiên ci không phải là một tùy chọn.

Cảm ơn rất nhiều.

Trả lời

18

Tạo tệp MY_Controller.php và lưu tệp trong thư mục ứng dụng/lõi. Trong đó, một cái gì đó như:

class MY_Controller extends CI_Controller { 

    public $site_data; 

    function __construct() { 
     parent::__construct(); 
     $this->site_data = array('key' => 'value'); 
    } 
} 

Hiện đã có sẵn bộ điều khiển, chế độ xem, $this->site_data. Lưu ý rằng để làm việc này, tất cả các bộ điều khiển khác của bạn cần phải mở rộng MY_Controller thay vì CI_Controller.

+0

Hi .. phương pháp này sẽ được tải biến '$ site_data' ngay cả khi chúng ta gọi là một hàm bên trong bộ điều khiển của chúng tôi cập nhật db thay vì trả về một chế độ xem? – Rifky

+0

@Rifky Có thể là câu trả lời muộn, nhưng tôi đã tìm thấy nó ngay hôm nay. Có, nó sẽ có sẵn trong tất cả các bộ điều khiển của bạn mở rộng MY_Controller và tất cả các khung nhìn. – MarkSkayff

13

Bạn cần phải mở rộng CI_Controller để tạo ra một bộ điều khiển cơ sở:

http://ellislab.com/codeigniter/user-guide/general/core_classes.html

lõi/MY_Controller.php

<?php 

class MY_Controller extend CI_Controller { 

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

     //get your data 
     $global_data = array('some_var'=>'some_data'); 

     //Send the data into the current view 
     //http://ellislab.com/codeigniter/user-guide/libraries/loader.html 
     $this->load->vars($global_data); 

    } 
} 

controllers/welcome.php

class Welcome extend MY_Controller { 
     public function index() { 
      $this->load->view('welcome'); 
     } 
} 

views/welcome.php

var_dump($some_var);

Lưu ý: để có được điều này vars trong các chức năng hoặc các bộ điều khiển của bạn, bạn có thể sử dụng $this->load->get_var('some_var')

+0

Cảm ơn :) hoạt động tuyệt vời! – Steven

+0

Làm việc cho tôi! – racl101

0

bạn có thể sử dụng $ this-> tải-> vars ('varname', $ data); [hoặc chỉ tải dữ liệu ở chế độ xem thứ nhất] bật và sử dụng trong bất kỳ chế độ xem đã tải nào sau

1

Nếu đây không phải là Biến (giá trị tiếp tục thay đổi) thì tôi sẽ đề xuất tạo hằng số trong tệp constant.php trong thư mục cấu hình trong thư mục ứng dụng, nếu đó là biến tiếp tục thay đổi thì tôi sẽ đề xuất tạo bộ điều khiển tùy chỉnh trong thư mục lõi (nếu không tồn tại, hãy tiếp tục tạo thư mục "lõi") trong thư mục ứng dụng. Cần thực hiện một số thay đổi trong bộ điều khiển khác như đã đề cập ở đây: mở rộng bộ điều khiển mới của bạn với lớp "CI_Controller". Ví dụ

open-php-tag nếu (! Được xác định ('BASEPATH')) thoát ('Không cho phép truy cập tập lệnh trực tiếp'); lớp LD_Controller kéo dài CI_Controller {} cận php-tag

Đây LD_ là từ khóa tùy chỉnh của tôi, nếu bạn muốn thay đổi, bạn có thể thay đổi nó trong file config.php dưới dòng # 112 như ở đây: $ config ['subclass_prefix'] = 'LD_'; và mở rộng lớp này trong tất cả các trình điều khiển của bạn là "lớp Mynewclass mở rộng LD_Controller .. Và trong LD_controller bạn đã viết phương thức mà bạn muốn xác định biến/mảng của các giá trị & gọi mảng đó trong tất cả các ứng dụng như được hiển thị ở đây: xác định biến: var $ data = array(); Phương pháp để có được giá trị từ db qua lớp mẫu:

function getbooks() 
{ 
    $books = $this->mybooks_model->getbooks(); //array of records 
    $this->data = array('books'=>$books); 
} 

gọi biến này trong các quan điểm: print_r ($ this-> Xóa dữ liệu [ 'cuốn sách']);); bạn sẽ nhận được tất cả các giá trị mảng ... ở đây chúng tôi đảm bảo rằng thông số "$ data" ít nhất phải được chuyển nếu không có vấn đề gì bạn có thể xác định tham số $ data này vào dạng xem như được hiển thị ở đây: $ this- > load-> view ('mybookstore', $ data);

sau đó nó hoạt động hoàn toàn tốt ,,, yêu để chia sẻ ... có một niềm vui làm việc bạn bè

0

Sử dụng phiên trong bộ điều khiển của bạn

$this->session->set_userdata('data');

sau đó hiển thị chúng theo quan điểm của bạn

$this->session->userdata('data');

Hoặc bao gồm trang trong tệp chế độ xem cơ sở ví dụ: index.php

include "page.php";

sau đó trong page.php,

thêm $this->session->userdata('data'); đến bất kỳ yếu tố hoặc div

thì đây sẽ hiển thị trên tất cả các quan điểm của bạn

2

Set trong application/config/autoload .php

$autoload['libraries'] = array('config_loader'); 

Tạo application/thư viện/Config_loader.php

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

class Config_loader 
{ 
    protected $CI; 

    public function __construct() 
    { 
     $this->CI =& get_instance(); //read manual: create libraries 

     $dataX = array(); // set here all your vars to views 

     $dataX['titlePage'] = 'my app title'; 
     $dataX['urlAssets'] = base_url().'assets/'; 
     $dataX['urlBootstrap'] = $dataX['urlAssets'].'bootstrap-3.3.5-dist/'; 

     $this->CI->load->vars($dataX); 
    } 
} 

trên quan điểm của bạn

<title><?php echo $titlePage; ?></title> 
<!-- Bootstrap core CSS --> 
<link href="<?php echo $urlBootstrap; ?>css/bootstrap.min.css" rel="stylesheet"> 
<!-- Bootstrap theme --> 
<link href="<?php echo $urlBootstrap; ?>css/bootstrap-theme.min.css" rel="stylesheet"> 
Các vấn đề liên quan