Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CodeIgniter] Prezentacja wyników zapytania
Testosteron
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
SpiritCode
post
Post #2





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

Ostrzeżenie: (0%)
-----


return kończy działanie funkcji. Zmień to na echo.
W divie daj wywołanie tej funkcji.
Sprawdź
Go to the top of the page
+Quote Post
rad11
post
Post #3





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.  


Ten post edytował rad11 30.12.2014, 21:24:04
Go to the top of the page
+Quote Post
Testosteron
post
Post #4





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Testosteron 31.12.2014, 10:00:29
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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ć.
Go to the top of the page
+Quote Post
Testosteron
post
Post #6





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Testosteron 3.01.2015, 21:15:54
Go to the top of the page
+Quote Post
Rysh
post
Post #7





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 19:46