Salut
Je suis en train (d'essayer) de me faire un p'tit moteur de template very light et je bute sur un probleme assez bete
J'ai par exemple ce bout de code :
Code :
- texte ici
- <bloc_1>je suis dans le bloc 1
- <bloc_2>Je suis dans le bloc 2
- <bloc_3>Je suis dans le bloc 3</bloc_3>
- Je suis sorti du bloc 3
- </bloc_2>
- Je suis sorti du bloc 2
- <bloc_4>
- je suis dans le bloc 4
- <bloc_4>
- </bloc_1>
- Je suis sorti du bloc 1
|
et j'ai fait ce bout de class :
Code :
- class template_blocs {
- private $str ;
- private $hide = array() ;
- function __construct( $str )
- {
- $this->str = $str ;
- }
- public function hideBlock( $block_idt )
- {
- $this->hide[] = $block_idt ;
- }
- private function cleanTemplate()
- {
- if( sizeof( $this->hide ) > 0 )
- {
- foreach( $this->hide as $bloc_id )
- {
- //echo "|<bloc_".$bloc_id.">([^>]+)<\/bloc_".$bloc_id.">|Usm<br />" ;
- $this->str = preg_replace( "|<bloc_".$bloc_id.">(.*)<\/bloc_".$bloc_id.">|Usm" , "" , $this->str );
- }
- }
- preg_match_all( "|<bloc_([^>]*)>(.*)<\/bloc_\\1>|Usm" , $this->str , $out );
- while( count( $out[1] ) > 0 )
- {
- $this->str = preg_replace( "|<bloc_".$out[1][0].">([^>]+)<\/bloc_".$out[1][0].">|Usm" , "\$1" , $this->str );
- preg_match_all( "|<bloc_([^>]*)>([^>]+)<\/bloc_\\1>|Usm" , $this->str , $out );
- }
- }
- function getHtml()
- {
- $this->cleanTemplate() ;
- return $this->str ;
- }
- }
|
Le but c'est de dire je cache le bloc ayant l'id 3 et ca squizera automatiquement <bloc_3>........</bloc_3>
Et quand le bloc est conservé, juste oter les balises.
Le souci c'est que ca march un peu comme ca veux : Quand a un niveau on n'a qu'un bloc tout va bien mais quand par exemple dans le bloc 1 j'ai le bloc 2 et 4, ben tout pars en live !
Y aurait-il un spécialiste suceptible de m'expliquer ce qui cloche svp
?