Delegates, uma introdução rápida ao conceito.

Bom pessoal , vamos a mais um tutorial de objective C, hoje vamos trabalhar com um conceito extremamente importante de aplicativos de modo geral, o delegate. Os delegates tem a função principal de conectar o seu aplicativo com o dispositivo em si.

Caso você nunca tenha visto nada sobre o assunto talvez também seja interessante dar uma olhada na documentação a apple sobre o tema, acesse o link aqui.

Bom, vamos continuar vou demostrar alguns códigos onde o delegate é interessante de se usar.

Primeiramente vamos criar um novo projeto e colocar apenas um campo de textField e um label.

Em nosso arquivo .h vamos ligar nossos componentes e na linha onde temos nossa interface, dizemos a nosso projeto que usaremos o delegate.

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *campoTexto;

@property (weak, nonatomic) IBOutlet UILabel *labelResultado;

@end

Lembrando que os nomes das variáveis fica a seu critério. Basicamente até agora não fizemos nada muito diferente do que faríamos em um projeto normal, tirando pelo nosso <UITextFieldDelegate>, e agora vamos trabalhar com ela.

Em nosso arquivo .m vamos dizer quais componentes usaram seus respectivos delegates, e claro que um campo não pode usar um delegate de outro objeto ou seja, se em nosso em nosso arquivo .h declaramos um UITextFieldDelegate só podemos dar o delegate em um textField.

Para ligar um objeto ao delegate precisamos de um linha de código:

self.campoTexto.delegate = self;

Pronto, com esse código complexo podemos agora acessar diversas propriedades do nosso campo de texto.

Vamos mostrar um exemplo simples quando nosso usuário acessa o campo texto, o teclado sobe na tela, porem não temos um botão na tela para fazer a ação de mostrar os dados que ele digitou, vamos usar o botão return do próprio teclado.

Para isso precisamos do método:

-(BOOL)textFieldShouldReturn:(UITextField *)textField

(Como ele é um método do tipo bool, precisamos do retorno)

Implementado esse método só precisamos atribuir o valor de nosso label a nosso campo de texto:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

// atribuição dos valores

self.labelResultado.text = self.campoTexto.text;

//limpando o valor do campo de texto

self.campoTexto.text = @””;

return true;

}

Esse método foi apenas um pequeno exemplo, e só de nosso text Field, muitos outros componentes apresentam delegates, WebView por exemplo tem um método com o qual podemos saber se a página em questão já foi carregada ou se ainda está abrindo.

Infelizmente não podemos fazer um post para abordar todos os delegates que a apple tem, porém a documentação é bem interessante, acesse a documentação da apple aqui.

Paginação em PHP

Fala galera!

Hoje vamos tratar de um assunto importante para os programadores PHP: paginação.

Para que serve a paginação em PHP?

Muitas vezes o retorno de uma consulta SQL traz vários registros, e para que a página não seja muito extensa, é necessário dividi-los em páginas. E para evitar que sejam criados vários arquivos com cada página, é adicionado um script que faz a paginação. Vamos aprender e entender como funciona essa paginação em PHP.

Preparando o script

Seguindo nosso tutorial para criar CRUD em PHP, vamos utilizar a tabela ‘produto’ neste tutorial. Mas antes, precisamos de algumas variáveis básicas para fazer a paginação:

$pagina = isset($_GET["pagina"]) ? $_GET["pagina"] : "1"; // página atual, caso não exista assume o valor 1
$limite = 10; // limite de registros por páginas
$links = 3; //número de links exibidos antes e depois da página atual
$inicio = ($pagina-1) * $limite; //define o início da consulta, no caso o primeiro parâmetro do LIMIT

IMPORTANTE: não devemos nos esquecer de adicionar o LIMIT na nossa query! É ele quem trará os registros para suas respectivas páginas.

Retornando os dados

Vamos agora fazer o SELECT que irá trazer os nossos registros. Para fazer a paginação, devemos ter duas queries: uma para trazer o total de registros, e outra para trazer as queries da página atual.

$sqlPaginacao = mysql_query("SELECT * FROM produto ORDER BY id ASC"); //retorna o total de registros da tabela
$paginas = intval((mysql_num_rows($sqlPaginacao)-1) / $limite); //faz o cálculo do número de páginas

