We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

php5(klasy+wyjątki), smarty


pawel
07-01-2006, 00:46
i jeszcze smarty:
Kod PHP:

/**

Smarty

na poczatku musimy dołączyć cały pakiet Smarty, określić gdzie będą kompilowane pliki.tpl oraz gdzie będą znajdować ie pliki .tpl

pliki tpl zawieraja kod html oraz wewnetrzny kod zawarty pomiedzy { }

komentarze: {*komentarz*}

jeli w pliku tpl chcemy wyswietlic znaki {} (np. gdzy chcemy umiescic skrypt javscript) to blok ktory nie ma byc formatowany umieszczamy pomiedy {literal}, np:

{literal}







{/literal}

**/



    
require_once('../Smarty/Smarty/libs/Smarty.class.php'); //moja sciezka do pliku Smarty.class.php

    
$s = new Smarty(); //nowy obiekt Smarty

    
$s->template_dir '../Smarty/templates';   //tu znjduja sie pliki .tpl

    
$s->compile_dir '../Smarty/templates_c'//ty znajduja sie skomiplowane pliki tpl

    
$s->compile_check true// przy kazdym odswiezaniu strony na nowo beda komplowane pliki, po skonczonym projekcie zmienimy na false



    
$bool false;

    
$str 'hello world!!!';

    
$arr = array('xxx','yyy','zzz');

    
$arr2 = array(

                array(
1,'xxx'),

                array(
2,'yyy'),

                array(
3,'zzz'),

            );

    
$s->assign('zmiennaBOOL',$bool); //przypisujemy do wewnetrznej zmiennej $zmiennaBOOL nasza zmienna ze skryptu

    
$s->assign('zmiennaSRTING',$str);

    
$s->assign_by_ref('zmiennaARRAY',$arr);

    
$s->assign_by_ref('zmiennaARRAY2',$arr2);

    
$s->display('index.tpl');

    

/**

plik index.tpl:



{$zmiennaSRTING} 

zmienna $zmiennaBOOL ma wartosc {if $zmiennaBOOL}true{else}false{/if} 

{* mozna oczywiscie stosowac operacje porownania == , != && || itp.*}





w srodku dowolnie sformatowany kod html


{* przyklad jk potepowac z tablica *}



    {section name=lp loop=$zmiennaARRAY}

    

        

    

    {/section}

{$zmiennaARRAY[lp]}






{* przyklad jak postepowac z tablica wielowymiarowa *}



    {section name=lp loop=$zmiennaARRAY2}

    

        {section name=lp2 loop=$zmiennaARRAY2[lp]}

            

        {/section}

    

    {/section}

{$zmiennaARRAY2[lp][lp2]}




**/



/**



inne rzeczy:

- mozna oczywiscie dołączycinny plik tpl

{include file="header.tpl"}



- wewnetrzna zmienna $smarty pozwala na odwolywanie sie do zmiennych typu request, np:

$smarty.get.podstr //$_GET['podstr']

$smarty.post.podstr //$_POST['podstr']

$smarty.cookies.username //ciacho username

i kilka innych, odsylam do manuala (Request variables)



- istnieje wiele modyfikatorow zmiennych (w katalogu plugins w smrtach), np.

{$tekst|nl2br} //wyswietli zmienna tekt o zawartosci np. "hahaha\nhahaha\nhahaha" jako "hahahahahahahahaha"



**/

?>

pawel
07-01-2006, 00:46
teraz wyjątki:
Kod PHP:

/**

testowa tabela w postgresie...

pg_query($id,'create table test(id serial not null primary key, imie varchar(30) not null default \'\' , data date not null default now())');

pg_query($id,'insert into test (imie) values ('Tadek'));

pg_query($id,'insert into test (imie) values ('Franek'));

**/



/**

obsługa wyjątków:

try {

    //blok chroniony

}

catch (Exception e) {

    //blok w razie wyjatku

}



UWAGA: nie ma bloku finally!!!

**/



class DBconnect {

    private 
$id;

    public function 
_connect($host,$user) {

        
$this->id = @pg_connect("host=$host user=$user");

        if(!
$this->id)

            throw new 
Exception('błąd połączenia z bazą postgresql');//@ wyłancza wywietlanie błędów

        
return $this->id;

    }

    

