# Aplicativos em PHP/FrameWorks/P4A
## P4A – PHP for Application

Site oficial - http://p4a.sf.net
P4A (PHP For Applications) é um framework em PHP tipo RAD e orientado a objetos para construção event-driven de aplicações web. Usa tableless HTML, suporte às teclas de atalho, point&click gerador de aplicativos, reconhecimento automático de datos, UTF-8, i18n/l10n, integração com a biblioteca PEAR.
De autoria do italiano Fabrizio Balliano.
Segundo a Wikipédia (http://pt.wikipedia.org):

## RAD

Rapid Application Development (RAD), também conhecido como Desenvolvimento Rápido de Aplicação, é um modelo de processo de desenvolvimento de software iterativo e incremental que enfatiza um ciclo de desenvolvimento extremamente curto (entre 60 e 90 dias). O termo foi registrado por James Martin em 1991 e tem substituído gradativamente o termo de prototipação rápida que já foi muito utilizada no passado

## Framework

No desenvolvimento do software, um framework é uma estrutura de suporte definida para que outro projeto de software possa ser organizado e desenvolvido. Tipicamente, um framework pode incluir programas de apoio, bibliotecas de código, linguagens de script e outros softwares para ajudar a desenvolver e juntar diferentes componentes de um projeto.

## Elementos do P4A
### Masks

É o objeto básico de interfaces, que contem todos os widgets e geralmente exibe objetos.
Localizado em /p4a/objects/mask.php (linha 45)

### Widgets

São os elementos GUI prontos que podemos usar para compor nossas máscaras (masks). Classe base para objetos que permitem a usuários interagirem com a aplicação: botões, menus, .
Localizado em /p4a/objects/widget.php (linha 48)
O P4A é um projeto abrigado no SourceForge desde fevereiro de 2003, que chegou ao 12o. lugar no ranking geral dos mais de 100.000 projetos do SourceForge, tendo ganhado alguns prêmios neste repositório. Atualmente fica em primeiro lugar entre os frameworks de PHP no SourceForge.net.
Já conta com locales para uns 160 países e tradução para uns 60, inclusive o Brasil (pt_BR).
P4A é um framework PHP, um software contendo bibliotecas, módulos e controles (widgets) usados para a construção de aplicações que devem ser usadas com um web browser conectado à Internet. Com P4A você estará habilitado a desenvolver e escrever código de aplicações web como você faria com as ferramentas RAD mais evoluídas. O resultado deverá ser uma aplicação que o usuário deverá usar pensando que está usando uma aplicação cliente clássica (tipo desktop).
Você não deve se preocupar com a criação da interface gráfica para seus projetos, porque P4A já tem um tema gráfico cliente agradável.

## Características

- Escrito em PHP (www.php.net), compatível com as versões PHP 4.3.x e 5.x.x e Apache 1.3.x e 2.0.x em Linux e Windows
- Integrado com a biblioteca Pear/DB (http://pear.php.net) e com isso suporta todos os bancos da suportados pela PEAD/DB: PostgreSQL, MySQL, SQL Server, Oracle e outros.
- Lógica e Design separados pelo template (http://pear.php.net/package/HTML_Template_Flexy)

### Busca

Outras informações sobre o Projeto P4A:

### Widgets

São os elementos GUI prontos que podemos usar para compor nossas máscaras (masks). Classe base para objetos que permitem a usuários interagirem com a aplicação: botões, menus, .
Esta lista (dos principais) é aninhada para reproduzir a herança das classes. Todos estes objetos extendem a classe P4A_Widget. Veja a referência de código para detalhes.

## Desenvolvendo Aplicativos com o P4A

Pré-Requisitos:
- Sistemas Operacionais Linux ou Windows
- PHP 4.3.x/4.4.x/5.x.x com Apache 1.3.x/2.0.x
- A biblioteca PEAR/DB
- Um banco de dados suportado pela bibliteca acima, caso o seu aplicativo use banco
Quando instalamos o Xampp (http://xampp.sf.net), ele provê todos os requisitos do P4A, inclusive tem versão para ambos os sistemas operacionais.
Quando descompactamos o p4a ele cria a seguinte estrutura de diretórios:
Os aplicativos criados devem ficar na pasta “applications”.
Na pasta “docs” está toda a referência do P4A.
Em “icons” estão os ícones utilizados, em vários tamanhos.
A pasta “p4a” é a principal do framework. Nela estão as bibliotecas, os objetos, os locales e mais alguns componentes importantes.
Os temas devem ficar na pasta “themes”

### Exemplo de Estrutura Mínima de uma Aplicação em P4A

Caso a aplicação utilize algum upload deverá ter uma pasta extra “uploads”, contendo uma sub pasta “tmp” e ambas com permissão 777.
Permissões: os demais arquivos: index.php, ola_mundo.php e ola_mascara.php devem ter permissão de leitura, escrita e execução para o dono e leitura e execução para Outros.

### Primeiro Exemplo – Olá Mundo

1)Criamos uma pasta ola_mundo dentro da pasta applications.
2)Criamos dentro de ola_mundo o arquivo index.php com o seguinte conteúdo:
index.php
No arquivo index.php existe uma chamada para a classe principal do aplicativo que encontra-se no arquivo de mesmo nome (ola_mundo.php) dentro da pasta objects.
ola_mundo.php
Veja que a classe principal abre o arquivo de máscara (mensagem.php).
mensagem.php
A pasta objects pode ou não conter uma sub pasta “masks”. Caso criemos a pasta “masks”, ela deverá contr os arquivos de interface da aplicação (masks). Em termos de organização e entendimento da estrutura é adequada a criação da subpasta masks.
Experimente criar este pequeno exemplo com e sem a pasta masks. Nela apenas ficará o arquivo mensagem.php. Dica: instale a extensão “Web develop” no Firefox e sempre que houver algum erro, corrija o erro e clique em Cookies – Clear Session Cookies e só então clique no botão Refresh do browser.
Se no Internet Explorer, feche e abra o browser novamente após qualquer alteração, ou faça alguma configuração correspondento a da extensão do FF.

### Segundo Exemplo – Acessando Banco de Dados

Este exemplo usa um banco de nome “p4a”, com o SGBD PostgreSQL. Teremos apenas uma tabela, funcionarios, com a estrutura abaixo:
A estrutura do aplicativo será:
Arquivos:
index.php
objects/cadastro.php
objects/funcionarios.php

### Exemplo Com 3 Tabelas

Este é um exemplo que acompanha o P4A original,contendo 3 tabelas, com exemplos de joins e que roda bem no MySQL. No PostgreSQL, devido a algumas incompatibilidades com a PEAR/DB, ele não roda bem. Segundo o autor do P4A, Fabrizi, esta incompatibilidade é apenas com os joins.
A estrutura das tabelas é:
Crie o banco p4a no MySQL com as tabelas acima.
A estrutura dos arquivos da aplicação:
Observe que:
index.php em $p4a =& p4a::singleton("products_catalogue") chama a classe products_catalog no arquivo de mesmonome.
products_catalog.php em $this->openMask("products") chama a classe products no arquivo products.php
Através do menu se tem acesso as demais classes dos arquivos brands.php e categories.php.
O código do aplicativo acompanha o P4A, portanto não há necessidade de colar aqui, somente colarei alguns trechos para comentar:
objects/products_catalogue.php
Neste arquivo encontramos este trecho de código:
Este diz quais as duas outras tabelas (db_sources) que serão utilizadas no aplicativo.
Trecho de “objects/products.php” definindo uma combo com acesso ao banco:
O index.php deve ficar parecido com este. Ajuste para os dados do seu MySQL:

## Dicas Extras

Suporte ao Ajax
A versão 1.99.2 já traz suporte ao Ajax. Basta ver o calendário adicionado ao lado dos campos data.
Acentuação
Quando à acentuação vale alertar que a codificação do P4A é a UTF8. Caso tenha algum problema com acentuação deverá encontrar um editor com suporte a essa codificação para corrigir os acentos, como é o caso dos editores do Linux gEdit e Kate.
Dicas do forum do projeto (no sourceForge.net).
Tenho duas tabelas. Quando clicar no botão Save, na Toolbar, quero salvar as duas tabelas.
R - Sobrescreva o método saveRow na sua mask. Se você tem 2 db_sources você pode fazer:
parent::saveRow; $outro_db_source->saveRow;
E assim por diante.
- Eu tenho duas mask e preciso compartilhar dados entre ambas. Ao clicar no registro eu preciso abrir a outra mask
R – Você pode acessar dados de qualquer mask com: $p4a->masks->nomemask->desejado
Como interceptar o método Save na Toolbar?
R - $this->intercept($toolbar->button->save, “onClick”, “method”)
Como inserir dados?
R- Você podecriar um db_source e fazer e circular por todos os elementos que você deseja inserir
Como alterar Labels?
R -
$this->fields->fieldname->setLabel(“Meulabel”);
$table->cols->nomecoluna->setLabel(“Meulabel”);
Como exibir em um campo data a data de hoje por default?
R-
$source->fields->order_date->setDefaultValue(P4A_Date::now(P4A_DATE));
Ou
$format = '%d/%m/%Y-%H/%M/%S'; // Ou outro formato
P4A_Date::now( $format );
Instalando Novos Temas no P4A
Acesse a página - http://p4a.sourceforge.net/icons-packs
E faça o download do tema desejado. Veja que para instalar basta editar a index.php do P4A e adicionar a linha:
define("P4A_ICONS_PATH", "/path/to/the/icons/directory");
Atualmente (06/2007) o P4A está na versão estável 2.0.6 e 2.1.3 em desenvolvimento.