taviroquai Posted April 30, 2008 at 05:06 PM Report Share #182665 Posted April 30, 2008 at 05:06 PM 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 Alguém? Obrigado. Link to comment Share on other sites More sharing options...
cyclop Posted April 30, 2008 at 05:18 PM Report Share #182668 Posted April 30, 2008 at 05:18 PM preg_match_all('#{([a-zA-Z0-9_]+)}#', $variavelCOmOtexto, $replaces); /** * 0=todo {campo} * 1=campo */ fazes um count da array... depois é so replace... "Quando eu for grande quero ser como o Celso" Link to comment Share on other sites More sharing options...
taviroquai Posted April 30, 2008 at 05:32 PM Author Report Share #182671 Posted April 30, 2008 at 05:32 PM 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... Link to comment Share on other sites More sharing options...
cyclop Posted April 30, 2008 at 06:02 PM Report Share #182677 Posted April 30, 2008 at 06:02 PM 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 More sharing options...
taviroquai Posted April 30, 2008 at 06:24 PM Author Report Share #182688 Posted April 30, 2008 at 06:24 PM Sim percebi. Vou tentar resolver e comunico se surgirem outras duvidas. Obrigado. 👍 Link to comment Share on other sites More sharing options...
djthyrax Posted May 1, 2008 at 10:35 PM Report Share #182934 Posted May 1, 2008 at 10:35 PM sprintf('<tr><td>%s</td><td><a href="%s">%s</a></td></tr>', $nome, $link, $nome); Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
taviroquai Posted May 2, 2008 at 03:26 PM Author Report Share #183025 Posted May 2, 2008 at 03:26 PM 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 More sharing options...
cyclop Posted May 2, 2008 at 03:41 PM Report Share #183031 Posted May 2, 2008 at 03:41 PM é so replace $replaces[0] pelo valor de $$replaces[1] <- JÁ DISSE "Quando eu for grande quero ser como o Celso" Link to comment Share on other sites More sharing options...
taviroquai Posted May 2, 2008 at 06:48 PM Author Report Share #183072 Posted May 2, 2008 at 06:48 PM 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 More sharing options...
cyclop Posted May 2, 2008 at 07:05 PM Report Share #183075 Posted May 2, 2008 at 07:05 PM de nada, estou aqui para ajudar sempre quem agradeçe e no minimo tenta perceber a lógica da programação 😉 "Quando eu for grande quero ser como o Celso" Link to comment Share on other sites More sharing options...
taviroquai Posted May 2, 2008 at 07:20 PM Author Report Share #183077 Posted May 2, 2008 at 07:20 PM 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 More sharing options...
cyclop Posted May 3, 2008 at 05:21 PM Report Share #183224 Posted May 3, 2008 at 05:21 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now