$sql = mysql_query("SELECT * FROM produto ORDER BY id ASC LIMIT $inicio, $limite"); //retorna o registros da página atual
while($dados=mysql_fetch_array($sql)) {
    // faz a exibição dos dados
}

Finalmente: a paginação!

Depois de consultar e exibir os dados, vamos colocar a nossa paginação para funcionar.

A primeira parte é simples: um link para a primeira página e para a página anterior. Para tal, precisamos apenas de um IF verificando se a página atual não é a primeira.

if(($pagina) > 1) {
    echo '<a href="?pagina=1">&laquo; Primeira</a> ';
    $anterior = $pagina - 1;
    echo '<a href="?pagina='.$anterior.'">Anterior</a> ';
}

Vamos agora exibir a página atual, e os links das outras páginas. Precisamos de um laço FOR para percorrer as páginas, respeitando o limite de links a serem exibidos.

for ($i = ($pagina-1)-$links; $i<($paginas + 1); $i++) {
    if ($i == $pagina -1) { //verifica se não é a página atual
        echo ($i+1) . ' ';
    } else {
        if($i+1>0 && $i<$pagina+$links) {
            $pag = $i+1;
            echo '<a href="?pagina='.$pag.'">'.$pag.'</a>&nbsp;';
        }
    }
}

E por último, vamos exibir os links para próxima e última páginas.

if ($pagina-1 < $paginas) {
    $proxima = $pagina+1;
    echo '<a href="?pagina='.$proxima.'">Próxima &rsaquo;</a>';
    $ultima = $paginas + 1;
    echo '&nbsp;<a href="?pagina='.$ultima.'">Última &raquo;</a>';
}

Pronto! Nossa paginação em PHP está finalizada.

A princípio, talvez possa parecer um pouco confuso, mas seguindo a lógica linha-a-linha fica fácil de compreender o script completo.

Veja nosso tutorial de paginação em PHP em funcionamento.

Até mais, galera!

webView com Objective-C de maneira rápida

Bom pessoal, hoje vamos falar de um tema muito interessante, e um dos conceitos mais importantes para a programação de aplicativos, vamos trabalhar com as WebViews, esses componentes tem uma função muito obvia, ele abre uma pagina web dentro do seu aplicativo.

Esse tipo de ferramenta pode ser muito útil na construção de um app, quando por exemplo um formulario de cadastro que existe em um site precisa ser aberto, mais fácil que refazer o formulário no app seria interessante usar uma webView para abrir a pagina.

Vamos começar um novo projeto, e dentro do seu storyboard coloque o componente webView. Assim como na imagem abaixo.

webView em objective C

E também vamos criar os outlets do webView.

@property (weak, nonatomic) IBOutlet UIWebView *webView;

Agora precisamos dizer a nossa webView que ela deve acessar uma pagina web pré determinada, para isso precisamos da url da pagina a ser acessada, então vamos criar uma.

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@”http://www.google.com”]]];

E pronto com essa linha de código nossa webView já está pronta e funcionando, lembrando que você pode sim fazer um aplicativo completo em uma webView, com uma página HTML ou algo semelhante, porem não teria o mesmo desempenho que um aplicativo nativo.

Como enviar e-mail autenticado usando PHPMailer

Como enviar e-mail autenticado usando PHPMailer

Fala galera!

Hoje vamos aprender a enviar e-mail autenticado usando PHPMailer, um script desenvolvido por Andy Prevost e Marcus Bointon para envio de e-mails pelo PHP.

Atualmente na versão 5.2.8, essa classe permite enviar e-mails pelo PHP através dos protocolos POP3 ou SMTP, e é amplamente recomendado e melhor que a função padrão mail(). Faça download da classe PHPMailer aqui.

Enviar e-mail autenticado usando PHPMailer

Primeiramente, precisamos chamar a classe no nosso script PHP. Neste tutorial, vamos utilizar a versão 5.1.

require_once('class.phpmailer.php');

O próximo passo será criar uma instância da classe PHP, passando um parâmetro único true, que indica que os erros ocorridos deverão ser retornados.

$mail = new PHPMailer(true);

Em seguida, vamos indicar que usaremos o protocolo SMTP para enviar os e-mails.

