Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Błąd z funkcją...
Forum PHP.pl > Forum > Przedszkole
NorQ
Witam, jestem początkujący w php. i natknełem się na błąd Call to undefined function w swoim skrypcie, proszę o wskazanie błędu i doradzenie:

templates.class.php
  1. <?php
  2.  
  3. class Template {
  4. var $templates_dir = 'templates/';
  5. var $templates_tags = '';
  6. var $templates_file = '';
  7.  
  8. function Template() { }
  9.  
  10. function assign($tags,$value='') {
  11. if (is_array($value)) {
  12. foreach($tags as $tag => $tagvalue) {
  13. if (!empty($tag)) {
  14. $this -> templates_tags['{$'.$tag.'}'] = $tagvalue;
  15. }
  16. }
  17. } else {
  18. $this -> templates_tags['{$'.$tags.'}'] = $value;
  19. }
  20. }
  21.  
  22. function display($file) {
  23. $this -> templates_file = file_get_contents($this -> templates_dir.$file);
  24. $tmp_ = str_replace(array_keys($this -> templates_tags), array_values($this -> templates_tags), $this -> templates_file);
  25. echo $tmp_;
  26. }
  27.  
  28. function modules() {
  29. echo 'Hello world!';
  30. }
  31.  
  32. }
  33. ?>


index.php

  1. <?php
  2. include('templates.class.php');
  3. $szablon = new Template();
  4. $modules = modules();
  5. $szablon -> assign('modules', $modules);
  6. $szablon -> assign('template_url', 'templates'); // nazwa katalogu z szablonem
  7. $szablon -> assign('title', 'Radio'); // Nazwa strony
  8. $szablon -> display('index.tpl'); // Nazwa szablonu
  9. ?>


Podejżewam że moja prośba o pomoc może być trochę śmieszna, gdyż dla was jest to prosta rzecz - ale niestety, mimo że jestem na forum rok nie mam czasu przesiadywać przy komputerze 24/h. oraz poznawać PHP...
Tajgeer
Funkcja modules() znajduje się w klasie Template. Musisz zmienić jej inicjalizację w index.php.
NorQ
Mógłbym prosić o wyjaśniecie bądź przykład?
Tajgeer
Jeśli funkcja modules() jest częścią klasy Template, to musi być wywołana tak jak inne funkcje z klasy (np. assign()).

  1. $modules = $szablon -> modules();
NorQ
Działa ok, tylko się wyświetla na samej górze strony... A ja chcę żeby w wyznaczonym miejscu - gdyż to system szablonów. {$modules}
Tajgeer
Poczytaj o tym, jak w dobry sposób budować klasy w PHP5 (KLIK). Konstruktor wygląda inaczej niż w PHP4. Dodatkowo poczytaj o modyfikatorach dostępu (public, private, protected).

Włącz sobie raportowanie błędów (pełne):
  1. ini_set('display_errors', 1);


Jeśli funkcja ma zwracać wartość, to użyj return, a nie echo.
NorQ
działa. dziex

Jeszcze jedno pytanie, jak return'a przystosować do poniższego kodu ?

  1. <?
  2. $body = $_GET["go"];
  3.  
  4.  
  5.  
  6. if ($body=="")
  7. {
  8. include("includes/news.php");
  9. }
  10.  
  11. else {
  12.  
  13. if (is_file("includes/$body.php"))
  14. {
  15. include("includes/$body.php");
  16. }
  17.  
  18. else
  19. {
  20. include("includes/error.php");
  21. }
  22. }
  23.  
  24.  
  25. ?>
Tajgeer
Podobnie jak rozwiązane jest przypisywanie szablonu do zmiennej $this->templates_file w metodzie display() smile.gif

Zapoznaj się z innymi systemami szablonów (np. Smarty) i zobacz, jak tam jest to rozwiązane.
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.