Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Code igniter - tworzenia layoutów
Forum PHP.pl > Forum > Przedszkole
Testosteron
Witajcie. Jak mogę stworzyć layout do CI? Znalazłem odpowiednią bibliotekę - Simplicity, ale mam z nią problem. Rozpakowałem ją i zawartość katalogu skopiowałem bezpośrednio do katalogu z CI. Struktura katalogów została więc taka, jaka jest przedstawiona tutaj: http://www.grocerycrud.com/codeigniter-simplicity. Przy próbie uruchomienia przykładu, pojawia się błąd - nie odnaleziono biblioteki jquery, która znajduje się w katalogu assets. Katalog ten (wraz z biblioteką) znajduje się bezpośrednio w katalogu z CI. A może znacie jakieś inne sposoby na stworzenie layoutu?

Pytanie drugie. W kontrolerze ustawiam różne warunki walidacji. W zależności od błędu, który napotka skrypt, wyświetla się inny komunikat, np. "użytkownik o takim loginie istnieje już w systemie", "nieprawidłowy format adresu e-mail", itp. Na całej stronie takich błędów moze być kilkaset. Wstępnie komunikaty o błędach umieściłem w kontrolerze, ale jak dojdzie layout, to pewnie po wystąpieniu błędu zobaczę białą stronę z napisem, czego wolałbym uniknąć. W manualu CI widziałem przykład w którym kod z błędem jest umieszczony w oddzielnym pliku widoku i to byłby dobry sposób, gdybym mógł stworzyć jeden plik dla wszystkich komunikatów o błędach, np. rejestracji. Mógłbym wysyłać kod błędu, a instrukcja Switch wyświetlałaby odpowiedni komunikat. Jak to zrobić?

Z góry dzięki za pomoc smile.gif
jacobson
Może zacznę od drugiego punktu: możesz do błędów użyć flashdata ($this->session->set_flashdata ....)a na stronie zrobic prosty warunek jezeli $this->session->flashdata to wyswietl <p>....</p>


Jeżeli chodzi o pierwszy podpunkt to żeby nie korzystać z zewnętrznych pluginow możesz stworzyć sobie plik template.php w którym zakodujesz sobie header i footer a jako content możesz dać echo $this->load->view($content) i zmienną content przesyłać w metodzie kontrolera czyli

  1. $data['content'] = 'mainPage';
  2. $this->load->view('template', $data);


Możesz również żeby nie powtarzać $this->load->view wszędzie zastosować metodę, która będzie wykonywana zawsze po wykonaniu metody kontrolera w kórej umieścisz ładowanie widoku.
tzm

1) https://github.com/sjlu/CodeIgniter-Bootstrap dobra kompilacja jesli chodzi o front-end.
2) jesli chodzi o jedna strone dla wszystkich bledow... to generalnie jak znasz jquery zachecal bym doinstalowac do wyzej wymienionej paczki angularjs i poczytac troszke o ajaxie / single app page wtedy w ogole nic nie przeladowujesz, caly widok ladujesz raz i tylko routery podmieniasz i data bindings ajaxem.
Testosteron
Cytat(jacobson @ 13.10.2014, 21:19:14 ) *
Jeżeli chodzi o pierwszy podpunkt to żeby nie korzystać z zewnętrznych pluginow możesz stworzyć sobie plik template.php w którym zakodujesz sobie header i footer a jako content możesz dać echo $this->load->view($content) i zmienną content przesyłać w metodzie kontrolera czyli

  1. $data['content'] = 'mainPage';
  2. $this->load->view('template', $data);


Możesz również żeby nie powtarzać $this->load->view wszędzie zastosować metodę, która będzie wykonywana zawsze po wykonaniu metody kontrolera w kórej umieścisz ładowanie widoku.


