2010-03-26 2 views
9

Я использую $ данных во всех моих взглядах $this->load->view('my_view', $data);CodeIgniter глобальные переменный

Я также AutoLoad контроллера после этого руководства Extending Core Controller

Но я хочу сделать $ данных глобальным, поскольку в views есть боковая панель, которая является постоянной для всего проекта и отображает информацию, полученную через db в автозагрузке контроллера

В настоящее время мне приходится вручную записывать $ data ['todo'] для каждого и извлекать информацию из автозагруженной модели .

Thank you.

ответ

16

1: Создание MY_Controller в application/libraries со следующими:

class MY_Controller extends Controller { 
    var $data;  
    //constructor function    
} 

2: Заменить Controller на MY_Controller во всех ваших файлов контроллера и загружать взгляды с $this->data

class Contact extends Controller { //to.. } 

class Contact extends MY_Controller { 
$this->load->view('contact_view', $this->data); 
} 

таким образом вы можете выполнять функции по умолчанию, которые применимы для всего сайта в MY_Controller, как и параметры загрузки.

+0

Это не работает для меня !! – JoeM05

+0

Если это не сработает, попробуйте поместить MY_Controller.php info application/core И если вы измените префикс на что-то, тогда обязательно измените его в config.php @ $ config ['subclass_prefix'] –

5

Я столкнулся с подобной проблемой ранее сегодня. Я обнаружил, что проще, чем глобалы, использовать константы. Вы можете определить файл констант, которые будут загружаться из файла index.php:

// Include additional constants 
$defines_file = 'includes/defines.php'; 
if (file_exists($defines_file)) 
{ 
    require_once($defines_file); 
} 

Затем вы можете добавить свои константы в defines.php файла:

define(MY_CONSTANT,'my constant info'); 

Таким образом, они будут доступны в любом файле по всей системе либо напрямую: echo MY_CONSTANT;, либо вы можете назначить их переменным.

Я решил, что этот путь будет проще для меня, так как у меня будет только 1 место, где нужно, если мне нужно изменить константы.

Подробнее: http://codeigniter.com/forums/viewthread/56981/#280205

+0

Его хорошая идея, и я уже использую для всех постоянных значений, но это не подходит для меня, потому что я получаю данные из db, которые отличаются друг от друга каждый раз. Использование другого сценария include не позволит мне использовать встроенную базу данных CI, поэтому мне пришлось идти этим путем. – Shishant

-1

Вместо того, чтобы данные просматривать глобальный, я бы рекомендовал использовать HMVC построить модуль, чтобы произвести этот вид боковой панели. HMVC - хороший чистый способ кодирования частичных представлений.

+3

HVMC переполнен, когда вы говорите о чем-то столь же простом, как частичные представления. Если у вас есть частичный вид, который мало меняет, просто загрузите представление в константу: 'define ('MY_VIEW', $ this-> load-> view ('my_view', '', TRUE);' - затем просто повторите константу MY_VIEW в своем увеличенном виде. HVMC добавляет много багажа для чего-то столь же простого, как это. –

+0

Где в коде загружаются данные, необходимые для частичного просмотра? –

1

Я использовал вспомогательную функцию для вызова глобальной функции!

например.

function get_user($userid){ 
    $CI =& get_instance(); 

    $query = $CI->db->get_where('users', array('id' => $userid), 1, 0); 
    foreach ($query->result() as $row){ 
     // Return a object with userdata! 
     return $row; 
    } 
} 

Теперь у меня есть доступ к моему UserData везде ..

Смежные вопросы