Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hao

[Resolvido] Acrescentar estilos in-line em tags html

Recommended Posts

fala pessoal,

 

estou precisando acrescentar estilos in-line em tags html em textos, vou dar um exemplo para ser mais especifico:

 

tenho uma variavel da seguinte forma:

$texto = "<p>Lorem ipsum<p>";

 

e tenho a seguinte array:

$css = array( "p" => "font-size:14px; color:#999;", "h1" => "font-size: 26px;" );

 

agora de alguma forma precisaria correr a variavel $texto em busca de tags html como o <p> e com a array $css alterar sua forma para a seguinte:

"<p style=\"font-size:14px; color:#999;\">Lorem ipsum<p>";

 

existe alguma expressao regular que faça isso? ou há outra forma para resolver isso?

 

[]'s http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim:

echo "<p style=\"" . $css['p'] . "\">Texto</p>";

É isso que você quer?

 

[]s

Beraldo

 

quase isso, mas queria algo mais automatizado, tipo fiz aqui e ficou bem parecido com que to querendo olha só:

 

$tag = array
		(
			"/<p>/", 
			"/<h1>/"
		);
$para = array
		(
			"<p style=\"font-size:20px;\">", 
			"<h1 style=\"color:#003366;\">"
		);

$html = "<p>Lorem ipsum</p>\n";
$html = preg_replace($tag, $para, $html);

seria quase isso porem, gostaria de alguma forma nao precisar colocar na assim "<p style=\"font-size:20px;\">" mas apenas mostrar o estilo, dessa forma "font-size:20px;"

 

não sei se ficou claro! mas é isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera, enquanto nao consigo nada melhor, fiz uma classe para me ajudar por enquanto, se tiverem algum conselho para melhorar estamos ai!

 

/*
===================================
Classe para colocar estilos inline
***********************************
* @example:
* $html = "<p><b>Alô</b> Mundo!</p>";
* $objCss = new cssInLine();
* $html = $objCss->change($html);
* echo $html;
*********************************** 
*/
class cssInLine
{
	// Variaveis
	var $html;
	var $tag;
	var $para;
	
	public function __construct ()
	{
		$this->tag = array(
					"/<p>/", 
					"/<h1>/", 
					"/<body>/", 
					"/<b>/"
				);
		$this->para = array(
					$this->inline("p", "font-size:20px; font-family: Trebuchet MS, Georgia;"), 
					$this->inline("h1", "color:#003366; font-variant:small-caps; text-align: center; padding:10px; background: #f7f7f7;"), 
					$this->inline("body", "font-family: Arial, Tahoma;"), 
					$this->inline("b", "color: #cc0000;")
				);
	}
	public function inline ($seletor, $estilo) {
		return "<$seletor style=\"{$estilo}\">";
	}
	public function change ($html){
		return preg_replace($this->tag, $this->para, $html);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou sem o PHP instalado aqui para testar, mas tente assim:

 

$css = array( "p" => "font-size:14px; color:#999;", "h1" => "font-size: 26px;" );

echo preg_replace("/<([a-z0-9])+?>/i", "{$css['$1'}", $texto);

Não sei se aquele $1 no índice do array vai funcionar para casar com a ER. Nunca fiz isso. Assim que eu puder, farei um teste. Veja se funciona. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

[]s

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, quase q da certo!

 

porem eu alterei e ficou assim:

$css = array( "p" => "font-size:14px; color:#999;", "h1" => "font-size: 26px;" );
$texto = "<p><b>Olá</b> mundo!</p>\n";
echo preg_replace("/<([a-z0-9])+?>/i", "$css{'$1'}", $texto);

e me retornou esse resultado:

Array{'p'}Array{'b'}Olá mundo!

 

como não tenho experiencia com ER, o que devo alterar para fazer a troca certa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui uma forma mais compacta, mas esta funcionou perfeitamente:

 

$css = array( "p" => "font-size:34px; color:#999;", "h1" => "font-size: 46px;" );
$texto = "<h1>Ola</h1>\n<p>mundo!</p>\n<b>negrito</b>";

preg_match_all("/<([a-z0-9]+?)>/i", $texto, $matches);

foreach ($matches[1] as $tag)
{
	if (array_key_exists($tag, $css))
	{
		$texto = preg_replace("/<" . $tag . ">/i", "<" . $tag . " style=\"" . $css[$tag] . "\">", $texto);
	}
}

echo $texto;

[]s

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.