SlideShare uma empresa Scribd logo
Fabio Ginzel [email_address]
PROGRAMAÇÃO WEB
OBJETIVO: Compreender conceitos básicos do funcionamento da internet; Entender as mudanças da antiga web para a nova web (web 2.0) Entender o fluxo de uma aplicação web Saber o “nosso” modo de programar para web
RESUMO Conceitos de Web Ferramentas de Programação O Desenvolvimento
Conceitos de Web Conceitos de Web 1.1 JavaScript 1.2 Requisição 1.3 Web “1.0” 1.4 Web “2.0” 1.5 Ajax 1.6 CSS
JavaScript Linguagem interpretada Roda do lado do cliente (quem interpreta é o browser) Consegue alterar elementos html dinamicamente, por isso é usada para validações dinamicas. Pode estar dentro do html ou em um arquivo separado Pode ter funções ou não
JavaScript dentro de um arquivo HTML Com Função: <script type=&quot;text/javascript&quot;>  function msgErro(erro){ alert(“O erro foi: “ + erro); }  </script>  Sem Função: <script type=&quot;text/javascript&quot;>  alert(“Seu Browser passou por aqui”); </script>
JavaScript Externo No html: <script type=&quot;text/javascript“ src=“/apresentacao/arquivo.js&quot;></script>  No Arquivo (arquivo.js): grupo = { msgErro : function(erro){ alert(“Msg de erro dentro de arquivo: “ + erro) ; }, escreveNaDiv : function(msg){ document.getElementByID(“nomeDaDiv”).innerHTML = msg ; } }; alert(“passou pelo arquivo”) ;
Requisição Uma mensagem enviada pelo cliente (browser) para o servidor web solicitando dados Existem diversos “metodos” de requisição, que diz o que o servidor deve fazer com aquela requisição Usamos basicamente 2: Get e Post
Método Get Solicita a resposta do servidor dado um determinado endereço (nada mais) Nesse endereço podem conter parametros da requisição. Uma aplicação pode receber esses parametros e decidir quais dados retornar Ex:  http://www.pandora.com.br Com parâmetros: http://www.orkut.com.br/ Main#Community?cmm=161395
Método Post Solicita a resposta do servidor dado um determinado endereço e uma série ilimitada de parametros que vão no corpo da mensagem O Endereço se mantem inalterado e os parametros vão de forma que o usuário não perceba Exemplo: preenchimento de um formulário, após clicar no OK.
Post e Get Comparativo O get tem uma limitação de quantidade de parametros, já que o endereço do site tem um limite Não da para gravar no favoritos ou no historico um pagina gerada atraves de um dado que vai no post
Post e Get: Quando Usar? Usar o Get em paginação ou em paginas que o usuario pode querer acessar diretamente sem passar por intermediarios Usar o post em todos os outros casos, resumindo... Em Formulários.
Web “1.0” Paginas estaticas, sem interação com usuário, onde o servidor web retorna sempre uma pagina completa O Browser (cliente) só tem o trabalho de exibir a pagina que o servidor retornou. O Usuário é apenas um leitor da informação.  Ex: http://www.sindicato.com.br/
Web “2.0” Paginas dinamicas, alteradas com a participação do usuário. O Usuário deixa de ser um leitor, ele passa ser um escritor daquela pagina, solicitando e cadastrando informações. O Browser (cliente) passa a fazer parte da programação, interpretando javascripts que fazem a interação acontecer. Ex: http://www.orkut.com/
Ajax Nova Linguagem? Grande Inovação?
AJAX Asynchronous Javascript And XML Nada mais do que o uso do javascript para fazer requisição ao servidor web, retornando apenas dados e não mais uma pagina inteira. Manuseando esses dados retornados na tela de forma a criar uma pagina dinamica Ex. Qualquer grid dos nossos sistemas atuais
AJAX - Principios O navegador hospeda uma aplicação, e não conteúdo O  servidor  fornece dados, e não conteúdo A interação do utilizador com a aplicação pode ser flexível e contínua
AJAX – Visão Geral
AJAX - Bibliotecas Existem diversas bibliotecas para ajudar no uso de ajax, as mais conhecidas são: YUI - Yahoo! UI Library jQuery GWT – Google Dojo TODAS COM O MESMO PRINCIPIO DE REQUISIÇÃO DE DADOS NÃO DE PAGINA!
CSS Usado para dar forma a pagina, mudar a posição de objetos, mudar cores, tamanhos, fonte... Etc Como o css só mexe na parte visual, podemos deixar a cargo de um webdesigner Estas propriedades tambêm podem estar “embutidas” no objeto não podendo assim ser alteradas por um css. Ex: <button style =“width:100px”  id=&quot;btnLogin&quot; type=&quot;button&quot;>Login</button> Não é uma boa pratica!
CSS Assim como javascript o css pode estar contido no html ou em um arquivo separado. Tambem é interpretado pelo browser O Ideal é sempre fazer parte de um arquivo separado, para o webdesigner ter total liberdade, alem de possibilitar a alteração do visual da pagina alterando apenas um arquivo
CSS - Exemplo No HTML: <link href=&quot;/apresentacao/estilo.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; />   <button id=&quot;btnLogin“ class= “classLoggin” type=&quot;button&quot;>Login</button> Estilo.css #btnLogin { width: 200px;  position: relative;  left: 100px; }   Ou .classLoggin { width: 200px;  position: relative;  left: 100px; }
Ferramentas de Programação Ferramentas de Programação 2.1 Firebug 2.2 FirePHP 2.3 Zend Studio
Firebug É um plugin para o Firefox, que possibilita Editar, visualizar e DEBUGAR: CSS HTML Javascript Para instala-lo procure no google firebug, Depois ativá-lo para aquele site clicando na baratinha
FirePHP É um plugin para o Firefox, que junto com o Firebug permite que você envie mensagens para ele atraves de comandos em PHP, facilitando o debug de sistemas. Mais pra frente veremos ele funcionando
Zend Studio IDE baseada no eclipse, que permite trabalhar com php e traz diversas facilidades para se trabalhar com o framework desenvolvido pelo mesmo grupo (Zend Framework) Permite Debuggar Criar arquivos atraves de templates do próprio framework
O Desenvolvimento O Desenvolvimento 3.1 Orientação a Objetos 3.2 MVC 3.3 PHP 3.4 Zend Framework 3.5 Dojo
Orientação a Objetos “ Dividir para conquistar” Dividir uma tarefa complicada em varias simples Ex. Agencia de Carros Dividimos em:  vende compra imprime boleto recebe o cartão de credito Etc.....
Orientação a Objetos Classe É a receita de um objeto Podemos ter varios objetos de uma determinada classe
Orientação a Objetos Objeto É o bolo feito com a receita. Trabalhamos com o objeto e não com a classe Ex. Classe homem Objeto Fabio Objeto Leandro ..... A classe não faz ação e não tem atributos, mas o objeto sim.. Ex: Homem não tem uma idade, não fala alguma coisa, Mas o fabio tem 24 anos, e fala alguma coisa.
Orientação a Objetos Herança Uma classe pode herdar outra classe Isto é, tudo que a classe pai faz ele faz tem, e faz algo mais. Ex. Classe pai: Mamiferos Classe filha Baleia
Orientação a Objetos Construtor Quando instanciamos um objeto, isto é criamos um objeto a partir de uma classe, ele chama determinado método da classe, este é o construtor: $fabio = new Homem(“24 anos”); Na classe: Class homem { Private idade ; Public function _construct(idade) { $this->idade = idade;   } }
Orientação a Objetos Classe Abstrata Ela define um modelo ( template ) para uma funcionalidade e fornece uma implementação incompleta   Ex.: Classe abstrata mamiferos Classe concreta baleia Objeto da classe baleia willy
Model View Controller (MVC) É um padrão de programação Consisti em dividir a aplicação em 3 partes: Model (Modelo) View (Visão) Controller (Controle)
Modelo (Model) É a camada responsável pelos dados, ela representa os dados em um banco de dados Reponsável por gravar os dados e por buscar os dados no banco de dados Exemplo: No arpan, teriamos uma classe da camada model chamada Pessifisi, outra chamada pessjuri etc...
View (Visão) É a camada responsável pela apresentação do sistema Nela você programa como os dados serão apresentados para o usuário Exemplo: O .dfm do delphi
Controller (Controle) É a camada responsável pelo processamento do sistema Ela pega os dados do model processa e apresenta na camada view
Model View Controller (MVC)
MVC no Delphi No delphi é possível programar usando o padrão MVC. O data modulo seria a camada model O .dfm seria a camada view E o .pas a camada controlller
PHP Linguagem interpretada, que é executada no servidor Em constante mudança Incorpora Orientação a Objetos a partir da versão 5 (recente)
PHP - Variaveis Não é necessário declarar o tipo. Podendo mudar o tipo de uma variavel em tempo de execução Ex: $apr = 10; $apr = “apresentacao”;
PHP – Métodos Mágicos No php existe a possibilidade de chamar metodos que não existem em um objeto. Ex: public function __construct(  ): chamado sempre que o objeto é instanciado public function __call($metodo,$parametros  ): chamado sempre que um metodo que não existe é chamado - Logo o php não vai dar mensagem de erro se você chamar um metodo que não existe.
Zend Framework Um framework que traz uma biblioteca de classes para ajudar na programação web com php Alem de trazer a biblioteca ele sugere um jeito de programar e organizar o código usando MVC
Zend Framework  Organização dos diretórios Raiz Application Configs Layouts Modules Próxima pagina Library Public
Zend Framework  Modules (Módulos) Cada módulo é como um sistema completo, mas com algum tipo de ligação entre os outros, como o arpan, panorama, panoptico.. etc Modules Nome_do_modulo Controllers Models Views
Zend Framework index.php Fica dentro da pasta public e manda o fluxo para o bootstrap Único arquivo que não é uma classe Vamos olhar o index.php
Zend Framework Bootstrap É uma classe (começa a parte OO) Recebe o fluxo do index.php  Cria e prepara todas as variaveis, objetos e parametros que vão ser usados no sistema Vamos olhar o bootstrap
Zend Framework .htaccess Arquivo que fica no public que configura o apache para aquela aplicação Parametro importante: RewriteEngine On RewriteRule ^.*$ index.php [NC,L] Ele diz que todos as requisição a partir daquele ponto vão ser direcionadas para o index.php
Zend Framework Rewrite Isso significa se caso for digitado http://testes.completo.com.br/msb/cur/public/usuario/login - Esta requisição irá para o index.php e este encaminhará para o bootstrap Requisição Index.php Bootstrap
Controllers O framework, a partir do bootstrap vai encaminhar o fluxo da aplicação para um determinado arquivo que fica dentro da pasta controllers de algum modulo usando a seguinte logica http://testes.completo.com.br/msb/cur/public/MODULO/CONTROLLER   Logo a requisição http://testes.completo.com.br/msb/cur/public/default/usuario/ O fluxo da aplicação vai para o modulo “default” arquivo UsuarioController
Action Dentro de uma classe controller podemos ter metodos publicos do tipo Action, eles são metodos que recebem uma requisição com o seguinte formato: http://testes.completo.com.br/msb/cur/public/modulo/controller/action
Exemplo class BemvindoController extends Zend_Controller_Action { public function olamundoAction() { $this->view->assign(&quot;texto&quot;,&quot;Ola Mundo&quot;) ; } } Para chegar nesse action deveriamos digitar http://endereco/public/modulo/bemvindo/olamundo
View Relembrando a estrutura de diretórios: Modules Nome_do_modulo Controllers Models Views Nome_do_controller Nome_do_action.phtml
View Depois de passar por um action o framework direciona para o seu respectivo view para saida dos dados
Dojo Biblioteca ajax integrada com zend framework Dividida em 3 sub-bibliotecas: Dojo Dijit Dojox
Dojo É responsável pelo ajax em si, com os metodos xhrPost e xhrGet que fazem a criação da thread e a requisição, alem de outros arquivos componentes basicos, como manipulção de data.
XhrPost e XhrGet Dojo.xhrPost({ handleAs: ‘json’, // Formato de retorno url:  http://teste.com/seila, //  Url da requisição postData: {“id”:10,”nome”:”fabio”} // parametros do post Ou form: “formteste”, // nome do formulario com os campos a enviar load:  function (resposta,xmlArgs) { alert(resposta); } // função que vai chamar quando retornar a requisição
Dijit É responsável pelos formularios e seus campos bonitinhos e suas validações. Ex: dijit.form.DateTextBox   dijit.form.ValidationTextBox  Etc... - Obs. A Validação do validationTextBox pode ser feita com o uso de Expressão Regular
Dojox São componentes criados a partir de um projeto que ainda não esta 100% maduro e que um dia se transformarão em dojo ou dijit O mais importante para nós é o dojox.grid.DataGrid   Obs. Na proxima versão do dojo (1.4) vão aparecer dois novos grids o  dojox . grid . EnhancedGrid  e o  dojox . grid . TreeGrid
Dojo e Zend Framework A integração do dojo com o zend framework é simples, já que o framework gera todo o codigo javascript que inicializa o dojo e seus componentes. Restando ao programador apenas o trabalho de instanciar corretamente o componente do dojo já encapsulado pelo framework
Formulario Dojo class Swe_Form_NovoContrib extends Zend_Dojo_Form { public function render(Zend_View_Interface $view = null){ $this->getView()->headLink ()->appendStylesheet ($this->getView()->baseUrl ( &quot;/swe/styles/sty&quot;.strtolower(Pandora_Constantes::getConstante('clientesigla')).&quot;/inclcontr.css&quot; ) ); $this->getView()->headScript ()->prependFile ( $this->getView()->baseUrl ( &quot;/swe/js/inclcontrib.js&quot; ) ); $this->getView()->headScript ()->prependFile (  $this->getView()->baseUrl(&quot;/default/js/pandora/validates.js&quot;)  );   $this->getView()->dojo()->requireModule ( 'dojo.data.ItemFileReadStore' )  return parent::render($view) ; }
Formulario Dojo public function init() { $this->setMethod('post'); $this->setName('formContrib');  $campo = new Pandora_Dojo_Form_Element_ValidationTextBox( &quot;orgao&quot; ); $campo->setMsgInvalido(&quot;Digite o nome do seu orgão sem acentos ou ç&quot;)  ->setPreDefDecorator(Pandora_Dojo_Form_Element_ValidationTextBox::NovaLinha) ->setLabel ( &quot;Orgão: &quot; ) ->setRequired ( false ) ->setMaxLength ( 60 ) ->setRegExp('[a-zA-Z0-9\s]{1,}') ->addFilters(array('StringTrim', 'StringToUpper','StripTags'))  ->setAttrib ( &quot;uppercase&quot;, true ) ->setAttrib('promptMessage',&quot;Digite o nome do seu orgão sem acentos&quot; ) $campos[] = $campo; $this->addElements($campos); }   }
Documentação http://framework.zend.com http://docs.dojocampus.org
Anúncio

Recomendados

PPTX
09 Java Script - As formas de usar
Centro Paula Souza
 
PPTX
08 Java Script Introdução - Teoria
Centro Paula Souza
 
PDF
Javascript - Aplicações Interativas para a Web
Adriano Lima
 
PDF
Revisão html e java script
Maurício Linhares
 
PDF
Ds aula 01 - Introdução ao Visual Studio CSharp - Modo Visual
Centro Paula Souza
 
PPT
#DeveloperDay - Front-end API html5
Leandro Santos
 
PPT
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
Professor Samuel Ribeiro
 
PPT
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
Professor Samuel Ribeiro
 
PPTX
Treinamento Básico Sobre ASP.NET MVC
Michael Costa
 
PPT
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
PDF
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Rodrigo Bueno Santa Maria, BS, MBA
 
PDF
Introdução a HTML, CSS, JS, Ajax
Gabriel Kamimura Yano
 
PPTX
jQuery e ASP.Net MVC a dupla dinâmica
Victor Cavalcante
 
PPTX
Introdução de web
Sedu
 
DOCX
Iniciando em html5 seleção gustavo
Gustavo Passos
 
PDF
Java Web 1 Introducao
Eduardo Mendes
 
PPTX
06 html links e frames
Centro Paula Souza
 
PDF
Spa com angular js flisol 2015 - aquidauana ms
Paulo Roberto Sampaio Bezerra
 
PDF
Curso de Java (Parte 6) Introdução a Front-end
Mario Sergio
 
PPT
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
PDF
Curso Java (Parte 8) Web Service REST
Mario Sergio
 
PPTX
Introdução básica ao JavaScript
Carlos Eduardo Kadu
 
PDF
Navegadores por de baixo dos panos - Ana Luiza Bastos
iMasters
 
PDF
Apostila visual basic
Carlos Catanejo
 
PPTX
AngularJS - 10 passos para aprender a criar suas directivas
Janderson Fernandes Cardoso
 
PDF
01-Introdução HTML - DDW II
Evelyn Ramos
 
PPTX
JSPs Introdução Parte 1
Elaine Cecília Gatto
 
PDF
Orientação a Objetos no Delphi - Controle de Estoque (II)
Ryan Padilha
 
PPTX
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Luiz Antonio
 
PPTX
Introdução ao desenvolvimento da web.pptx
MarceloRosenbrock1
 

Mais conteúdo relacionado

Mais procurados (20)

PPTX
Treinamento Básico Sobre ASP.NET MVC
Michael Costa
 
PPT
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
PDF
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Rodrigo Bueno Santa Maria, BS, MBA
 
PDF
Introdução a HTML, CSS, JS, Ajax
Gabriel Kamimura Yano
 
PPTX
jQuery e ASP.Net MVC a dupla dinâmica
Victor Cavalcante
 
PPTX
Introdução de web
Sedu
 
DOCX
Iniciando em html5 seleção gustavo
Gustavo Passos
 
PDF
Java Web 1 Introducao
Eduardo Mendes
 
PPTX
06 html links e frames
Centro Paula Souza
 
PDF
Spa com angular js flisol 2015 - aquidauana ms
Paulo Roberto Sampaio Bezerra
 
PDF
Curso de Java (Parte 6) Introdução a Front-end
Mario Sergio
 
PPT
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
PDF
Curso Java (Parte 8) Web Service REST
Mario Sergio
 
PPTX
Introdução básica ao JavaScript
Carlos Eduardo Kadu
 
PDF
Navegadores por de baixo dos panos - Ana Luiza Bastos
iMasters
 
PDF
Apostila visual basic
Carlos Catanejo
 
PPTX
AngularJS - 10 passos para aprender a criar suas directivas
Janderson Fernandes Cardoso
 
PDF
01-Introdução HTML - DDW II
Evelyn Ramos
 
PPTX
JSPs Introdução Parte 1
Elaine Cecília Gatto
 
PDF
Orientação a Objetos no Delphi - Controle de Estoque (II)
Ryan Padilha
 
Treinamento Básico Sobre ASP.NET MVC
Michael Costa
 
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Rodrigo Bueno Santa Maria, BS, MBA
 
Introdução a HTML, CSS, JS, Ajax
Gabriel Kamimura Yano
 
jQuery e ASP.Net MVC a dupla dinâmica
Victor Cavalcante
 
Introdução de web
Sedu
 
Iniciando em html5 seleção gustavo
Gustavo Passos
 
Java Web 1 Introducao
Eduardo Mendes
 
06 html links e frames
Centro Paula Souza
 
Spa com angular js flisol 2015 - aquidauana ms
Paulo Roberto Sampaio Bezerra
 
Curso de Java (Parte 6) Introdução a Front-end
Mario Sergio
 
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
Curso Java (Parte 8) Web Service REST
Mario Sergio
 
Introdução básica ao JavaScript
Carlos Eduardo Kadu
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
iMasters
 
Apostila visual basic
Carlos Catanejo
 
AngularJS - 10 passos para aprender a criar suas directivas
Janderson Fernandes Cardoso
 
01-Introdução HTML - DDW II
Evelyn Ramos
 
JSPs Introdução Parte 1
Elaine Cecília Gatto
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Ryan Padilha
 

Semelhante a Programação Web com Zend Framework e Ajax com Dojo (20)

PPTX
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Luiz Antonio
 
PPTX
Introdução ao desenvolvimento da web.pptx
MarceloRosenbrock1
 
PDF
Desenvolvimento Web Avançado usando PHP
elliando dias
 
PDF
PHPZEIRO: Adote um framework
Leonardo "Hackin" Freire
 
PDF
Slide Aula - Curso CakePHP
Rangel Javier
 
PPTX
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 
PDF
Serversidephp pptx2-120418140114-phpapp01
joaocarlobarros
 
ODP
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Marcelo Linhares
 
PDF
PHP Turbinado com CodeIgniter - Conisli 2011
Evaldo Junior
 
PPT
Apresentação faef
Lucas Simões Maistro
 
PDF
Desenvolvimento Web com CakePHP
Sérgio Vilar
 
PPT
introdução a ajax
elliando dias
 
PDF
Desenvolvimento web produtivo
Bruno Luiz Pereira da Silva
 
PDF
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Almir Neto
 
PDF
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Otávio Calaça Xavier
 
PPTX
Desenvolvemos para web?
Luis Vendrame
 
PPTX
Apresentação faef
Lucas Simões Maistro
 
PDF
Arquitetura Web Desacoplada - FCI/Mackenzie
Vivaldo Jose Breternitz
 
PDF
O que move a web atualmente?
Fabio Janiszevski
 
PPT
A Linguagem Php
Joaquim Vieira
 
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Luiz Antonio
 
Introdução ao desenvolvimento da web.pptx
MarceloRosenbrock1
 
Desenvolvimento Web Avançado usando PHP
elliando dias
 
PHPZEIRO: Adote um framework
Leonardo "Hackin" Freire
 
Slide Aula - Curso CakePHP
Rangel Javier
 
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 
Serversidephp pptx2-120418140114-phpapp01
joaocarlobarros
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Marcelo Linhares
 
PHP Turbinado com CodeIgniter - Conisli 2011
Evaldo Junior
 
Apresentação faef
Lucas Simões Maistro
 
Desenvolvimento Web com CakePHP
Sérgio Vilar
 
introdução a ajax
elliando dias
 
Desenvolvimento web produtivo
Bruno Luiz Pereira da Silva
 
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Almir Neto
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Otávio Calaça Xavier
 
Desenvolvemos para web?
Luis Vendrame
 
Apresentação faef
Lucas Simões Maistro
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Vivaldo Jose Breternitz
 
O que move a web atualmente?
Fabio Janiszevski
 
A Linguagem Php
Joaquim Vieira
 
Anúncio

Programação Web com Zend Framework e Ajax com Dojo

  • 3. OBJETIVO: Compreender conceitos básicos do funcionamento da internet; Entender as mudanças da antiga web para a nova web (web 2.0) Entender o fluxo de uma aplicação web Saber o “nosso” modo de programar para web
  • 4. RESUMO Conceitos de Web Ferramentas de Programação O Desenvolvimento
  • 5. Conceitos de Web Conceitos de Web 1.1 JavaScript 1.2 Requisição 1.3 Web “1.0” 1.4 Web “2.0” 1.5 Ajax 1.6 CSS
  • 6. JavaScript Linguagem interpretada Roda do lado do cliente (quem interpreta é o browser) Consegue alterar elementos html dinamicamente, por isso é usada para validações dinamicas. Pode estar dentro do html ou em um arquivo separado Pode ter funções ou não
  • 7. JavaScript dentro de um arquivo HTML Com Função: <script type=&quot;text/javascript&quot;> function msgErro(erro){ alert(“O erro foi: “ + erro); } </script> Sem Função: <script type=&quot;text/javascript&quot;> alert(“Seu Browser passou por aqui”); </script>
  • 8. JavaScript Externo No html: <script type=&quot;text/javascript“ src=“/apresentacao/arquivo.js&quot;></script> No Arquivo (arquivo.js): grupo = { msgErro : function(erro){ alert(“Msg de erro dentro de arquivo: “ + erro) ; }, escreveNaDiv : function(msg){ document.getElementByID(“nomeDaDiv”).innerHTML = msg ; } }; alert(“passou pelo arquivo”) ;
  • 9. Requisição Uma mensagem enviada pelo cliente (browser) para o servidor web solicitando dados Existem diversos “metodos” de requisição, que diz o que o servidor deve fazer com aquela requisição Usamos basicamente 2: Get e Post
  • 10. Método Get Solicita a resposta do servidor dado um determinado endereço (nada mais) Nesse endereço podem conter parametros da requisição. Uma aplicação pode receber esses parametros e decidir quais dados retornar Ex: http://www.pandora.com.br Com parâmetros: http://www.orkut.com.br/ Main#Community?cmm=161395
  • 11. Método Post Solicita a resposta do servidor dado um determinado endereço e uma série ilimitada de parametros que vão no corpo da mensagem O Endereço se mantem inalterado e os parametros vão de forma que o usuário não perceba Exemplo: preenchimento de um formulário, após clicar no OK.
  • 12. Post e Get Comparativo O get tem uma limitação de quantidade de parametros, já que o endereço do site tem um limite Não da para gravar no favoritos ou no historico um pagina gerada atraves de um dado que vai no post
  • 13. Post e Get: Quando Usar? Usar o Get em paginação ou em paginas que o usuario pode querer acessar diretamente sem passar por intermediarios Usar o post em todos os outros casos, resumindo... Em Formulários.
  • 14. Web “1.0” Paginas estaticas, sem interação com usuário, onde o servidor web retorna sempre uma pagina completa O Browser (cliente) só tem o trabalho de exibir a pagina que o servidor retornou. O Usuário é apenas um leitor da informação. Ex: http://www.sindicato.com.br/
  • 15. Web “2.0” Paginas dinamicas, alteradas com a participação do usuário. O Usuário deixa de ser um leitor, ele passa ser um escritor daquela pagina, solicitando e cadastrando informações. O Browser (cliente) passa a fazer parte da programação, interpretando javascripts que fazem a interação acontecer. Ex: http://www.orkut.com/
  • 16. Ajax Nova Linguagem? Grande Inovação?
  • 17. AJAX Asynchronous Javascript And XML Nada mais do que o uso do javascript para fazer requisição ao servidor web, retornando apenas dados e não mais uma pagina inteira. Manuseando esses dados retornados na tela de forma a criar uma pagina dinamica Ex. Qualquer grid dos nossos sistemas atuais
  • 18. AJAX - Principios O navegador hospeda uma aplicação, e não conteúdo O servidor fornece dados, e não conteúdo A interação do utilizador com a aplicação pode ser flexível e contínua
  • 20. AJAX - Bibliotecas Existem diversas bibliotecas para ajudar no uso de ajax, as mais conhecidas são: YUI - Yahoo! UI Library jQuery GWT – Google Dojo TODAS COM O MESMO PRINCIPIO DE REQUISIÇÃO DE DADOS NÃO DE PAGINA!
  • 21. CSS Usado para dar forma a pagina, mudar a posição de objetos, mudar cores, tamanhos, fonte... Etc Como o css só mexe na parte visual, podemos deixar a cargo de um webdesigner Estas propriedades tambêm podem estar “embutidas” no objeto não podendo assim ser alteradas por um css. Ex: <button style =“width:100px” id=&quot;btnLogin&quot; type=&quot;button&quot;>Login</button> Não é uma boa pratica!
  • 22. CSS Assim como javascript o css pode estar contido no html ou em um arquivo separado. Tambem é interpretado pelo browser O Ideal é sempre fazer parte de um arquivo separado, para o webdesigner ter total liberdade, alem de possibilitar a alteração do visual da pagina alterando apenas um arquivo
  • 23. CSS - Exemplo No HTML: <link href=&quot;/apresentacao/estilo.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /> <button id=&quot;btnLogin“ class= “classLoggin” type=&quot;button&quot;>Login</button> Estilo.css #btnLogin { width: 200px; position: relative; left: 100px; } Ou .classLoggin { width: 200px; position: relative; left: 100px; }
  • 24. Ferramentas de Programação Ferramentas de Programação 2.1 Firebug 2.2 FirePHP 2.3 Zend Studio
  • 25. Firebug É um plugin para o Firefox, que possibilita Editar, visualizar e DEBUGAR: CSS HTML Javascript Para instala-lo procure no google firebug, Depois ativá-lo para aquele site clicando na baratinha
  • 26. FirePHP É um plugin para o Firefox, que junto com o Firebug permite que você envie mensagens para ele atraves de comandos em PHP, facilitando o debug de sistemas. Mais pra frente veremos ele funcionando
  • 27. Zend Studio IDE baseada no eclipse, que permite trabalhar com php e traz diversas facilidades para se trabalhar com o framework desenvolvido pelo mesmo grupo (Zend Framework) Permite Debuggar Criar arquivos atraves de templates do próprio framework
  • 28. O Desenvolvimento O Desenvolvimento 3.1 Orientação a Objetos 3.2 MVC 3.3 PHP 3.4 Zend Framework 3.5 Dojo
  • 29. Orientação a Objetos “ Dividir para conquistar” Dividir uma tarefa complicada em varias simples Ex. Agencia de Carros Dividimos em: vende compra imprime boleto recebe o cartão de credito Etc.....
  • 30. Orientação a Objetos Classe É a receita de um objeto Podemos ter varios objetos de uma determinada classe
  • 31. Orientação a Objetos Objeto É o bolo feito com a receita. Trabalhamos com o objeto e não com a classe Ex. Classe homem Objeto Fabio Objeto Leandro ..... A classe não faz ação e não tem atributos, mas o objeto sim.. Ex: Homem não tem uma idade, não fala alguma coisa, Mas o fabio tem 24 anos, e fala alguma coisa.
  • 32. Orientação a Objetos Herança Uma classe pode herdar outra classe Isto é, tudo que a classe pai faz ele faz tem, e faz algo mais. Ex. Classe pai: Mamiferos Classe filha Baleia
  • 33. Orientação a Objetos Construtor Quando instanciamos um objeto, isto é criamos um objeto a partir de uma classe, ele chama determinado método da classe, este é o construtor: $fabio = new Homem(“24 anos”); Na classe: Class homem { Private idade ; Public function _construct(idade) { $this->idade = idade; } }
  • 34. Orientação a Objetos Classe Abstrata Ela define um modelo ( template ) para uma funcionalidade e fornece uma implementação incompleta Ex.: Classe abstrata mamiferos Classe concreta baleia Objeto da classe baleia willy
  • 35. Model View Controller (MVC) É um padrão de programação Consisti em dividir a aplicação em 3 partes: Model (Modelo) View (Visão) Controller (Controle)
  • 36. Modelo (Model) É a camada responsável pelos dados, ela representa os dados em um banco de dados Reponsável por gravar os dados e por buscar os dados no banco de dados Exemplo: No arpan, teriamos uma classe da camada model chamada Pessifisi, outra chamada pessjuri etc...
  • 37. View (Visão) É a camada responsável pela apresentação do sistema Nela você programa como os dados serão apresentados para o usuário Exemplo: O .dfm do delphi
  • 38. Controller (Controle) É a camada responsável pelo processamento do sistema Ela pega os dados do model processa e apresenta na camada view
  • 40. MVC no Delphi No delphi é possível programar usando o padrão MVC. O data modulo seria a camada model O .dfm seria a camada view E o .pas a camada controlller
  • 41. PHP Linguagem interpretada, que é executada no servidor Em constante mudança Incorpora Orientação a Objetos a partir da versão 5 (recente)
  • 42. PHP - Variaveis Não é necessário declarar o tipo. Podendo mudar o tipo de uma variavel em tempo de execução Ex: $apr = 10; $apr = “apresentacao”;
  • 43. PHP – Métodos Mágicos No php existe a possibilidade de chamar metodos que não existem em um objeto. Ex: public function __construct( ): chamado sempre que o objeto é instanciado public function __call($metodo,$parametros ): chamado sempre que um metodo que não existe é chamado - Logo o php não vai dar mensagem de erro se você chamar um metodo que não existe.
  • 44. Zend Framework Um framework que traz uma biblioteca de classes para ajudar na programação web com php Alem de trazer a biblioteca ele sugere um jeito de programar e organizar o código usando MVC
  • 45. Zend Framework Organização dos diretórios Raiz Application Configs Layouts Modules Próxima pagina Library Public
  • 46. Zend Framework Modules (Módulos) Cada módulo é como um sistema completo, mas com algum tipo de ligação entre os outros, como o arpan, panorama, panoptico.. etc Modules Nome_do_modulo Controllers Models Views
  • 47. Zend Framework index.php Fica dentro da pasta public e manda o fluxo para o bootstrap Único arquivo que não é uma classe Vamos olhar o index.php
  • 48. Zend Framework Bootstrap É uma classe (começa a parte OO) Recebe o fluxo do index.php Cria e prepara todas as variaveis, objetos e parametros que vão ser usados no sistema Vamos olhar o bootstrap
  • 49. Zend Framework .htaccess Arquivo que fica no public que configura o apache para aquela aplicação Parametro importante: RewriteEngine On RewriteRule ^.*$ index.php [NC,L] Ele diz que todos as requisição a partir daquele ponto vão ser direcionadas para o index.php
  • 50. Zend Framework Rewrite Isso significa se caso for digitado http://testes.completo.com.br/msb/cur/public/usuario/login - Esta requisição irá para o index.php e este encaminhará para o bootstrap Requisição Index.php Bootstrap
  • 51. Controllers O framework, a partir do bootstrap vai encaminhar o fluxo da aplicação para um determinado arquivo que fica dentro da pasta controllers de algum modulo usando a seguinte logica http://testes.completo.com.br/msb/cur/public/MODULO/CONTROLLER Logo a requisição http://testes.completo.com.br/msb/cur/public/default/usuario/ O fluxo da aplicação vai para o modulo “default” arquivo UsuarioController
  • 52. Action Dentro de uma classe controller podemos ter metodos publicos do tipo Action, eles são metodos que recebem uma requisição com o seguinte formato: http://testes.completo.com.br/msb/cur/public/modulo/controller/action
  • 53. Exemplo class BemvindoController extends Zend_Controller_Action { public function olamundoAction() { $this->view->assign(&quot;texto&quot;,&quot;Ola Mundo&quot;) ; } } Para chegar nesse action deveriamos digitar http://endereco/public/modulo/bemvindo/olamundo
  • 54. View Relembrando a estrutura de diretórios: Modules Nome_do_modulo Controllers Models Views Nome_do_controller Nome_do_action.phtml
  • 55. View Depois de passar por um action o framework direciona para o seu respectivo view para saida dos dados
  • 56. Dojo Biblioteca ajax integrada com zend framework Dividida em 3 sub-bibliotecas: Dojo Dijit Dojox
  • 57. Dojo É responsável pelo ajax em si, com os metodos xhrPost e xhrGet que fazem a criação da thread e a requisição, alem de outros arquivos componentes basicos, como manipulção de data.
  • 58. XhrPost e XhrGet Dojo.xhrPost({ handleAs: ‘json’, // Formato de retorno url: http://teste.com/seila, // Url da requisição postData: {“id”:10,”nome”:”fabio”} // parametros do post Ou form: “formteste”, // nome do formulario com os campos a enviar load: function (resposta,xmlArgs) { alert(resposta); } // função que vai chamar quando retornar a requisição
  • 59. Dijit É responsável pelos formularios e seus campos bonitinhos e suas validações. Ex: dijit.form.DateTextBox dijit.form.ValidationTextBox Etc... - Obs. A Validação do validationTextBox pode ser feita com o uso de Expressão Regular
  • 60. Dojox São componentes criados a partir de um projeto que ainda não esta 100% maduro e que um dia se transformarão em dojo ou dijit O mais importante para nós é o dojox.grid.DataGrid Obs. Na proxima versão do dojo (1.4) vão aparecer dois novos grids o dojox . grid . EnhancedGrid e o dojox . grid . TreeGrid
  • 61. Dojo e Zend Framework A integração do dojo com o zend framework é simples, já que o framework gera todo o codigo javascript que inicializa o dojo e seus componentes. Restando ao programador apenas o trabalho de instanciar corretamente o componente do dojo já encapsulado pelo framework
  • 62. Formulario Dojo class Swe_Form_NovoContrib extends Zend_Dojo_Form { public function render(Zend_View_Interface $view = null){ $this->getView()->headLink ()->appendStylesheet ($this->getView()->baseUrl ( &quot;/swe/styles/sty&quot;.strtolower(Pandora_Constantes::getConstante('clientesigla')).&quot;/inclcontr.css&quot; ) ); $this->getView()->headScript ()->prependFile ( $this->getView()->baseUrl ( &quot;/swe/js/inclcontrib.js&quot; ) ); $this->getView()->headScript ()->prependFile ( $this->getView()->baseUrl(&quot;/default/js/pandora/validates.js&quot;) ); $this->getView()->dojo()->requireModule ( 'dojo.data.ItemFileReadStore' ) return parent::render($view) ; }
  • 63. Formulario Dojo public function init() { $this->setMethod('post'); $this->setName('formContrib'); $campo = new Pandora_Dojo_Form_Element_ValidationTextBox( &quot;orgao&quot; ); $campo->setMsgInvalido(&quot;Digite o nome do seu orgão sem acentos ou ç&quot;) ->setPreDefDecorator(Pandora_Dojo_Form_Element_ValidationTextBox::NovaLinha) ->setLabel ( &quot;Orgão: &quot; ) ->setRequired ( false ) ->setMaxLength ( 60 ) ->setRegExp('[a-zA-Z0-9\s]{1,}') ->addFilters(array('StringTrim', 'StringToUpper','StripTags')) ->setAttrib ( &quot;uppercase&quot;, true ) ->setAttrib('promptMessage',&quot;Digite o nome do seu orgão sem acentos&quot; ) $campos[] = $campo; $this->addElements($campos); } }