Доступные данные для всех представлений в кодеигниторе
У меня есть переменная, содержащая данные, которые должны присутствовать на всем сайте. Вместо того, чтобы передавать эти данные в каждый вид каждого контроллера, мне было интересно, есть ли способ сделать эти данные доступными для каждого вида на сайте.
Pd. Хранение этих данных в качестве переменной сеанса /ci session cookie не является вариантом.
Большое спасибо.
Ответы
Ответ 1
Создайте файл MY_Controller.php
и сохраните его в папке приложения/ядра. В нем что-то вроде:
class MY_Controller extends CI_Controller {
public $site_data;
function __construct() {
parent::__construct();
$this->site_data = array('key' => 'value');
}
}
На всех контроллерах теперь доступны представления $this->site_data
.
Обратите внимание, что для этого все остальные контроллеры должны расширять MY_Controller
вместо CI_Controller
.
Ответ 2
Вам нужно расширить CI_Controller для создания базового контроллера:
http://ellislab.com/codeigniter/user-guide/general/core_classes.html
ядро /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);
}
}
Контроллеры/welcome.php
class Welcome extend MY_Controller {
public function index() {
$this->load->view('welcome');
}
}
вид/welcome.php
var_dump($some_var);
Примечание. Чтобы получить эти вары в ваших функциях или контроллерах, вы можете использовать $this->load->get_var('some_var')
Ответ 3
Если это не переменная (значение продолжает меняться), я бы предложил создать константу в файле constant.php в каталоге config в каталоге приложений, если она меняет переменную, то я бы предложил создать пользовательский контроллер в основной папке (если не существует, перейдите в папку "ядро" создания) в папке приложений. Необходимо сделать некоторые изменения в другом контроллере, как указано здесь:
расширьте свой новый контроллер классом "CI_Controller". Пример
open-php-tag, если (! defined ('BASEPATH')) exit ( "Нет прямого доступа script разрешен" );
класс LD_Controller расширяет CI_Controller {
}
крупный PHP-тег
Здесь LD_ - это мое настраиваемое ключевое слово, если вы хотите изменить его, вы можете изменить его в файле config.php в строке # 112, как показано здесь: $config ['subclass_prefix'] = 'LD_';
и расширьте этот класс во всех ваших контроллерах, поскольку "класс Mynewclass расширяет LD_Controller..
И в LD_controller вы должны написать метод, в котором вы хотите определить переменную/массив значений, и вызвать этот массив во всем приложении, как показано здесь:
определяющая переменная:
var $data = array();
Способ получения значений из db через класс Model:
function getbooks()
{
$books = $this->mybooks_model->getbooks(); //array of records
$this->data = array('books'=>$books);
}
чтобы вызвать эту переменную в представлениях: print_r ($ this- > data ['books']);); вы получите все значения массива... здесь мы должны убедиться, что хотя бы один параметр "$ data" должен быть передан, если не проблема, вы можете определить этот параметр $data в представлении, как показано здесь:
$ This- > load- > Вид ( 'mybookstore', $данных);
тогда он работает абсолютно нормально,, люблю делиться... веселиться с друзьями
Ответ 4
вы можете использовать $this- > load- > vars ('varname', $data); [или загружать данные только с 1-го вида] onse и использовать в любых загруженных представлениях после этого
Ответ 5
Использование сеансов в контроллерах
$this->session->set_userdata('data');
затем отобразите их в своем представлении
$this->session->userdata('data');
Или включить страницу в файл базового представления, например index.php
include "page.php";
затем в page.php,
добавить $this->session->userdata('data');
к любому элементу или div
то это будет отображаться во всех ваших представлениях
Ответ 6
Установите приложение /config/autoload.php
$autoload['libraries'] = array('config_loader');
Создать приложение/библиотеки/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);
}
}
в представлениях
<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">