Ir para conteúdo

POWERED BY:

Arquivado

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

Wallace Maxters

Classe PHP para gerar a saída em HTML.

Recommended Posts

Pessoal, alguém poderia me dar alguma ajuda em relação a essa classe que eu criei?

 

Podem criticar, dar idéias, retificar... Estou realmente precisando de opiniões alheias a respeito.

<?php
	
	class html
	{
		
		// Define as tags que serão fechadas assim: <tag /> //
		private static $autoclose = array('input', 'meta', 'br', 'hr', 'input');
		
		
		private function create_attr($attrs = array())
		{
			if( is_array($attrs) )
			{
				$output = '';
				
				foreach( $attrs as $attr => $value )
				{
					$output .= "$attr='$value' ";
				}
			
				return $output;
			}
		}
		
		
		public static function __callStatic( $name, $param )
		{
		
			
			if( strstr($name, 'open_') )
			{
				$name = substr($name, strlen('open_'));
				
				if( isset($param[0]) && is_array($param[0]))
				{
					
					$attrs = self::create_attr($param[0]);
				}
				else{
					$attrs = '';
				}	
				
				return "<$name $attrs>" . PHP_EOL;
			}
			elseif( strstr($name, 'close_') )
			{
				$name = substr($name, strlen('close_'));
				return "</$name>" . PHP_EOL;
			}
			elseif( in_array(strtolower($name), self::$autoclose) )
			{
				if( isset($param[0]) && is_array($param[0]))
				{
					$attrs = self::create_attr($param[0]);
				}
				else{
					$attrs = '';
				}
				
				return "<$name $attrs/>";
			}
			else
			{
				if( isset($param[1]) && is_array($param[1]))
				{
					$attrs = self::create_attr($param[1]);
				}
				else{
					$attrs = '';
				}
				
				$param[0] = ( ! isset($param[0])) ? null : $param[0];
				
				return "<$name $attrs>" . $param[0] . "</$name>" . PHP_EOL;
			}
			
		}
	}
Uso:
<?php   
 echo Html::open_table(array('class' => 'table table-bordered table table-striped', 'id' => 'u-teste'));
    echo Html::open_tr(array('id' => 'header'));
    echo Html::th('texto');
    echo Html::th('texto2');
    echo Html::th('texto3');
    echo Html::th('texto4');
    echo Html::close_tr();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu prefiro utilizar templates, assim, sem nunca gerar tags html com php, e nem misturar html no meio das minhas classes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá.

Sobre a questão de não ser feito pra gerar html.

Por que então frameworks, como Laravel e Cakephp, criam classes(helpers ou librarys) para esse fim (como no meu caso, mas é claro que nos frameworks são classes complexas)?

 

Bem! entre usar uma dessas classes e ficar concatenando uma stiring quilométrica, eu prefiro a opção que nao concatena.

 

Tá.

Sobre a questão de não ser feito pra gerar html.

Por que então frameworks, como Laravel e Cakephp, criam classes(helpers ou librarys) para esse fim (como no meu caso, mas é claro que nos frameworks são classes complexas)?

 

Bem! entre usar uma dessas classes e ficar concatenando uma stiring quilométrica, eu prefiro a opção que nao concatena.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concatenar strings? Você deve adicionar PHP ao HTML, não o contrário. O próprio PHP já é uma template engine. Invés de fazer:

echo '<div id="foo">' . echo $val . '</div>'

Faça:

<div id="foo"><?= $val ?></div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizo o Yii Framework, e para gerar formulários (antes de aprender a usar o Yii com template do Prado, muito bom) eu usava funções para gerar o input de texto, exemplo

 

<?php
echo $form->labelEx($model, 'name');
echo $form->textField($model, 'name');
?>

 

nesse caso acredito que a vantagem de gerar o HTML manualmente é clara, você não precisa se preocupar com o label deste texto, pois ele será gerado de acordo com o que está definido no modelo, nem se o atributo é obrigatório, pois se ele for framework se encarregada de colocar o asteristico vermelho.

 

Só por curiosidade, agora eu utilizo o template do Prado no Yii, e faço assim:

<com:TLabelEx model={$model} attribute="name" style="margin-top:5px;" />
<com:TTextField model={$model} attribute="name" />

 

utilizo com uma extensão chamada Taggy (que cria estas novas tags)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando do ponto de vista da peformasse, realmente é melhor adiconal apenas algumas linhas de php no HMTL (como nos views do Codeignter). Já vi alguns tutoriais falando a respeito.

 

Obrigado pelas opniões. Estou gostando de fazer parte do fórum =)

 

Concatenar strings? Você deve adicionar PHP ao HTML, não o contrário. O próprio PHP já é uma template engine. Invés de fazer:

 

echo '<div id="foo">' . echo $val . '</div>'
Faça:
<div id="foo"><?= $val ?></div>

 

 

Ops! acho que me expressei mal ao dizer "concatenar strings". Na verdade, eu acho feio é aquele mistureba que se faz no meio do html.kkkkkkkk. Acho que tomei trauma do código do site da empresa onde eu trabalhava:

Não tinham pelo menos as sintaxes alternativas (endif, endfor, endwhile) pra dar um grauzim no codigo, mas era um emboleira de ifs, foreachs e uma conexão com banco de dados quase no rodapé da página!

Sem contar o Javascript (document.location) pra substituir o header location....

Compartilhar este post


Link para o post
Compartilhar em outros sites

CodeIgniter é um exemplo do que não fazer, btw.. ;)

 

Alguns frameworks têm helpers para formulários porque eles inserem coisas específicas que os automatizam (CSRF Tokens, por exemplo). Os que fazem isso bem são o Rails, o Symfony e o Django. A maior parte serve só para complicar e para dizer que o framework tem algo a mais == marketing.

 

Não tinham pelo menos as sintaxes alternativas (endif, endfor, endwhile) pra dar um grauzim no codigo, mas era um emboleira de ifs, foreachs e uma conexão com banco de dados quase no rodapé da página!

 

Isso se chama Spaghetti Code e não tem a ver com linguagens/engines.

 

Sem contar o Javascript (document.location) pra substituir o header location....

 

Isso daí já é gambiarra das piores :lol:.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele funciona, de fato.

 

O problema dele é que observando a arquitetura e o design dele, qualquer um com uma pequena experiência em design de software consegue perceber que ele é muito, mas muito mal feito.

 

Você não precisa sair do CI por isso, mas é uma boa estudar outras ferramentas, frameworks e principalmente linguagens para ganhar experiência e escrever código melhor.

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.