Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou desenvolvendo algo semelhante a um bbcode porém com tags personalizadas devido a necessidade do meu cliente em cadastrar ícones no sistema, para quando eles serem impressos mostrar a respectiva imagem...então fiz o seguinte...
Criei uma tabela simples no MySQL com os campos
idicone | nome | sigla | imagem
Através do formulário meu cliente cadastra od dados nela por exemplo uma cor...
idicone | nome | sigla | imagem
1 |branco | {b} | branco.jpg
O qual irá aprecer no cadastro de produtos para ele inserir como se fosse um bbcode, ao clicar ele insere no campo de texto a tag {b} por exemplo....
Agora vem minha dúvida... preciso fazer a consulta no banco para transformar todas as tags no conteúdo gravado na descrição do produto pela imagem respectiva da sigla...
Como faço esse loop?
basicamente teria que retornar com um SELECT todos os icones com sigla e imagem e subtstituir toda vez que encotra-se a sigla na descrição pela imagem correspondete... sakaram?
Alguem pode me dar um exemplo de como fazer esse foreach e o prg_replace ...
OBrigado
Obrigado pela ajuda... fiz mais ou menos isso ... o problema é que agora ele troca tudo... retorna os icones mas não retorna o conteudo..
require_once "griadm/includes/_conectabd.php";
//---Tratamento do Custo de Mana e Descrição
function trocarSiglas($campo) {
$sql_icones=mysql_query("SELECT * FROM icones")or die(mysql_error());$sigla_i=$linha_i["sigla"];
$icone_i=$linha_i["iconeP"];
$campo=str_replace($sigla_i,$icone_i." ",$campo);
$campo=explode(" ", $campo);
foreach ($campo as $value) {
echo "<img src='images/icones/p/".$value."'>";
}
}
}Eu pensei em algo assim:
supondo um filtro de palavras.
Considere uma tabela com os campos anterior (a palavra antes de passar pelo filtro) e nova (palavra filtrada)
PHP
$anterior = [array](http://br.php.net/array)();$nova = [array](http://br.php.net/array)();
$sql = consulta SELECT
while (fetch())
{
$anterior[] = $fetck['anterior'];
$nova[] = $fetch['noav'];
}
//aqui você chama str_replace() ou preg_replace(), usando $anterior 4 $nova nos dois primeiros argumentos.
Dessa forma, as suabtituições são feitas todas de uma vez.
obrigado .... consegui assim...
<?
require_once "griadm/includes/_conectabd.php";
//---Tratamento do Custo de Mana e Descrição
function trocarSiglas($campo) {
$anterior = array();
$nova = array();
$sql_icones=mysql_query("SELECT * FROM icones")or die(mysql_error());$anterior[]=$linha_i["sigla"];
$nova[]=$linha_i["iconeP"];
foreach($nova as $value) {
$campo=str_replace($anterior,"<img src='images/icones/p/".$value."'> ",$campo);
}
}
echo $campo;
}
?>achei que tinha resolvido mas não foi não... tentei adicionar outros icones diferentes ele trás apenas o primeiro ícone e transforma os outros pro mesmo valor... transformando todos os ícones no mesmo... sabe porque?
Tente assim:
PHP
<?require_once "griadm/includes/_conectabd.php";
//---Tratamento do Custo de Mana e Descrição
function trocarSiglas($campo) {
$anterior = [array](http://br.php.net/array)();
$nova = [array](http://br.php.net/array)();
$sql_icones=[mysql_query](http://br.php.net/mysql_query)("SELECT * FROM icones")or [die](http://br.php.net/die)([mysql_error](http://br.php.net/mysql_error)());
while( $linha_i=mysql_fetch_array($sql_icones)){
$anterior[]=$linha_i["sigla"];
$nova[]=$linha_i["iconeP"];
}
$campo = [str_replace](http://br.php.net/str_replace)($anterior, $nova, $campo);
[echo](http://br.php.net/echo) $campo;
}
?>ele retorna tudo amontado e somente os nomes das imagens
thumb_1197466350.gifthumb_1197396916.gifthumb_1197396916.gif
quanto faço
$campo = str_replace($anterior, "<img src='images/icones/p/".$nova." '>", $campo);
ele chama as imagesn assim
images/icones/p/Array
Faça o seguinte:
troque esta linha:
PHP
$nova[]=$linha_i["iconeP"];
por esta, colocando o caminho completo da imagem:
PHP
$nova[] = "<img src='images/icones/p/".$linha_i["iconeP"] . "' alt='' />";
OBS: Isso é dentro do loop while.
Grraaande Beraldo !
Vlw por mais essa heim... fico lhe devendo...
Pegando o embalo do tópico e do natal! http://forum.imasters.com.br/public/style_emoticons/default/natal_noel.gif
Hehehhe...
Assim, eu tenho um campo "TEXT" sendo que nele se encontra:
>
Texto bla bla bla bla segue a imagem abaixo:
#imagem1#
Continuação do texto bla bla bla
Nessa mesma tabela eu tenho 3 campos de imagem imagem1 imagem2 imagem3.
Gostaria de que quando fosse colocado no texto #imagem1# ou #imagem2# ou #imagem3# fosse retornado a imagem que coloquei nessa tabela.
Acho que tem que ser alguma coisa como explode, mas não sei muito bem, gostaria de uma luz.
Abraços,
Leonardo
Desculpe a ignorância galera, já está resolvidíssimo.
$Img1 = "<img src=\"imagens/qr/".$rowQ['questaoImg1']."\" alt=\"Imagem1\" />";
$Img2 = "<img src=\"imagens/qr/".$rowQ['questaoImg2']."\" alt=\"Imagem2\" />";
$Img3 = "<img src=\"imagens/qr/".$rowQ['questaoImg3']."\" alt=\"Imagem3\" />";
$bbenunciado = $rowQ['questaoEnunciado'];
$bbimagens = array("#questaoImg1#", "#questaoImg2#", "#questaoImg3#");
$imagens = array($Img1, $Img2, $Img3);
$enunciado = str_replace($bbimagens, $imagens, $bbenunciado);
Abraços,
Leonardo
Você pode fazer esse SELECT e colocar os resultados em dois arrays: um com os valores iniciais; outro com os valores pelos quais os iniciais deverão ser alterados.
Esses arrays poderão ser usados em str_replace() ou preg_replace().
Na documentação dessas funções, há exemplos, inclusive, com o uso de arrays.
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif