Ładuję wiele widoków z kontrolera, aby wyświetlić stronę.

$this->load->view('header');
$this->load->view('content', $data);
$this->load->view('sidebar1', $data1);
$this->load->view('sidebar2', $data2);
$this->load->view('footer');

Myślę jednak, że nie jest to czyste podejście. Czy można to ulepszyć, tworząc pojedynczy widok główny, na przykład „widoki/stronę”, który zawiera w sobie wszystkie powyższe widoki. Wtedy zamiast wywoływać wszystkie powyższe widoki, mogę wywołać tylko widok główny, na przykład:

$this->load->view('main');

W takim przypadku jak mogę przekazać zmienne dla treści, sidebar1 i sidebar2? Dziękuję

1
Roman 31 maj 2011, 23:44

3 odpowiedzi

Najlepsza odpowiedź

W ramach swoich projektów mam tendencję do wykonywania:

$this->load->vars($data);
$this->load->view('template_name');

Gdzie mój szablon ładuje się w innych widokach w sobie.

Dokumentacja CodeIgnitera stwierdza, co następuje dla metody $this->load->vars():

"Ta funkcja pobiera tablicę asocjacyjną jako dane wejściowe i generuje zmienne za pomocą funkcji ekstraktu PHP. Ta funkcja daje taki sam wynik, jak użycie drugiego parametru funkcji $this->load->view() powyżej. Powód, dla którego możesz chcieć użyj tej funkcji niezależnie, jeśli chcesz ustawić niektóre zmienne globalne w konstruktorze kontrolera i udostępnić je w dowolnym pliku widoku załadowanym z dowolnej funkcji.Możesz mieć wiele wywołań tej funkcji.Dane są buforowane i łączone w jedna tablica do konwersji na zmienne.”

Użycie $this->load->vars($data) pomaga uniknąć konieczności ładowania danych dla każdego widoku w moim szablonie.

0
erj1 1 czerwiec 2011, 00:58

Przekaż dane dla każdego widoku jako tablicę do głównego widoku, a następnie przekaż te tablice, gdy główny widok ładuje podwidoki.

$data['sidebar1_data'] = array($one => 'one');
$data['sidebar2_data'] = array($two => 'two');

Następnie w głównym widoku:

$this->load->view('sidebar1', $sidebar1_data);
$this->load->view('sidebar2', $sidebar2_data);
2
marramgrass 31 maj 2011, 23:50

Użyj jak to

     $newData = array_merge($data, $data1, $data2);
     $this->load->view('main', $newData);

Jeśli w $data, $data1, $data2 nie ma klucza o tej samej nazwie, będzie on działał bez modyfikowania żadnego widoku zmiany nazwy zmiennej.

0
Pradeep 31 maj 2011, 23:49