Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wynik funkcji wynikiem drugiej funkcji, Wynik zapętlony a implementacja zmienną.
Gajdus
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.07.2013

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


Witam,
chciałbym przedstawić swój mały problem związany z programowaniem PHP. Wykonałem szablon zrobiony na klasie (nazwijmy class Strona). Następnie chciałem zrobić system wyświetlania informacji z bazy danych, użyłem kolejnej klasy (nazwijmy class Mikro). Klasa `mikro` pobiera rekordy z bazy danych. Klasa `strona` buduje szablon strony, najważniejszy kod strony to:


  1. <?php
  2. public $content = "Treść";
  3.  
  4. public function Wyswietl() {
  5. echo "tutaj trochę htmlu statycznego";
  6. $this->WywołanieJakiejśFunkcji();
  7. echo $this->content; /* wywołanie zawartości strony */
  8. echo "znowu html statyczny";
  9. }
  10.  
  11. ?>


Tworząc index.php, treść strony ładuję w zmienną $content. Problem pojawia się gdy z treści statycznej potrzebuję treść dynamiczną. Używałem różnych metod, ostatecznie zostało:

  1. <?php
  2. $index->content = "<h1>Mikro</h1>$mikro->Wczytaj()";
  3. ?>


Efekt jest taki, że wyrażenie Mikro pojawia się w tym bloku, w którym musi. Jednak cała zawartość $mikro->Wczytaj() (jest to zwykła pętla while z wyjściowym echo) pojawia się przed statycznym kodem HTML. Wygląda to tak jakby najpierw wyświetlała się funkcja z pętlą, następnie generowała cała strona. Domyślam się, że muszę w klasie Strona zrobić nową funkcję, zajmującą się wczytywaniem treści. Nie mam jednak pomysłu (i tu jest moje pytanie do Was) jak by takie coś wyglądało. Kod strony to oczywiście nie tylko ta jedna funkcja by była, a trochę więcej kodu PHP. Ktoś jest w stanie mi pomóc? Większy fragment kodu PHP:

  1. /* klasa Strona */
  2. <?php
  3. class Strona {
  4. public $content; // <- odpowiada za zawartość strony
  5. public $title; // <- odpowiada za tytuł strony
  6.  
  7. public function __set($nazwa, $wartosc) {
  8. $this->$nazwa = $wartosc;
  9. }
  10.  
  11. public function Wyswietl() {
  12. echo "<html>\n<head>\n<title>$this->title</title>\n</head>\n<body>\n<div id=\"wrapper\">\n";
  13. echo $this->content;
  14. echo "</div></body></html>";
  15. }


  1. /* klasa Mikro */
  2. <?php
  3. class Mikro {
  4. public $db;
  5. public $entries;
  6. public $zapytania;
  7.  
  8. private function Polacz() {
  9. /* tutaj sie lacze z baza */
  10. }
  11.  
  12. public function Pobierz() {
  13. /* tutaj pobieram rekordy z bazy danych */
  14. }
  15.  
  16. public function Wczytaj() {
  17. $zapytania = $this->Pobierz();
  18. while($row = $zapytania->fetch_array()) {
  19. echo "<p>$row[3]</p>";
  20. }
  21. }
  22. }
  23. ?>


  1. /* plik mikro.php */
  2. <?php
  3. require(/* tutaj importujemy trzy pliki klas: strona, mysqli, mikro */);
  4.  
  5. $index = new Strona;
  6. $mikro = new Mikro;
  7.  
  8. $index->title = "Nowy tytuł strony";
  9. $index->content = $mikro->Wczytaj();
  10.  
  11. $index->Wyswietl();
  12. ?>


Dodam jeszcze, że cały kod działa poprawnie. Tylko pętla jest umieszczana przed kodem HTML strony (dokładnie przed <!doctype html>).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Gajdus
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.07.2013

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


Dzięki za pomoc, metoda zadziałała. Idę poczytać więcej o echo i return.
Go to the top of the page
+Quote Post

Posty w temacie


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: 5.10.2025 - 15:09