Plugin jQuery para Sifraphp

Olá Pessoal !

    Os últimos dias foram meio complicados e tive que abrir mão de postar algumas coisinhas aqui no blog. Mas a partir de agora espero ser mais frequente em minhas atualizações.

    A nova versão do sifraphp estará disponível em breve, algumas funcionalidades foram adicionadas , entretanto, falta realizar mais   testes  para verificar a performance. Enquanto isso me deparei com  problemas ao desenvolver  aplicações. O problema era na hora de especificar tarefas que os botões de minha aplicação devia fazer.

    Toda vez que criava um aplicação tinha que escrever alguns javascripts que quase sempre ficavam repetitivos, chatos e isso tudo para que minhas aplicações trabalhassem com ajax. Dessa forma iniciei o desenvolvimento de um plugin para a biblioteca jquery que facilita a inserção de ações nas minhas Views. Para quem ainda não conhece a jQuery , vai o site oficial : http://jquery.com. Jquery é um framework javascript que facilita o trabalho com javascript, ele é perfeita para designers.

    A pesar de sua excelente utilização para firulas em sites (AFF ! Sou péssimo com arte …. rsrsrsr), jQuery dispõe de algumas funções muito legais e que facilitam bastante na hora de trabalhar com DOM. Para utilizar o plugin junto com o framework Sifra é muito fácil, veja abaixo :

    Em seu controlador adicione a biblioteca jquery e o plugin jquery, como vistos nos tutoriais passados. Em seguida configure a localização do site e chame o plugin sifraction. Posteriormente é só criar os botões e formulários.
   
    // chamando o sifraction
    $(Document).ready(function(){
        $(document).sifraction.BASE_APP = "http://www.miniblog.net/"
        $(document).sifraction.start()
    })

    Vamos criar um botão que irá realizar uma ação ajax que salva POSTS em um BLOG !
   
Primeiro criamos um formulário, com alguns atributos a mais, para salvar os POSTS :
   





Como foi percebido acima o plugin captura alguns atributos. Vejamos quais são :

module = Nome do modulo a ser chamado. Valor Padrão é Public
controller = Nome do controlador a ser chamado. Valor Padrão é Index
action = Nome da ação a ser chamada. Valor padrão é index
params = Parâmetros passados para ação. Estes tem a seguinte sintaxe: param1=val1&pram2=val2. No caso em que a ação for ajax esses parametros serão passados via POST caso não seja uma requisição ajax , são passado por GET.
ajax = Define se a requisição será ajax ou não. Valor Padrão é true
bind = recebe o nome da função javascript que sera executada no término da requisição


Há ainda um outro atributo chamado formsubmit que será setado como true no botão, para disparar as requisições com os dados do formulário. Lembrando que este atributo só será usado caso você esteja trabalhando com formulário.

Quando precisar que algum botão , que não esteja ligado ao envio de dados,  basta inserir os atributos na tag input, da seguinte maneira :











Lembrando que só funcionará para forms e inputs type=”button”

Essa é a primeira versão deste plugin. Em breve estarei disponibilizando melhorias, a fim de que ele atenda mais situações.

Foi testado com jquery 1.3.2 e jquery 1.4.
Dê sugestões  ! Obrigado e até a próxima


Versão 2.0.4

A versão 2.0.4 está disponível para download no seguinte link : http://code.google.com/p/sifraphp/downloads/list . Esta versão conta com muitas novidades :

  • Agora trabalha com URL amigáveis  -  é preciso o mod_rewrite
  • Utiliza o PDO na camada Model
  • Provê uma interface para helpers ( util para uso nas views )
  • Implementa uma interface de configuração, dessa forma é possivel realizar as configurações dos aplicativos através de arquivos .ini
  • Disponibiliza uma interface de configuração - para criar classes de configuração personalizadas
  • Disponibiliza uma interface para scripts (usado para a geração de componentes de interface)
  • Conta com um sistema de autenticação
  • Controle de exceções com geração de logs
  • Provê suporte ao desenvolvimento baseado em componentes

Uma das novidades é que agora é possível configurar a aplicação através de arquivos INI. Abaixo segue uma tabela explicativa dos parâmetros aceitáveis.



