• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

taviroquai

Substituições numa string

12 mensagens neste tópico

Viva pessoal!

Preciso dos mestres em PHP e algoritmos...  :thumbsup:

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

preg_match_all('#{([a-zA-Z0-9_]+)}#', $variavelCOmOtexto, $replaces);

/**

* 0=todo {campo}

* 1=campo

*/

fazes um count da array... depois é so replace...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ver se percebi...

$replaces é o array com as keywords detectadas... agora tenho que correr novamente a $variavelComOtexto e substitui-las pelo valor dos campos com os nomes = $replaces...

vou tentar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim percebi. Vou tentar resolver e comunico se surgirem outras duvidas. Obrigado.  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sprintf('<tr><td>%s</td><td><a href="%s">%s</a></td></tr>', $nome, $link, $nome);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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...  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é so replace $replaces[0] pelo valor de $$replaces[1]  <- JÁ DISSE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

de nada, estou aqui para ajudar sempre quem agradeçe e no minimo tenta perceber a lógica da programação ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora