Szablon.tpl - pod kategorię


(Kloc221) #1

Witam chciałem uprościć sobie życie robiąc pod pewną kategorię na swojej stronie styl.tpl a następnie wpisy umieszczac w plikach txt - niestety mam z tym pewien problem i nie wiem jak sobie poradzić.

Założyłem plik szablon.tpl i umieściłem w nim przykładowe dane:

...
{TYTUL}

...

{TYTUL}

{TRESC}
[/code] następnie założyłem plik index.php a w nim :
[code]<?php include 'class.php' ; $plik = file( 'recki/' . $_GET['art'] . '.txt'); $tytul = $plik[0]; for($i=1; $i $tresc .= $plik[$i]; $obj_tpl = new template ; $obj_tpl->read( 'szablon.tpl' ) ; $obj_tpl->assign( array('TYTUL'=> $tytul, 'TRESC'=>$tresc ) ) ; echo $obj_tpl->get(); ?>
Do folderu recki wrzuciłem przykładowy plik txt a w nim :

bla bla bla


bla bla bla

bla bla bla

bla bla bla

bla bla bla


bla bla bla

bla bla bla

No plik class.php to już gotowiec :

<?php


class template

{

  private $file ;

  private $vars ;

  private $loop_vars ;

  private $clauses ;


  function read( $file_name )

  {

    if ( ! file_exists($file_name) )

    {

      exit( 'file does not exist!' ) ;

    }

    $this->file = file_get_contents( $file_name ) ;

    return true ;

  }


  function assign( $vars, $clauses = null )

  {

    if ( ! $this->file )

    {

      exit( 'file does not exist!' ) ;

    }


    if ( ! is_array($vars) )

    {

      exit( 'given parameter must be an array' ) ;

    }


    foreach ( $vars as $k => $v )

    {

      if ( is_array($v) )

      {

        $loop_vars[$k] = $v ;

        unset( $vars[$k] ) ;

      }

    }


    if ( $loop_vars )

    {

      $this->loop_vars = $loop_vars ;

    }


    $this->vars = $vars ;

    if ( is_array($clauses) )

    {

      $this->clauses = $clauses ;

    }

    return true ;

  }


  function get()

  {

    $file = $this->file ;


    //causes start

    if ( is_array($this->clauses) )

    {

      $clauses = $this->clauses ;

      foreach ( $clauses as $k => $v )

      {

        preg_match_all( '/\[IF ' . $k . '=' . $v . ' START\]([\s[:print:]]*)\[IF ' . $k . '=' . $v . ' END\]/', $file, $out ) ;

        $file = str_replace( $out[0][0], trim($out[1][0]), $file ) ;

      }

      //clear clauses

      $file = preg_replace( '/\[IF [a-zA-Z0-9]{1,40}=[a-zA-Z0-9]{1,40} START\]([\s[:print:]]*)\[IF [a-zA-Z0-9]{1,40}=[a-zA-Z0-9]{1,40} END\]/', '', $file ) ;

      //clear comments

      $file = preg_replace( '/\/\/[[:print:]]*/', '', $file ) ;

    }

    //causes end


    //loops start

    if ( $this->loop_vars )

    {

      $loop_vars = $this->loop_vars ;

      foreach ( $loop_vars as $k => $v )

      {

        preg_match_all( '/\[LOOP ' . $k . ' START\]([\s[:print:]]*)\[LOOP ' . $k . ' END\]/', $file, $out ) ;

        foreach ( $loop_vars[$k] as $loop_record )

        {

          $current_loop = $out[1][0] ;

          foreach ( $loop_record as $lr_k => $lr_v )

          {

            $current_loop = str_replace( '{' . $lr_k . '}', $lr_v, $current_loop ) ;

          }

          $loop_return .= $current_loop ;

        }

        $file = str_replace( $out[0][0], trim($loop_return), $file ) ;

      }

    }

    //clear loops

    $file = preg_replace( '/\[LOOP [a-zA-Z0-9]{1,40} START\]([\s[:print:]]*)\[[LOOP [a-zA-Z0-9]{1,40} END\]/', '', $file ) ;


    foreach ( $this->vars as $k => $v )

    {

      $file = str_replace( '{' . $k . '}', $v, $file ) ;

    }

    return $file ;

  }

}


?>

Dlaczego to nie działa tylko sypie jakieś błędy ??


(Grzelix) #2

z tego co mi wiadomo to powinno być raczej tak:

...
{$TYTUL}

...

{$TYTUL}

{$TRESC}
[/code]

sprawdź to i ewentualnie podaj co za błędy wyrzuca