$mail->IsSMTP();

Agora vamos começar a configurar a classe para o envio. Porém, precisamos fazer essas configurações dentro de um try/catch. O try/catch é utilizado para tratamento de exceções e erros de execução sempre que um método de alguma classe é passível de causar algum erro.

try {

A primeira configuração é o endereço do servidor SMTP. Isso varia de acordo com as configurações do servidor de envio. No nosso exemplo, vamos configurar utilizando “localhost”. (Lembrando que a PHPMailer não funciona em ambiente local na sua máquina)

$mail->Host = "localhost";

Depois, vamos informar à classe que não vamos debugar o código.

$mail->SMTPDebug = false;

Agora sim vamos configurar o envio. E é aqui que está o pulo do gato!
São 3 parâmetros que devemos passar para que o e-mail seja autenticado:

$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Port = 587;

O primeiro parâmetro indica que vamos autenticar o e-mail que será enviado. Mas vamos complementar esse parâmetro com os dois próximos, que indicam o tipo de segurança e a porta utilizados. Em ambos, a configuração pode variar de acordo com o servidor. Uma dica rápida: essa configuração é utilizada para enviar pelo servidor do GMAIL (obrigado, de nada)!

Continuando, vamos agora passar os dados de acesso (usuário e senha).

$mail->Username = "seuemail@dominio.com.br";
$mail->Password = "suasenha";

Vamos agora adicionar o destinatário do e-mail.

$mail->AddAddress("destinatario@dominio.com.br", "Destinatário");

E agora o remetente. São duas funções: uma indica quem enviou, e a outra indica para quem deve ser respondido.

$mail->SetFrom("remetente@dominio.com.br", "Remetente");
$mail->AddReplyTo("remetente@dominio.com.br", "Remetente");

Em seguida, assunto do e-mail.

$mail->Subject = "Assunto do e-mail";

BÔNUS: vamos também configurar um anexo. Neste caso, vamos utilizar uma variável $anexo, que pegou um arquivo enviado de um formulário prévio.

$mail->AddAttachment($anexo["tmp_name"],$anexo["name"],"base64",$anexo["type"]);

PS: “base64” é o tipo de codificação que será utilizada para enviar o arquivo.

Agora vamos adicionar a mensagem do e-mail. Podemos fazê-lo em duas formas: e-mail com HTML, e e-mail padrão, sem formatação. Caso o gerenciador de e-mails do destinatário não consiga ler HTML, a mensagem sem HTML será exibida. Não é necessário configurar as duas, apenas uma delas já basta.

$mail->AltBody = $texto_sem_HTML;
$mail->MsgHTML($texto_com_HTML);

E, finamente, vamos solicitar o envio.

$mail->Send();

Porém, não vamos esquecer do nosso try/catch. Vamos fechar o try, e iniciar o catch.

} catch (phpmailerException $e) {
    echo $e;
} catch (Exception $e) {
    echo $e;
}

O primeiro catch trata a exceção phpmailerException. Essa exceção será chamada caso ocorra algum erro durante a execução da classe PHPMailer.

Já o segundo catch trata qualquer outra exceção que ocorra durante a execução do script.

E pronto! Agora você já sabe como enviar e-mail autenticado usando PHPMailer. Confira nosso código completo:

require_once('class.phpmailer.php');

$mail = new PHPMailer(true);
$mail->IsSMTP();

try {
    $mail->Host = "localhost";
    $mail->SMTPDebug = false;
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = "tls";
    $mail->Port = 587;
    $mail->Username = "seuemail@dominio.com.br";
    $mail->Password = "suasenha";
    $mail->AddAddress("destinatario@dominio.com.br", "Destinatário");
    $mail->SetFrom("remetente@dominio.com.br", "Remetente");
    $mail->AddReplyTo("remetente@dominio.com.br", "Remetente");
    $mail->Subject = "Assunto do e-mail";
    $mail->AddAttachment($anexo["tmp_name"],$anexo["name"],"base64",$anexo["type"]);
    $mail->AltBody = $texto_sem_HTML;
    $mail->MsgHTML($texto_com_HTML);
    $mail->Send();
} catch (phpmailerException $e) {
    echo $e;
} catch (Exception $e) {
    echo $e;
}

Até a próxima, pessoal!