Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CleitonGarcia

[Resolvido] Interpretar tag especifica como um código que eu quis

Recommended Posts

Olá pessoas,

 

Simples: Quero que dentro de uma string o PHP interprete um grande conteúdo, e encontre tags especificas (ex.: % %, { }, etc) como algo que eu definir.

 

Ex.:

 

<?php

$conteudo = 'Meu conteúdo com uma string escondida, acesse o link: %link%';
$resultadoconteudo = '%link% == "<a href="http://meulink.com.br">clique aqui</a>"';

echo $a;

?>

 

No caso, eu quero uma function que mude o {$nome} para a string $nome.

 

Eu já fiz isso uma vez, mas não estou conseguindo encontrar novamente!

 

Obs: Esse código vou utilizar para a criação do meu sistema de temas/templates.

 

Abrass biggrin.gif

 

@Edit:

 

Só pra explicar, não quero incluir uma váriavel dentro de outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deverá utilizar expressões regulares para isso, caro Cleiton.

 

Veja um exemplo:

<?php
       /**
        * Conteúdo a ser trabalhado
        */
       $content = "Meu conteúdo é {Cleiton}";

       /**
        * Expressão regular que pegará
        * apenas o conteúdo dentro de "{}"
        */ 
       $pattern = '/\{(.*?)\}/'; 

       /**
        * {Cleiton} será substituído por algo.
        * Neste caso, pelo conteúdo que está dentro de {} — Cleiton
        * Por isso ${1}: para pegarmos o primeiro valor que
        * a expressão regular retornou
        */
       $replacer = '${1}';

       /**
        * Fazemos as substituições desejadas com a expressão
        * regular e a exibimos
        */
       echo preg_replace($pattern, $replacer, $content);

 

Para maiores informações: Expressões regulares e preg_replace().

 

Espero ter ajudado. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria isso ?

<?php

$nome = 'Cleiton';
$a     	= 'meu conteúdo '.$nome;

echo $a;

?>

ele disse q iria usar para template então acredito q ele vá guardar no banco de dados ou em outro arquivo assim acho q será necessário a função...

 

caso o contrário é so fazer o q você indicou

 

Cleiton da uma olhada nesse arquivo

 

<?php
$sql="select * from slide where codigo do cliente= '$codigo do cliente'";
$rs=mysql_query($sql) or die ("erro 1");
while($linha=mysql_fetch_array($rs))
{
$cod_cl_slide=$linha["cod_cl_slide"];
$script_cl_slide=$linha["script_cl_slide"];
$cod_cl_cliente_slide=$linha["cod_cl_cliente_slide"];
$altura_cl_slide=$linha["altura_cl_slide"];
$largura_cl_slide=$linha["largura_cl_slide"];
$script_configura_cl_slide=$linha["script_configura_cl_slide"];
$chamada_cl_slide=$linha["chamada_cl_slide"];


eval("\$script_configura_cl_slide = \"$script_configura_cl_slide\";");   
$script_slide= $script_cl_slide." ".$script_configura_cl_slide."..$|$espacamento$|$..";<br />
$chamada_slide =$chamada_cl_slide."..$|$espacamento$|$..";



}


$script_slide=explode("..$|$espacamento$|$..", $script_slide);
$chamada_slide=explode("..$|$espacamento$|$..", $chamada_slide);
$slidefinal = str_replace($chamada_slide, $script_slide, $topo);
?>

 

 

é um arquivo q eu fiz acho q é mais ou menos isso q você quer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deverá utilizar expressões regulares para isso, caro Cleiton.

 

Veja um exemplo:

<?php
$content = "Meu conteúdo é {Cleiton}"; // Conteúdo
$pattern = '/\{(.*?)\}/'; // A expressão regular que pegará apenas o conteúdo dentro de {}
$replacer = '${1}'; // O que irá no lugar de "{Cleiton}". No caso, ${1} para pegar o primeiro valor retornado da expressão regular
echo preg_replace($pattern, $replacer, $content); // Faço a substituição desejada e exibo-a.

 

Para maiores informações: Expressões regulares e preg_replace().

 

Espero ter ajudado. thumbsup.gif/>

 

 

Eu precisava só da função pra dar um refresh na minha memória, mas agradeço por ter dado o código pronto, muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim, Cleiton? Vai incluir várias strings entre tags, como algo do tipo abaixo?:

<?php
       /**
        * Conteúdo a ser trabalhado
        */
       $content = "Meu conteúdo é {Cleiton} {Garcia}";

Se sim, o que te mostrei já está preparado para trabalhar desta maneira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim..

 

Terá o arquivo "index.php" e o "index.tpl".

 

Index.tpl:

 

A URL do site é {urlsite}, e o nome é {nomesite}!

 

Index.php

$urlsite = $config['url'];

$nomesite = $config['nome'];

 

Nesse caso, eu teria que criar dois códigos para exibir as duas strings diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizai-vos um vetor!

 

index.php:

<?php

/**
 * Extraímos as chaves do vetor
 * para variáveis com seus respectivos
 * valores
 */
extract(array('url' => 'http://google.com', 'name' => 'Google'));

/**
 * Adiciona um include à variável $var
 */
$var = include('template.tpl');

