Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter] Prezentacja wyników zapytania
Forum PHP.pl > Forum > PHP > Frameworki
Testosteron
Witajcie, tworzę pewien skrypt i mam pewien problem. Otóż w 0momencie, kiedy próbuję wyświetlić wyniki zapytania, pojawia się tylko pierwszy wynik. wynik powinien pojawić się w divie. Robię to w taki sposób:
  1. function html_code($query){
  2. $this->load->database();
  3. $this->load->helper('url');
  4. $query = $this->db->query($query);
  5.  
  6.  
  7. foreach ($query->result() as $row)
  8. {
  9. return '<p>' .$row->name. '</p>';
  10. }
  11.  
  12.  
  13. }


Jeśli z kolei return zastąpię echo (wiem, że nie jest to prawidłowe, ale zrobiłem to w ramach testu), pojawiają się oba wpisy, jednak poza divem. Wcześniej próbowałem wyniki umieścić w tabeli, ale nic mi się nie pojawiało. W widoku natomiast mam dosyć typowy zapis -
  1. <div id="content">
  2. <?php
  3. echo $content;
  4. ?>
  5. </div>
SpiritCode
return kończy działanie funkcji. Zmień to na echo.
W divie daj wywołanie tej funkcji.
Sprawdź
rad11
I jak juz trzymaj sie takiego zapisu:
  1. function html_code($query){
  2. $this->load->database();
  3. $this->load->helper('url');
  4. $query = $this->db->query($query)->result();
  5. $data['query'] = $query;
  6. $this->load->view('twoj_widok', $query);
  7. }
  8.  
  9. Twoj widok:
  10.  
  11. <div id="content">
  12. <?php
  13. foreach($query as $row){
  14. echo '<p>' . $row->name . '<p>';
  15. }
  16. ?>
  17. </div>
  18.  
Testosteron
Mam jeden szablon i w poszczególnych divach uruchamiam określone funkcje w ten sposób:
  1. $data = array(
  2. 'log' => $this->log(),
  3. 'content' => $this->categories($c)
  4. );
  5.  
  6. $this->load->view('themes', $data);

To mam stworzyć nowy widok na potrzeby tego kontrolera (z tym samym wyglądem)?

@Edit
Na razie działa
  1. $this->load->database();
  2. $query = $this->db->query($query);
  3.  
  4. foreach($query->result() as $row){
  5. echo '<p>' . $row->name . '<p>';
  6. }
  7. ?>


Nie jest to jednak zbyt wygodne rozwiązanie:
1) Musiałem stworzyć dodatkowy widok. Na tym forum większość osób doradzała raczej wysyłanie danych do widoku za pomocą return i wyświetlanie ich w widoku.
2) W widoku nie załaduję helperów, czy bibliotek, więc jeśli będę chciał dodać pewne elementy (np. link do artykułu konstruowany za pomocą helpera url), będę musiał przygotować odpowiedni adres w kontrolerze i przesłać go do widoku, zamiast przesłać, np. cały kod html jak to robiłem do tej pory.

Można jakoś zaradzić powyższym problemom?
phpion
Czuję, że źle się do tego zabierasz. Kontroler powinien odpytać model w celu pobrania danych, model powinien zwrócić dane w postaci np. tablicy, następnie kontroler powinien przekazać je do widoku, a widok wyświetlić.
Testosteron
Dopiero uczę się CI i jeszcze nie korzystałem z modeli. Poczytam trochę na ten temat.

@Edit

Zrobiłem mały test. Stworzyłem model:
  1. <?php
  2. class Model extends CI_Model {
  3.  
  4.  
  5. function __construct()
  6. {
  7. // Wywołanie konstuktora modelu
  8. parent::__construct();
  9. }
  10.  
  11. function first_model()
  12. {
  13. $query = $this->db->query('SELECT * FROM element');
  14. return $query->result();
  15. }
  16.  
  17.  
  18. }
  19. ?>

I kontroler
  1. class Test extends Controller_main {
  2. function index(){
  3. $this->load->database();
  4. $this->load->model('model');
  5. $data = $this->model->first_model();
  6. foreach ($data as $row)
  7. {
  8. echo $row->name . '<br />';
  9.  
  10. }
  11.  
  12.  
  13. }
  14.  
  15. }

Problem nie zniknął, ponieważ znowu muszę bawić się pętlą w kontrolerze i martwić się o to, że return zatrzyma pętlę, więc muszę tworzyć pętlę wewnątrz widoku. Chyba nie taka jest idea modelu MVC?
Rysh
Skoro masz dane w tablicy już pobrane z modelu, to przekaż je do widoku.
  1. function index(){
  2. $this->load->database();
  3. $this->load->model('model');
  4. $data['zmianna'] = $this->model->first_model();
  5. $this->load->view('test',$data);
  6. }

I w view/test.php dajesz:
  1. <html>
  2. <head></head>
  3. <body>
  4. <?php
  5. foreach($zmianna as $row) {
  6. echo $row .'<br />';
  7. }
  8. ?>
  9. </body>
  10. </html>

Pozatym, wczytaj sobie database do autoload.
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.