Глобальные переменные в представлении CodeIgniter - PullRequest
1 голос
/ 29 января 2011

Я следую учебному пособию по Nettuts для реализации поддоменов в стиле Basecamp с CodeIgniter.

В зависимости от вызывающего субдомена, таблица субдоменов в базе данных возвращает расширение, соответствующее этому субдомену.Так, скажем, для stackoverflow.mywebsite.com будет возвращено расширение sf, а папка с изображениями и CSS-файл, используемые по всему сайту, будут меняться в зависимости от этого расширения;например, images_sf, style_sf.css и т. д.

Теперь, каков наилучший способ получить это расширение в любом месте M, V или C?

Параметры:

  1. Cookies
  2. Динамическая установка переменной конфигурации CI
  3. Установите для нее переменную в MY_Controller и получите доступ к этой переменной с помощью $this-> в любом месте.
  4. Отправитьэта переменная от каждого контроллера к моделям, помощникам, представлениям или библиотекам.

Я пропустил какие-либо другие опции?Кроме того, какой из них будет наилучшим, если предположить, что он будет интенсивно использоваться во всем коде?

Спасибо

Ответы [ 2 ]

4 голосов
/ 30 января 2011

Лично я бы создал базовый контроллер для каждого сайта, который вы расширяете, и просто использовал бы $this->load->vars($data); для загрузки информации, которую вы хотите установить глобально.

В конструкторе вашего конкретного базового контроллера просто загрузите данные в глобальные представления следующим образом.

$data->some_var = "some value";
$this->load->vars($data);

И затем во всех ваших представлениях, загруженных этим контроллером (или базовым контроллером), вы можете использовать переменную $some_var непосредственно в представлении.

2 голосов
/ 30 января 2011

Ваша лучшая ставка, вероятно, вариант 3, поместить его в конструктор вашего базового контроллера, возможно, MY_controller или что бы вы ни расширяли Controller (теперь CI_Controller с официальным выпуском CI2.0)вы получаете расширение, возможно, нет причины иметь таблицу базы данных, поскольку вы можете просто сохранить ее в файле конфигурации

Я бы сделал что-то подобное ... в MY_Controller.php (это синтаксис CI 2.0)

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

class MY_Controller extends CI_Controller {

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

           $subdomain_arr = explode('.', $_SERVER['HTTP_HOST'], 2);  
           $subdomain_name = $subdomain_arr[0];  

           $this->load->config('sub_prefix');
           $pre_arr = $this->config->item('prefixes');

           /* Check to make sure the subdomain name is in the config array */
           $this->prefix = isset($pre_arr[$subdomain_name]) ? $pre_arr[$subdomain_name] : '';
      }

Затем в файле конфигурации (sub_prefix.php)

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

    $config['prefixes'] = array('subdomain1' => 'sub1', 
                                'stackoverflow' => 'sf');

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

Теперь вы можете просто использовать префикс $ this-> в любом из представлений, контроллеров или моделей, которые вы будете использовать ... лучший способ сделать это для чего-то, что активно используется во всех ваших приложениях.Тион.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...