/**
 * Retorna o conteúdo deste include
 */
return $var;

 

template.tpl:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php echo "A URL do site é {$url}, e o nome é {$name}"; ?>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.. eu não quero permitir e nem quero utilizar TAGs PHP no arquivo .tpl - ou seja, deverá ser assim:

 

 


<!doctype html>
<html lang="en">
<head>
       <meta charset="UTF-8">
       <title>{titulo}</title>
</head>
<body>
       A URL do site é {url}, e o nome é {name}.
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.. eu não quero permitir e nem quero utilizar TAGs PHP no arquivo .tpl - ou seja, deverá ser assim:

 

 


<!doctype html>
<html lang="en">
<head>
       <meta charset="UTF-8">
       <title>{titulo}</title>
</head>
<body>
       A URL do site é {url}, e o nome é {name}.
</body>
</html>

 

Expressões regulares aliadas às variáveis variáveis

 

<?php

$str = "Nome: {name}. Idade: {age}";
$name = "Evandro";
$age = 24;
preg_match_all('/{(.*?)}/', $str, $matches);
foreach ($matches[1] as $key => $val) {
   $matches[1][$key] = $$val;
}
echo str_replace($matches[0], $matches[1], $str);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizai-vos um vetor!

 

index.php:

<?php

/**
 * Extraímos as chaves do vetor
 * para variáveis com seus respectivos
 * valores
 */
extract(array('url' => 'http://google.com', 'name' => 'Google'));

/**
 * Adiciona um include à variável $var
 */
$var = include('template.tpl');

/**
 * Retorna o conteúdo deste include
 */
return $var;

 

template.tpl:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php echo "A URL do site é {$url}, e o nome é {$name}"; ?>
</body>
</html>

$topo="{$url},{$name}";

$chamada= explode(",", $chamada);

aproveitando pode ser feito tbm com o preg_replace (caso use expressão regular)

$final = str_replace($chamada, $var, $topo);

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você quer é isso aqui:

 

index.php:

<?php

/**
 * Um vetor com as variáveis
 * a serem passadas para o template
 **/
$placeholder = array(
	'title' => 'Título',
	'name' => 'Guilherme');

/**
 * Resgata o conteúdo do arquivo template.tpl.
 */
$var = file_get_contents('template.tpl');

/**
 * Exibe o conteúdo do arquivo template.tpl, utilizando
 * o esquema de template com expressão
 * regular.
 */
echo preg_replace('/\{(.*?)\}/e', '$placeholder["${1}"]', $var);

 

template.tpl:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{title}</title>
</head>
<body>
Olá, {name}!
</body>
</html>

 

Era isso? Alguma dúvida? :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O @Sandro Matos citou preg_replace e eu me lembrei de uma parada bacana, exclusiva dessa função:

 

<?php

$str = 'Nome: {name}. Idade: {age}';

$vars = ['name' => 'Evandro', 'age' => 24];

echo preg_replace('/{(.*?)}/e', '$vars[\'$1\']', $str);

 

E agora que vi que é a mesma coisa que o Guilherme postou já faz tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você quer é isso aqui:

 

index.php:

<?php

/**
    * Um vetor com as variáveis
    * a serem passadas para o template
    **/
$placeholder = array(
	'title' => 'Título',
	'name' => 'Guilherme');

/**
    * Resgata o conteúdo do arquivo template.tpl.
    */
$var = file_get_contents('template.tpl');

/**
    * Exibe o conteúdo do arquivo template.tpl, utilizando
    * o esquema de template com expressão
    * regular.
    */
echo preg_replace('/\{(.*?)\}/e', '$placeholder["${1}"]', $var);

 

template.tpl:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{title}</title>
</head>
<body>
Olá, {name}!
</body>
</html>

 

Era isso? Alguma dúvida? thumbsup.gif

 

Fosse tudo nessa ocasião. Muitssimo obrigado!

 

 

 

 

Essa função solucionou tudo.. mas como eu posso fazer por exemplo, para vários arquivos de forma mais ecônimica, sem multiplicar o código para cada arquivo diferente que eu quiser usar.

 

Ou seja, eu quero incluir os arquivos "header.tpl", "login.tpl", "footer.tpl", como eu faço para incluir os três de uma vez só, seria ex.: em um IF, se você quiser verificar multiplas váriaveis é só fazer && e pronto. Neste caso, para eu verificar/incluir mais de um arquivo?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tópico interessante. Recentemente passei por algo similar e resolvi assim:

 

$array = array( "@img" => "{$this->url}/conteudo/imagens", "@dir" => "{$this->url}/{$this->sede}", "@arq" => "{$this->url}/conteudo");            
$texto = file_get_contents("{$artigo}");            
foreach ($array as $key => $value) {
$texto = str_replace("{$key}", "{$value}", $texto);
}

 

Aqui, eu precisava pegar a URL pois eu precisava do endereço absoluto, então fiz assim. No arquivo teria algo como:

 

<img src="@img/rodape/copyright.png" alt="imagem para teste" />

 

Assim ele vai montar :

http://www.seusite.com/conteudo/imagens/rodape/copyright.png

 

Como o file_get_contents() não interpreta códigos PHP, ele simplismente pega tudo como String, foi necessário essa modificação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.