Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Não há alternativas ao uso de templates, smarty...etc?
Alguem conhece algum outro mecanismo para separar o
codigo php do html sem ter que usar sistemas de terceiros?
Obrigado João Batista Neto,
Era exatamente isso que eu queria...Valeuuuuuu :clap:
Do manual do PHP
Agora, você pode utilizar um design pattern chamado Composite para abstrair o HTML:
Composite :seta: Estrutural
Intenção:
Criar uma composição de objetos em uma árvore que representa a hierarquia parte-todo. Com Composite, você trabalhará da mesma forma com os vários tipos de objetos da composição, independente da forma que o objeto é implementado.
Motivação:
Muitas vezes, no desenvolvimento web, utilizamos estruturas HTML complexas e, com o passar do tempo, a repetição é eminente afinal, é comum utilizarmos a mesma estrutura para um menu, formulário de contato, produtos e os vários componentes visuais de interface de usuário.
Para abstrair a complexabilidade dessas estruturas, podemos utilizar objetos simples que agrupados formam a estrutura completa de uma página.
Aplicabilidade:
O padrão Composite pode ser utilizado quando se deseja representar uma hierarquia de elementos, como o HTML e ignorar a diferença entre os objetos da composição, com Composite você será capaz de trabalhar com todos os elementos de uma forma única, independente da forma que a estrutura é representada.
Estrutura:
/applications/core/interface/imageproxy/imageproxy.php?img=http://dp.improjetos.com.br/View.png&key=ce737ba9a7fb95e3780a0225b5fb68a3a8257e0cea38779ec2825b3371a279d3" alt="Imagem Postada" class="bbc_img">
Participantes:
Component (ViewComponent):
Declara a interface para todos os objetos na composição e implementa um comportamento padrão para essa interface que é comum para todos os objetos da composição (apenas o que é realmente comum).
Component também pode declarar uma interface para acessar os objetos filhos, da composição, mas esse comportamento é opcional, assim como a interface para acessar o elemento pai de um objeto da composição.
Leaf (Input, Image, Text):
Um Leaf é um objeto, na composição, que não tem filhos, como uma imagem no HTML que é representada pelo elemento <img... /> que não possui um nó filho.
Composite (HTML, Button, Form):
Todo objeto, que pode ter filhos na composição, é definido como Composite. Além da própria representação, um Composite também terá filhos que possuem suas próprias representações.
O Composite possui uma estrutura (um array por exemplo) para armazenar seus filhos que podem ser outros Composites ou Leafs.
Client (View)
Manipula os objetos da árvore utilizando a interface comum Component.
Colaborações:
Utilizando a interface Component, os clientes podem interagir com os objetos da composição de uma forma uniforme. Como um Leaf não possui filhos, qualquer requisição (à operação draw() por exemplo) é tratada diretamente, já no caso dos Composites, além de seu tratamento específico, a requisição é repassado para todos os filhos que tratarão a requisição conforme apropriado.
Exemplo de código:
ViewComponent.php
<?php
/**
* Declara a interface para todos os objetos na composição e implementa um
* comportamento padrão para essa interface que é comum para todos os objetos
* da composição (apenas o que é realmente comum).
* Component também pode declarar uma interface para acessar os objetos filhos,
* da composição, mas esse comportamento é opcional, assim como a interface para
* acessar o elemento pai de um objeto da composição.
*/
abstract class ViewComponent {
/**
* Lista de filhos
* @var ArrayObject
*/
protected $children;
/**
* Atributo ID do elemento
* @var string
*/
private $id;
/**
* Define se o Component é um Leaf ou um Composite
* @var boolean
*/
protected $leaf = false;
/**
* Constroi o Component
*/
/**
* Adiciona um filho à estrutura
* @param ViewComponent $component
*/
} else {
/**
* Desenha todos os filhos da composição
*/
for ( $iterator->rewind() ; $iterator->valid() ; $iterator->next() ){
/**
* Desenha o Component
*/
abstract public function draw();
/**
* Recupera o ID do elemento
* @return string
*/
Form.php
<?php
/**
* Implementação de um formulário
*/
class Form extends ViewComponent {
/**
* Atributo action do form
* @var string
*/
private $action;
/**
* Método de envio do formulário
* @var string
*/
private $method = 'post';
/**
* Constroi um novo formulário
* @param string $action Atributo action do form
* @param string $method Método de envio do formulário
*/
/**
* Desenha o formulário
*/
Input.php
<?php
/**
* Implementação de um Input
*/
class Input extends ViewComponent {
/**
* Input é um Leaf
* @var boolean
*/
protected $leaf = true;
/**
* Nome do campo
* @var string
*/
private $name;
/**
* Tipo do campo
* @var string
*/
private $type = 'text';
/**
* Valor do campo
* @var string
*/
private $value;
/**
* Constroi um Input
* @param string $name Nome do campo
* @param string $type Tipo do campo (ex: text, password, submit)
* @param string $value Valor do campo
*/
/**
* Desenha o componente
*/
Label.php
<?php
/**
* Implementação de um label
*/
class Label extends ViewComponent {
/**
* ID do elemento input
* @var string
*/
private $for;
/**
* Adiciona um filho ao componente
* @param ViewComponent $component
*/
/**
* Desenha o componente
*/
HTML.php
<?php
/**
* Implementação SIMPLES de um HTML. O Componente HTML não é um Leaf, porém,
* para simplificar a ilustração, foi definido, nesse exemplo, como um leaf
* para evitar uma varredura pelos sub-elementos.
*/
class HTML extends ViewComponent {
/**
* Conteúdo
* @var string
*/
private $content;
/**
* Para simplificar, nesse caso HTML será um Leaf
* @var boolean
*/
protected $leaf = true;
/**
* Constroi um objeto HTML
* @param string $html
*/
/**
* Desenha o componente
*/
Usando:
Saída:
/applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/wink.gif&key=0566fd943552bcff9cb1b879403ca34b5ff8f67befaac7fe4648006e9f764689" alt="Imagem Postada" class="bbc_emoticon">