Ten sposób poskutkował, chociaż bawienie się modelem mvc nie przychodzi mi jeszcze łatwo i pewnie dużo czasu upłynie, zanim zacznę się swobodnie w tym poruszać. W tym przykładzie łądujesz drugi widok. Co zrobić, jeśli tworzę skrypt php?
Cytat(tzm @ 13.10.2014, 22:31:38 ) *
2) jesli chodzi o jedna strone dla wszystkich bledow... to generalnie jak znasz jquery zachecal bym doinstalowac do wyzej wymienionej paczki angularjs i poczytac troszke o ajaxie / single app page wtedy w ogole nic nie przeladowujesz, caly widok ladujesz raz i tylko routery podmieniasz i data bindings ajaxem.

JQuery zacząłem się uczyć, ale wyjechałem do pracy za granicę, więc musiałem przerwać naukę. Po powrocie zająłem się nauką CI, ale JQuery też chcę się nauczyć. Moja wiedza na dzień dzisiejszy jest skromna, ale mógłbym stworzyć plik widoku z ukrytymi elementami i włączać widoczność wyłącznie w przypadku wystąpienia danego błędu.

Pliki, takie jak - style CSS, js, biblioteka JQuery powinna być umieszczona w pliku z widokami i normalnie załadowana?


Nie sprawdziłem jeszcze wszystkich rzeczy o których mi napisaliście, ponieważ byłem cały dzień na uczelni. Zajmę się tym jutro.
jacobson
Jeśli tworzysz skrypt który ma nie wyświetlać widoku to po prostu go nie ładujesz smile.gif a jak nie ładujesz "template" to też nie ładujesz tego widoku w $content. Nie do końca rozumiem pytanie. Wszelkie skryptu php jak chcesz zrobić w zewnętrznej bibliotece kodujesz klasę w katalogu libraries.


Pliki do nagłówka możesz ładować normalnie po prostu w nagłówku, możesz stworzyć osobny plik do tego, możesz ładować te które wszędzie będą łądowane a np w zmiennych $data['css'] albo $data['js'] doładowywać do danych podstron te skrypty i style, które Cię interesują.
Testosteron
Przykładowo - tworzę system rejestracji i mam jakiś tam kod php w kontrolerze. Ładuję widok z layoutem i w content chcę mieć formularz rejestracji. Przy czym, w tym samym pliku dokonuje się walidacja, przetwarzanie danych i wpisanie do MySQL Inny przykład, to np. drukowanie listy artykułów.
jacobson
no to nie rozumiem problemu tongue.gif

  1. $data['lista_artykulow'] = $this->model_listy_artykulow->pobierzAllArtykuly();
  2.  
  3. $data['content'] = 'artykul';
  4. $this->load->view('template, $data);


Jezeli w tej samej metodzie kontrolera bedziesz odbierał requesty formularza to na samej gorze dodaj

  1. if($this->input->post(){
  2. $this->model->dodajCostam();
  3. }
Testosteron
Chcę umieścić kod w tym samym pliku, np.
  1. <?php
  2.  
  3.  
  4. class Example extends CI_Controller {
  5.  
  6. function funkcja(){
  7. echo 'Przykładowa treść';
  8. }
  9. function index(){
  10.  
  11. $data['content'] = $this->funkcja();
  12. $this->load->view('about', $data);
  13. }
  14. }
  15. ?>

Treść jest wyświetlana, ale jednocześnie pojawia się błąd:
Cytat
Unable to load the requested file: .php
jacobson
No bo zrobiłeś tam $this->load->view wewnatrz pliku template zapewne a raczej nie masz pliku o nazwie "Przykładowa treść.php", tam podajesz nazwe pliku smile.gif
Testosteron
To jak w końcu załadować skrypt znajdujący się w kontrolerze?

Dobre, kod mogę zrobić w jakiejś bibliotece, modelu, itp. Jak z poziomu kontrolera ZAŁADOWAĆ wynik pracy? Załóżmy, że mam dwa pliki (dla uproszczenia). W jednym znajduje się cały layout i z jego poziomu ładuję drugi widok - content. Co wstawić w widoku content?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.