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:
<?php public $content = "Treść"; public function Wyswietl() { $this->WywołanieJakiejśFunkcji(); } ?>
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:
<?php $index->content = "<h1>Mikro</h1>$mikro->Wczytaj()"; ?>
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:
/* klasa Strona */ <?php class Strona { public $content; // <- odpowiada za zawartość strony public $title; // <- odpowiada za tytuł strony public function __set($nazwa, $wartosc) { $this->$nazwa = $wartosc; } public function Wyswietl() { }
/* klasa Mikro */ <?php class Mikro { public $db; public $entries; public $zapytania; private function Polacz() { /* tutaj sie lacze z baza */ } public function Pobierz() { /* tutaj pobieram rekordy z bazy danych */ } public function Wczytaj() { $zapytania = $this->Pobierz(); while($row = $zapytania->fetch_array()) { } } } ?>
/* plik mikro.php */ <?php require(/* tutaj importujemy trzy pliki klas: strona, mysqli, mikro */); $index = new Strona; $mikro = new Mikro; $index->title = "Nowy tytuł strony"; $index->content = $mikro->Wczytaj(); $index->Wyswietl(); ?>
Dodam jeszcze, że cały kod działa poprawnie. Tylko pętla jest umieszczana przed kodem HTML strony (dokładnie przed <!doctype html>).