0

Usando a função eval

criado por Thiago Fraga Oriente da Silva em 09/11/2004 10:13pm
Para começar você deve decidir se vai criar uma pasta para guardar seus templates, ou se vai deixar seus templates (*.tpl) na mesma pasta que se encontra os scripts que usarão o template.

Decidido isso, vamos mostrar um exemplo simples de template chamado: index.tpl

<!-- início -->
<html>
<head>
  <title>$titulo</title>
</head>
<body>
  $body
</body>
</html>
<!-- fim -->

Explicando o index.tpl

- a tag <title>$titulo</title> vai receber a variável $titulo que será definida no script php que vai usar este template (neste artigo como exemplo seria o script index.php), e vai por o valor da variável $titulo no título, através das tags <title></title>.

- a variável $body também receberá o valor definido pelo script php que vai usar este template (neste artigo como exemplo seria o script index.php) e irá imprimir o valor da variável dentro das tags <body></body>, ou seja, o que você irá ver na página!

Agora vamos criar o script php que usará o template criado anteriormente, digamos que seja: index.php

<!-- início -->
<?php
$titulo = "Sistema de Templates - eval";
$body = "
  • Esse é o meu primeiro script php usando o sistema de templates eval.
  • "; define("INDEX", addslashes(implode("", file ("index.tpl")))); $template=INDEX; eval("\$pag= \"$template\";"); echo $pag; ?> <!-- fim -->

    Explicando o index.php

    - a variável $titulo definida como "Sistema de Templates - eval" e a variável $body definida como "
  • Esse é o meu primeiro script php usando o sistema de templates eval.
  • " serão enviadas ao template do index.php (neste artigo como exemplo seria o template index.tpl).

    - define("INDEX", addslashes(implode("", file ("index.tpl")))); Esta linha define INDEX com o arquivo template já tratado para ser utilizado pela função eval().

    - $template=INDEX; A variável $template recebe o valor de INDEX para que seja utilizada na função eval() propriamente dita.

    - eval("\$pag= \"$template\";"); A função eval() seta a variável $pag já com o template com todos os valores definidos pelo script php.

    - echo $pag; Imprime a variável $pag que agora é o template + as variáveis, logo, a página completa.

    Bem, espero ter acrescentado um pouco mais de conhecimento para vocês iniciantes ou não, achei essa função interessante e bem simples, a vi em algum lugar e começei a usar, como está sendo muito útil para mim que sou iniciante, espero que seja útil para você também.

    Bem, esse é meu primeiro artigo, qualquer dúvida, crítica ou sugestão por favor, comentem. É claro algum erro que encontrarem, me avisem para que eu verifique.

    Obrigado,
    Thiago Fraga
    thiaguimphp@yahoo.com.br

    Comentários:

    Mostrando 1 - 7 de 7 comentários
    Na verdade não é bem assim...

    como está demonstrado no código, é usado addslashes no texto vindo do arquivo, e na chamada do eval, está usando "" no texto. Portanto mesmo que tenha {, }, chamadas a funções do php e tal... isto tudo será tratado como string. Não interferindo na execução.

    Falou,
    Fabrício
    19/11/2005 11:20am (~11 anos atrás)

    Uma boa alternativa ali seria não usar a eval()... :)

    Quando você usa a eval pra fazer esse tipo de operação, você sugeita o seu script a vários erros e expõe ele a códigos estranhos.

    Se você tiver um outro script dentro do seu template, como algo em JavaScript, por exemplo, que, em diversos casos, apresenta "}", "{" e "$" no meio do código. Nesse caso a sua função eval() vai ter sérios problemas.

    Por experiência própria, o mais "correto" a se fazer é usar um tipo de função de substituição, como a str_replace() ou a preg_replace(), para montar o seu sistema de templates. Ele vai ficar mais seguro e, até onde pude perceber, até mais rápido.

    []'s, Error404
    18/11/2005 7:04pm (~11 anos atrás)

    André Sam! disse:
    poderia, caro amigo, me dizer qual seria a MELHOR opção, mas usando esse sistema, que eu tb como leigo e iniciante, achei excelente?
    18/11/2005 1:35pm (~11 anos atrás)

    Complementando o que o Felipe Lopes já disse, também há o uso completamente fora de contexto da função file() em conjunto com a implode(). É realmente um dos piores jeitos de realizar isso.

    O sistema também está sujeito a algumas falhas de processamento.

    Eu aconselharia aos iniciantes não se basearem nesse artigo completamente para a utilização de templates. O conceito é bom, sim, mas tem muito chão pela frente antes que possamos chamar esse sistema postado pelo amigo Thiago de confiável. :)
    18/12/2004 10:13am (~12 anos atrás)

    Felipe Lopes disse:
    Não entendi o define....pq jah naum atribui o valor direto pra $template sem usar o define??
    10/12/2004 9:51am (~12 anos atrás)

    Muito bom esse artigo...
    resumido e bem explicado para iniciantes como eu!!
    parabens!
    06/12/2004 1:11am (~12 anos atrás)

    Para quem está começando, fica difícil saber o que usar, qdo começei não sabia dos templates, e me confundia muito nos códigos...depois q tive q fazer uma alteração em um site, vi como fazia falta um template.
    Fica a minha dica de utilizar sim os templates, vc vai aprender a organizar seus códigos e vai ficar muito mais fácil de trabalhar quando tiver q fazer alterações.
    Dêem uma olhada tb no http://smarty.php.net/
    Thiago, valeu pelo artigo

    Falow!!!
    André
    10/11/2004 1:11pm (~12 anos atrás)

    Novo Comentário:

    (Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)