conf_database
Sessão de configuração de banco de dados
rdbms
Servidor de banco de dados. Este podem ser : mysql, sqlite, firebird. Mssql, sybase, pgsql, dblib
host
Localização do servidor de banco de dados, ou pasta onde estará localizado o arquivo de dados (sqlite)
Port
Porta do servidor de banco de dados. Não é necessário para rdbms sqlite
User
Usuário do servidor. Não é necessário para rdbms sqlite
Pass
Senha de usuário. Não é necessário para rdbms sqlite
Database
Base de dados que será utilizado na aplicação. No caso de rdbms sqlite é necessário informar o nome do arquivo
conf_path
Sessão de configuração de localizações
base_application
URI da aplicação
js_path
Nome das pastas de javascripts. O nome definido será subpasta de View
css_path
Nome das pastas de folhas de estilo. O nome definido será subpastas de View
img_path
Nome das pastas de imagens. O nome definido será subpasta de View
module_path
Nome da pasta de repositório de módulos
component_path
Localização da pasta raiz dos componentes
helper_path
Localização da pasta raiz dos helpers
conf_router
Sessão de configuração do roteador
default_module
Nome do modulo inicial da aplicação
default_controller
Nome do controlador padrão
default_action
Nome da ação padrão
template_name
Extensão dos arquivos de template
log_in_file
Se 1 as exceções serão lançadas em arquivos de log
log_path
Localização da pasta de logs


A conf_authetication, sessão de autenticação segue a sintaxe abaixo:
Para melhor visualização a tabela segue algumas diretivas :
Nome do usuário será representado por nuser.
Nome do módulo será representado por nmod
Nome do controlador será representado por nctr
Nome da ação será representado por nact


*.nuser = allow
NomeDoModulo acessível a todos os usuários
Nuser.nmod = allow
Nuser tem acesso completo ao modulo nmod
Nuser.nmod.nctr = allow
Nuser tem acessa completo ao controlador nctr
Nuser.nmod.nctr.nact = allow

Nuser acessa apenas a acao nact pertencente ao controlador nctr do modulo nmod



Após a configuração inicial devemos ler as configuração acima. Utilizamos as classes de configuração provida pelo SifraPHP para tal tarefa. Existem 5 classes de configuração, são elas :

  1. Nucleo_Configuration_Authentication → lê a sessão conf_authentication
  2. Nucleo_Configuration_Database → lê a sessão conf_database
  3. Nucleo_Configuration_Path → lê a sessão conf_path
  4. Nucleo_Configuration_Router → lê a sessão conf_router
  5. Nucleo_Configuration_Configuration → lê todas as sessões


As classes de configuração acima implementam uma interface chamada Nucleo_Configuration. Esta interface descreve um único método chamado setConfiguration que recebe como parâmetro uma string com o nome do arquivo de configuração.
Todas essas sessões podem estar localizada no mesmo arquivo de configuração ou em arquivos distintos.

Além disso foi removido os módulos de UI, estes serão a partir de agora, distribuídos como componentes. Em breve estarei disponibilizando alguns componentes como exemplo.
Outra novidade refere-se a camada View que pode contar com helpers, estes helpers devem implementar a interface Nucleo_Helper, com o método publico execute($params). Os helpers ajudam com tarefas comuns e bem específicos para a camada view.


Em breve estarei postando como utilizar alguns recursos !

Obrigado e até a próxima !

Próximas novidades em breve

Está em desenvolvimento a release 2.0.4, que por sinal introduz muitas novidades a fim de facilitar o desenvolvimento. A mudança mais radical será na camada model, além dessa camada alguns métodos do framework serão descontinuados – foram substituídos por métodos estáticos - e haverá possibilidade de configuração através de arquivos externos ini (arquivos de configuracao).

Na camada Model a biblioteca ADODB5 foi substituída pela PDO (PHP data objects) pois se tornou extensão nativa do PHP 5. Ela provê métodos de performance superior à ADODB5, porém não suporta o mapeamento de objetos em banco de dados relacionais. A tarefa ORM deverá ser realizada pelo próprio desenvolvedor ou há liberdade de escolha entre diversos frameworks capazes de realizar tal tarefa , como exemplo Doctrine.

Por existir constante preocupação com a velocidade de resposta, houve várias mudanças em algumas tarefas. A chamada de métodos estáticos é 4 vezes mais rápida do que a chamada de métodos não estáticos, por isso a substituição desses, entretanto,as tarefas (ou chamadas) atuais ainda continuam funcionando, isso implica que aplicativos construídas utilizando velhos métodos estarão compatíveis.

Para chamar por exemplo uma fábrica de controladores, não será preciso instanciar um objeto Nucleo_Controller_Factory, basta chamar pelo método estático Nucleo_Controller_Factory::dispatch().

