<?
/* Delta Playground, (c) Maciej Łebkowski 2005 */
/* kArty, system templejtów */
/* http://delta.lebkowski.info/karty */
/* &delta:info; kArty 0.6 SRC:1 CSS:mod PHP:yes SQL:mod JS:no AJAX:no */
/*
&zmienna; - $szablon[zmienna] $->PodaDane();
<zmienna_block></zmienna_block> - foreach ($zmienna)
&zmi:key; - $dane[zmi][key]; $->PodajDane();
&karta:sz; -> $szablon[sz] -> $->Parsuj(sz);
&delta:sz; -> LadujSzablon( sz, delta(sz) ); -> Parsuj(sz);
+ 06.11.05: dodane parsowanie zagnieżdżonych bloków.
+ 04.11.06: karty->generuj();
*/
class karty {
function karty($nazwa_globalna=''){
global $engine;
$this->nazwa = $nazwa_globalna;
$this->LadujDane( 'login', $engine->login );
$engine->login ? false : $this->LadujDane( 'reklamy', 'true' );
}
function LadujSzablon($nazwa,$szablon){
$this->szablon[$nazwa] = $szablon;
}
function PodajSzablon( $nazwa ){
return $this->szablon[$nazwa];
}
function LadujDane( $nazwa, $dane ){
if(!is_array( $nazwa ) )
$this->dane[$nazwa] = $dane;
else foreach ($nazwa as $k=>$v )
$this->dane[$k] = $v;
}
function DodajDane( $dane ){
$this->dane = array_merge_recursive( $this->dane, $dane );
}
function PodajDane( $nazwa ){
return $this->dane[$nazwa];
}
function Generuj( $nazwa ){
$this->LadujDane( $nazwa, $this->Parsuj( $nazwa ) );
}
function rozwin_blok( $dane, $szablon ){
while( preg_match( '/\<([a-z0-9_-]+)_block\>(.*)\<\/\1_block\>/isU',
$szablon, $blok ) ){
$dane_bloku = empty($this->nazwa)
? $dane[$blok[1]]
: $dane[$this->nazwa][$blok[1]];
$bloki = '';
if( is_array( $dane_bloku ) ) foreach( $dane_bloku as $element ) {
$dodaj_blok = new karty($blok[1]);
$dodaj_blok->LadujDane( $blok[1], $element );
$dodaj_blok->LadujSzablon( $blok[1], $blok[2] );
$bloki .= $dodaj_blok->Parsuj( $blok[1] );
} else {
$bloki = empty( $dane_bloku )
? ''
: str_replace( '&'.$dane_bloku.';', $dane_bloku, $blok[2] );
}
$szablon = preg_replace( '/\<'.$blok[1].'_block\>.*\<\/'.$blok[1]
.'_block\>/isU', $bloki, $szablon, 1 );
}
return $szablon;
}
function Parsuj($szablon){
global $engine;
$szablon = $this->PodajSzablon( $szablon );
$szablon = $this->rozwin_blok( $this->dane, $szablon );
while( preg_match( '/&(delta|karty):([a-z0-9_-]+);/i', $szablon, $blok ) ){
if( strtolower( $blok[1] ) == 'delta' )
$this->LadujSzablon( $blok[2], $engine->delta($blok[2]) );
$szablon = str_replace( $blok[0], $this->Parsuj( $blok[2] ), $szablon );
}
$dane_bloku = empty( $this->nazwa ) ? $this->dane : $this->dane[$this->nazwa];
foreach( $dane_bloku as $nazwa => $dane )
if( !is_array( $dane ) ){
$nazwa = $this->nazwa ? $this->nazwa .':'.$nazwa : $nazwa;
$szablon = preg_replace( '/'.preg_quote('&'.$nazwa.';','/').'/i',
$dane, $szablon );
}
return $szablon;
}
}
?>