Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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();Eu prefiro utilizar templates, assim, sem nunca gerar tags html com php, e nem misturar html no meio das minhas classes.
Eu prefiro utilizar templates, assim, sem nunca gerar tags html com php, e nem misturar html no meio das minhas classes.
Usas Twig ou Smarty?
Engines não são necessárias, já que o PHP é uma (o propósito inicial dele foi somente esse).
Compartilho da mesma opinião dos colegas, PHP não foi feito para gerar HTML...
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.
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>
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)
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....
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:.
hum....eu uso codeigniter.... o quê que pega de errado nele?
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.
Estou estudando o Laravel e o Cakephp.
Procure pelo padrão Composite.