Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z własnym systemem szablonów
Forum PHP.pl > Forum > PHP > Object-oriented programming
kamilgeneral
Witam!
Ostatnio uczyłm się programowania obiektowego.
Teraz chciał zrobić coś własneg i zaczeło mi wychodzić coś jak system szablonów.

Mam:

index.php

  1. <?php
  2.  
  3.  class strona {
  4.  
  5.   public function wpisz($wpisuje, $gdzie)
  6.   {
  7.   $this -> $gdzie = $wpisuje;
  8.   }
  9.   
  10.   public function plik($jaki)
  11.   {
  12.   include('Widok/'.$jaki); 
  13.   }
  14.  }
  15.  
  16.  $strona = new strona;
  17.  
  18.  include('Kontroler/index.php');
  19.  
  20. ?>


Kontroler/index.php

  1. <?php
  2.  
  3.  $strona -> wpisz('Moja strona', 'nazwa');
  4.  $strona -> wpisz('Przykladowy tekst', 'tekst');
  5.  
  6.  $strona -> plik('index.php');
  7.  
  8. ?>


Widok/index.php
  1. <html>
  2. <head>
  3.  <title><?php echo $strona -> nazwa; ?></title>
  4. </head>
  5. <body>
  6.  <i><?php echo $strona -> tekst; ?></i>
  7.  <br />!
  8. </body>
  9. </html>


I teraz w czym problem...
Wyświetla mi się strona, ale tylko ze znaczkami HTML z Widok/index.php, a nie ma w nim danych z Kontroler/index.php.
Gdy zamiast $strona -> plik('index.php'); użyje funkcji include to działa dobrze, ale ja zamiast include chce mieć jakąś funkcję.
starach
W widok/index.php zmień nazwę zmiennej $strona na $this i ustaw sobie jeszcze error_reporting na E_ALL
kamilgeneral
Dzięki, teraz działa!
zbig
Witam !

Sprobuj moze troche innego rozwiazania

Kod
<?
class strona {
    public $template_vars = array();
    
    public function wpisz($vars)
    {
        if (is_string($vars)) {
            $this->template_vars[$vars] = @func_get_arg(1);
        } elseif (is_array($vars)) {
            foreach ($vars as $key => $val) {
                $this->template_vars[$key] = $val;
            }
        }
    }

    public function plik($jaki)
    {
        ob_start();
        include('Widok/'.$jaki);
        $res =  ob_get_clean();
        return $res;

    }
    public function __get($a){
        return $this->template_vars[$a];
    }
    
    public function __set($nazwa, $wartosc){
        $this->template_vars[nazwa] = $wartosc;
    }
}

$strona = new strona();

//przypisujesz zmienne
$strona -> wpisz('nazwa','Moja strona');
$strona -> wpisz('tekst','Przykladowy tekst');
$strona->test = "jakis tekst";

//albo
$vars = array('nazwa'=>'Moja strona','tekst'=>'Przykladowy tekst','test'=>'jakis tekst');
$strona -> wpisz($vars);

echo $strona -> plik('index.php');
?>

<html>
<head>
<title><?php echo $this->nazwa; ?></title>
</head>
<body>
<i><?php echo $this->tekst; ?></i>
<i><?php echo $this->test; ?></i>
<br />
</body>
</html>


Jest to typowe rozwiazanie systemiku templatow ( Serce Zend_Views bazuje na takim rozwizaniu smile.gif ) .
Pozwoli Ci to na troche wieksza elastycznosc .

Pozdrawiam
kamilgeneral
Dzięki za inne rozwiązanie, ale ja tylko zrobiłem to do lepszego poznania PHP.
Jak będę potrzebował to napewno skorzystam...
megawebmaster
W takim wypadku lepiej skorzystać z gotowych systemów szablonów, bo przynajmniej wiesz, że są sprawne i nie musisz siedzieć nad ich implementacją.
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.