Несколько просмотров в codeigniter - PullRequest
0 голосов
/ 07 января 2010

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

Это код, который у меня есть

Контроллер:

    public function index() {
//  $this->output->enable_profiler(TRUE);
    $data = array();
    if($query = $this->category_model->get_all_online()) {
        $data['main_menu'] = $query;
    }
    $this->load->model('image_model');
    /*
    * Sort out the users backgrounds, basically do a check to see if there is a 'special' background
    * if there is not a 'special' background then IF the user is logged in and has a background of there
    * own show that one, if not show a generic one, if they are not logged in show a bang one
    */
    $image = array();
    if ($query = $this->image_model->get_special_backgrounds()) {
        $image['special'] = $query;
    } elseif(!isset($image['special']) && !isset($this->session->userdata['user_id'])) {
        if($query = $this->image_model->get_mysite_background()) {
            $image['generic'] = $query;
        }
    } 

    if(isset($this->session->userdata['user_id'])) {
        if($query = $this->image_model->get_user_backgrounds($this->session->userdata['user_id'])) {
            $image['user_background'] = $query;
        }
    }
    $data = array_merge($data, $image);
    $this->load->view('home/main_page.php', array_merge($data, $image));
}

Модель:

public function get_mysite_background() {
    $this->db->select('*');
    $this->db->from('background');
    $this->db->where('users_user_group_group_id', 1);
    $this->db->where('is_special', 0);

    $query = $this->db->get();
    return $query->result_array();
}

public function get_special_backgrounds() {
    $this->db->select('*');
    $this->db->from('background');
    $this->db->where('is_special', 1);

    $query = $this->db->get();
    return $query->result_array();
}

public function get_user_backgrounds($user_id) {
    $this->db->select('*');
    $this->db->from('background');
    $this->db->where('users_user_id', $user_id);
    $this->db->where('is_special', 0);

    $query = $this->db->get();
    return $query->result_array();
}

Представления в вопросе: во-первых, где устанавливается переменная,

</div>
<div id="background-select">
<?php
$count = 0;
    if(isset($special)) {
        foreach ($special as $row) {
            $count ++;
            print '<div class="select">';
                print "<a href='index.php/home/category/".$row['background_id']."'>$count</a>";
            print '</div>';
            if($count = 1) {
                $background = $row['background_name'];
            }
        }
    }
    if(isset($generic)) {
        foreach ($generic as $row) {
            $count ++;
            print '<div class="select">';
                print "<a href='index.php/home/category/".$row['background_id']."'>$count</a>";
            print '</div>';
            if($count = 1) {
                $background = $row['background_name'];
            }
        }
    }
    if(isset($user_background)) {
        foreach ($user_background as $row) {
            $count ++;
            print '<div class="select">';
                print "<a href='index.php/home/category/".$row['background_id']."'>$count</a>";
            print '</div>';
            if($count = 1) {
                $background = $row['background_name'];
            }
        }
    }
?>

И где я хочу использовать переменную:

<body>
<div id="wrapper" style=<?php echo"background:url(/media/uploads/backgrounds/".$background.");";?>>

Переменная, которую я хочу использовать $background

Ответы [ 2 ]

1 голос
/ 07 января 2010

Вы можете использовать следующий вспомогательный класс для переноса значений из одного представления в другое:

class VarStore {

   private static $values = array();

   public static function get($key, $default = NULL) {
      return (isset(self::$values[$key])? self::$values[$key] : $default);
   }

   public static function set($key, $value) {
      self::$values[$key] = $value;
   }

}

Позвоните VarStore::set('background', $background); в первом представлении и $background = VarStore::get('background'); во втором.

0 голосов
/ 15 июля 2012

Большинство проблем в программировании являются концептуальными и понятными ... Суть в том, чтобы просматривать данные, а не вычислять их. расчеты выполняются в моделях, функции которых при необходимости могут вызываться несколькими модулями. Поэтому лучше перед тем, как представление будет вызвано, обработайте все данные, которые оно должно отобразить, и используйте представление только для ПРОСМОТРА, а не для вызовов ... Я надеюсь, что это изменение парадигмы поможет

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