Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

taviroquai

Substituições numa string

Mensagens Recomendadas

taviroquai    61
taviroquai

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
cyclop    0
cyclop

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

/**

* 0=todo {campo}

* 1=campo

*/

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    61
taviroquai

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
cyclop    0
cyclop

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    61
taviroquai

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...  :-[

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    61
taviroquai

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  ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    61
taviroquai

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  ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
cyclop    0
cyclop

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 ;)

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade