Jump to content

Substituições numa string


taviroquai
 Share

Recommended Posts

Viva pessoal!

Preciso dos mestres em PHP e algoritmos...  👍

Criei uma string do tipo:

$s = '<tr><td>{nome}</td><td><a href="{link}">{nome}</a></td></tr>';

e tenho uma função que corre uma tabela no mysql e quero substituir os valores {nome} e {link} pelos respectivos valores encontrados na tabela mysql. Isto é: quero substituir o que quer que se encontre dentro de {} pelos valores de variáveis cujos nomes são os mesmos dentro de {}.

A função é uma coisa do tipo

make_html($sql, $template, $keyword1, $keywod2,..., $keywordN)

onde $sql é a consulta ao banco, $template é a string com HTML e as $keywords são os campos/palavras que quero substituir.

Isto resulta em criar um motor de template... já sei que existem muitos por aí... mas gostava de saber como resolver isto.

Já dei uma vista de olhos nas funções preg_replace() e preg_replace_callback() mas ainda não captei bem o funcionamento da ultima  :wallbash:

Alguém? Obrigado.

Link to comment
Share on other sites

mais ou menos...$variavelComOtexto  é a variavel que tens o tpl... depois

é so replace $replaces[0] pelo valor de $$replaces[1] retirando os dados de $variavelComOtexto... entendeste?

"Quando eu for grande quero ser como o Celso"

Link to comment
Share on other sites

Essa ultima funcionava se a substituição fosse estática, com nomes de variáveis estáticos... mas preciso substituir o que quer que se encontre dentro de {qualquer_coisa} pelo respectivo valor de $qualquer_coisa

A solução de cyclop é correcta mas ainda não tive tempo para experimentar...  ?

Link to comment
Share on other sites

Na prática:

$template =<<<EOT
<tr>
<td>{nome}</td>
<td><a href="{link}">{nome}</a></td>
</tr>
EOT;

preg_match_all('#{([a-zA-Z0-9_]+)}#', $template, $replaces);
$i=0;
while($item = $replaces[0][$i]) {
$template = str_replace($item, $$replaces[1][$i], $template);
$i++;
}

No caso de uma lista ou tabela, basta meter isto num ciclo após uma consulta e separa-se o HTML do PHP... perfeito!

Obrigado cyclop  😉

Link to comment
Share on other sites

ahah... agora é que reparei que tens o outro tópico dos IFs e que estás a tentar desenvolver um sistema teu de templates...

Por acaso também é uma coisa que me interessa...

Mesmo que o código desenvolvido por outros seja melhor que o meu, eu cá prefiro fazer quase tudo de raiz... meu é sempre meu e aprende-se muito mais  😉

Link to comment
Share on other sites

ahah... agora é que reparei que tens o outro tópico dos IFs e que estás a tentar desenvolver um sistema teu de templates...

Por acaso também é uma coisa que me interessa...

Mesmo que o código desenvolvido por outros seja melhor que o meu, eu cá prefiro fazer quase tudo de raiz... meu é sempre meu e aprende-se muito mais  🙂

Estás lá rapaz 😉

"Quando eu for grande quero ser como o Celso"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.