Доступные данные для всех представлений в кодеигниторе - программирование
Подтвердить что ты не робот

Доступные данные для всех представлений в кодеигниторе

У меня есть переменная, содержащая данные, которые должны присутствовать на всем сайте. Вместо того, чтобы передавать эти данные в каждый вид каждого контроллера, мне было интересно, есть ли способ сделать эти данные доступными для каждого вида на сайте.

Pd. Хранение этих данных в качестве переменной сеанса /ci session cookie не является вариантом.

Большое спасибо.

4b9b3361

Ответ 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">