    public function 
sql($query) {

        
$res = @pg_query($this->id,$query);

        if(!
is_resource($res))

            throw new 
Exception('błąd zapytania sql');

        
$arr = array();

        while(
$row pg_fetch_row($res)) {

            
$arr[] = $row;

        }

        return 
$arr;

    }

}



try {

    echo 
'łączymy z bazą:';

    
$db = new DBconnect();

    
$id $db->_connect('lolek','lolek');

    echo 
'OK';

    try {

        
$query 'select bla bla bla';

        echo 
'zapytanie do bazy: '.$query.'';

        
$arrWyniki $db->sql($query);

        
var_dump($arrWyniki);

    } catch (
Exception $e) {

        echo 
'wystąpił błąd!!';

        echo 
''.$e->getMessage().''
;

    }

    try {

        
$query 'select * from test';

        echo 
'zapytanie do bazy: '.$query.'';

        
$arrWyniki $db->sql($query);

        
var_dump($arrWyniki);

    } catch (
Exception $e) {

        echo 
'wystąpił błąd!!';

        echo 
$e->getMessage().'';

    }

} catch (
Exception $e) {

    echo 
'wystąpił błąd!!';

    echo 
''.$e->getMessage().'';

}



echo 
'===============================';



//teraz prosze wpiszcie poprawne dane :)

try {

    echo 
'łączymy z bazą:';

    
$db = new DBconnect();

    
$id $db->_connect('localhost','pawel');

    echo 
'OK';

    try {

        
$query 'select bla bla bla';

        echo 
'zapytanie do bazy: '.$query.'';

        
$arrWyniki $db->sql($query);

        
var_dump($arrWyniki);

    } catch (
Exception $e) {

        echo 
'wystąpił błąd!!';

        echo 
''.$e->getMessage().'';

    }

    try {

        
$query 'select * from test';

        echo 
'zapytanie do bazy: '.$query.'';

        
$arrWyniki $db->sql($query);

        
print_r($arrWyniki);

    } catch (
Exception $e) {

        echo 
'wystąpił błąd!!';

        echo 
$e->getMessage().'';

    }

} catch (
Exception $e) {

    echo 
'wystąpił błąd!!';

    echo 
''.$e->getMessage().'';

}

?>

pawel
07-01-2006, 00:43
nie wiem czy komukolwiek to sie przyda, robilem to kiedys dla kilku osob aby mialy szybka przesiadke z javy na php z wykorzystaniem smarty.
a wiec po kolei, na poczatek klasy:
Kod PHP:

function br() {

    echo 
'';

}

/**

specyfikatory dostepu: public (domyślny), private, protected

"magiczne" funkcje: __construct, __destruct, __set, __get, _clone, __tostring

zasada I: UKRYWAMY WSZYSTKIE DANE I UDOSTEPNIAMY METODY KTORE ZWRACAJA TE DANE

**/



//podstawowa definicja klasy

class Test {

    private 
$strImie//NIE PUBLIC!!!

    

    
function __construct($imie) {

        
$this->strImie $imie//nie $this->$strImie ani nie this->$strImie

    
}

    

    public function 
getImie () {

        return 
$this->strImie;

    }




    function 
__destruct() {

        echo 
'destruktor';

    }

}



$test = new Test('Bolek');



//klasa przez dziedziczenie

class Imie extends Test {

    private 
$arrWartosci = array();



    public function 
__set($zmienna,$wartosc) {

        
$this->arrWartosci[$zmienna] = $wartosc;

    }



    public function 
__get($zmienna) {

        if(isset(
$this->arrWartosci[$zmienna]))

            return 
$this->arrWartosci[$zmienna];

    }



    public function 
__toString() {

        return 
'metoda __toString()';

    }

}

$imie = new Imie('Lolek');

echo 
$imie->getImie().' vs. '.$test->getImie();;

br();

/**

zastosowanie __toString

**/

echo $imie;

br();



/**

zastosowanie __get i __set

**/

$test->zmienna 'wartosc'//zatosowanie domyslnej funkcji __set - tworzy nowa zmienna public $zmienna = 'wartosc';

echo $test->zmienna;  //zatosowanie domyslnej  funkcji  __get

br();



/**

zastosowanie __get i __set - wlasna implementacja

**/

$imie->zmienna 'wartosc';

echo 
$imie->zmienna;

br();



/**

zastosowanie __clone

**/

$imie2 = clone $imie;

echo 
$imie2->getImie();

?>