Também será possível configurar o banco de dados, localização de pastas, chamadas padrões e regras de autenticação, em arquivos externos ao framework, isso contribui para garantir a segurança. Outra novidade é na classe Nucleo_Registry_Registry, nela foi inserido um método estático load capaz de ler um arquivo de configuração para setar constantes. Por exemplo, se o programa fizer uso de variáveis globais você terá que inseri-las através do método set ou load.

Se for utilizado o set(), você deverá inicia-las no próprio código, mas caso haja grande quantidade de variáveis predefinida , que podem mudar dependendo do trabalho, é possível declara-las em arquivos externos. Dessa forma se houver a necessidade de manutenção em seus aplicativos não será necessário manipular o código, apenas arquivos de configuração de variáveis globais.

Em breve (provavelmente dia 15 de Outubro) a próxima versão estará disponível , até lá mais novidades serão postadas !

Criando a Camada View (Utilizando a release 2.0.3)

Foi postado um tutorial sobre os conceitos básicos da camada VIEW. Este tutorial pode ser visto no seguinte link

Tutoriais

Além disso também foi criado um exemplo afim de expor o funcionamento de alguns conceitos do framework que pode ser baixado neste Link. O exemplo foi desenvolvido utilizando a release 2.0.3.
Para o funcionamento correto do exemplo basta configurar a localização do framework no arquivo index.php

Contamos com a colaboração de todos para manter o projeto !

Criando um Controlador

Este tutorial mostra como criar um controlador. A qualidade ficou um pouco ruim, mas acho que dá pra entender o que foi feito. Está sendo utilizado a release 2.0.1, que por sinal foi adicionado
um modulo de autenticação de usuários !

Nos próximos tutoriais irei mostrar como utiliza-lo.

A estrutura usada para o controlador foi a seguinte :

www //Pasta root do apache
Module //Nome da pasta root dos modulos (Este nome é o padrão)
Public //Modulo chamado Public
Controller //Pasta Controller (contém os controladores do modulo) pasta obrigatória
Index.php //Nome do controlador


Link para o video

Correção de Bugs ! release 2.0.1

Release 2.0.1 Disponível .Foram corrigidos alguns bugs na criação do datagrid, além disso foi inserido mais uma constante de configuração chama TEMPLATE_PATH. Esta constante refere-se a pasta de templates comuns em toda aplicação. Deve ser uma subpasta de PUBLIC_PATH.

Também foi criado um wiki com tutoriais. Ao longo das semanas vou postar tutoriais
e exemplos de aplicações.

Lista de Tutoriais
Lista de Downloads

SifraPHP Versão 2.0.0 ! Muito Melhor ........

Já faz um bom tempo que não adiciono nenhum post (Me falta tempo !!!), mas estou trabalhando no projeto desde a ultima versão disponibilizada. Terminei algumas mudanças no framework, tais como, a flexibilidade no uso das classes controllers, views e model. Esta versão está muito mais flexível.
Entretanto, por terem sido muita as mudanças na estrutura do framework, o sifraphp 2.0 não é compatível com as versões anteriores. Abaixo segue uma lista das mudanças realizadas :

  • O arquivo de configuração agora é o próprio index.php
  • É possível ter mais de um controller por Modulo
  • Mais variáveis de configuração
  • Componentes de interface gráfica que utilizam Ajax
  • Datagrid mais rápido e com mais funcionalidades e temas (Compativel com jQuery)
  • Forms com validadores
  • Possibilidade de instanciação das bibliotecas javascript jQuery e Ext
  • Melhor performance
  • Melhor trabalho com exceções (Nucleo_Exception)
  • Nome de classes melhoradas
  • Estrutura da aplicação mais flexível
  • Construção de Datagrids mais simples
Essas foram as principais mudanças. O framework pode ser baixado Aqui.

Principais clases:

Nucleo_Controller_Controller
Nucleo_Model_Model
Nucleo_Model_Table
Nucleo_UI_Form
Nucleo_UI_Datagrid

PARA CRIAR UM CONTROLLER A CLASSE DEVE SER UMA CLASSE FILHA DE Nucleo_Controller_Controller!

Logo será postado um pequeno tutorial de utilização do framework, além disso já está disponível um exemplo no site do projeto !

Abaixo segue exemplos de configuração simples do arquivo index.php:

define('DEFAULT_MODULE','Publico');// Obrigatorio ! Caso não coloque isso uma mensagem de ajuda de configuração é impressa !
define('DEFAULT_CONTROLLER','Intranet');
define('USER','facil');
define('PASS','123');
define('HOST','test');
define('DATABASE','meus_testes');
/***********************************/

require("../Nucleo/Load/Class.php");// Obrigatorio