Pages

Subscribe:

Ads 468x60px

Labels

30/07/2014

Persistencia Objeto Relacional com framework Doctrine ORM PHP

Objeto mapeador relacional (ORM) para PHP que fica no topo de uma poderosa camada de abstração de banco de dados (DBAL). Uma das suas principais características é a opção para escrever consultas de banco de dados em um dialeto SQL proprietário orientado a objetos chamado Doctrine Query Language (DQL), inspirado em hiberna HQL. Isso fornece aos desenvolvedores uma alternativa poderosa ao SQL que mantém a flexibilidade sem a necessidade de código desnecessária duplicação.

Encontra-se atualmente em sua versão estável 2.3 e pode ser estudado através do site:
 

http://www.doctrine-project.org/

Um bom link para baixar versões anteriores segue aqui:

http://www.doctrine-project.org/downloads/

Para entendermos um pouco de como funciona este Framework vamos fazer um experimento de teste.

Um requisito inicial para que tudo funcione corretamente é ter instalado na sua maquina o gerenciador de dependências Composer.

Tendo o Composer já instalado vamos para este exemplo usar e baixar a versão do Doctrine 1.2.4:

Por padrão temos de colocar em nossa pasta no servidor Apache+PHP+Mysql uma pasta para o Doctrine, uma para os modelos (models) e uma para os arquivos do site (site).

Criei no banco de dados Mysql uma tabela para exemplo de nome "motocicleta":

---------------------------------------------------------
CREATE TABLE IF NOT EXISTS `motocicleta` (
  `id` int(22) NOT NULL,
  `modelo` varchar(50) NOT NULL,
  `ano` varchar(4) NOT NULL,
  `fabricante` int(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

---------------------------------------------------------
Criaremos dois arquivos na pasta models:

bootstrap.php
----------------------------------------------------------------------------
 <?php
//4:24
require '../doctrine2/Doctrine.php';

spl_autoload_register(array('Doctrine', 'autoload'));
spl_autoload_register(array('Doctrine_Core', 'modelsAutoload'));

$manager = Doctrine_Manager::getInstance();

try {
  // Insira aqui os dados de sua conexão
  $conn = Doctrine_Manager::connection('mysql://root:@localhost/doctrine');

  $manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING,
Doctrine_Core::MODEL_LOADING_CONSERVATIVE);
  $manager->setAttribute(Doctrine_Core::ATTR_EXPORT, Doctrine_Core::EXPORT_ALL);

  $profiler = new Doctrine_Connection_Profiler();
  $manager->setListener($profiler);

} catch (Doctrine_Manager_Exception $e) {
  print $e->getMessage();
}

Doctrine_Core::loadModels('../models');
?>
----------------------------------------------------------------------------


build-models.php
----------------------------------------------------------------------------
 <?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
require 'bootstrap.php';

set_time_limit(90);

$modelsPath = '../models';
$title = 'Modelos gerados com sucesso!';
$msg = '';

try {
    Doctrine::generateModelsFromDb(realpath($modelsPath));
} catch (Doctrine_Import_Builder_Exception $e) {
    $title = 'Falha ao gerar modelos!';
    $msg = $e->getMessage();
}

print $title . "\n" . $msg;
?>
----------------------------------------------------------------------------

Estes dois arquivos serão responsáveis pela configuração do ambiente Doctrine e da abstração do banco.  Para testarmos se tudo deu certo iremos através do navegador executar o arquivo criado de nome "build-models.php", caso tenha dado tudo certo a mensagem será:

Agora podemos conferir na pasta do projeto (models) os arquivos que o Framework criou de abstração do banco que são:



Observe que será criada uma pasta dentro de '/models/' de nome 'generated' com os arquivo de classe abstrata BaseMotocicleta.php e fora da pasta 'generated' teremos a classe que fará herdará dela os métodos, a classe de nome 'Motocicleta.php'.

Este exemplo e a continuidade do projeto podem ser estudados em vídeos no blog do  nosso amigo http://www.rafaelwendel.com.

Espero que tenham gostado e até logo.

25/07/2014

Gerando Hot Spot no Google Maps Facilmente

Olá, para quem está precisando inserir em seu site o Hot Spot de localização do seu estabelecimento em seu site com o Google Maps este site facilita a sua vida:

https://www.mapbuildr.com/buildr

Observe o painel de cadastro das informações de localização como é simples de implementar:



Clicando-se em ADD e inserindo as informações necessárias e salvando podemos ver como fica o resultado final:







  

Veja como fica bem personalizado as informações de seu hot spot Google Maps:

 
 Ao final de todo o processo você já pode gerar o código para inserir em seu site ou blog.  Lembre-se de se cadastrar no serviço do Google Maps e Gerar sua API Key e Map Element ID.
Essa foi a sugestão do Bruno.

Até logo.


11/06/2014

Utilizando Behat pra BDD

Quer melhorar a performance e desempenho das suas aplicações PHP?

Use o Behat!

-> http://behat.org/

Mais informações: http://blog.marcelioleal.com/utilizando-behat-pra-bdd-ou-pra-seus-testes-funcionais/

02/05/2014

Manual de Desenvolvimento do Moodle

Segue um link muito importante para desenvolvimento no Moodle:

http://desenvolvimentomoodle.wordpress.com/2011/07/11/hello-world/

:)

26/03/2014

TOP 10 FRAMEWORKS PHP PARA DESENVOLVEDORES

TOP 10 FRAMEWORKS PHP PARA DESENVOLVEDORES
Se você é um desenvolvedor PHP e olhando para algumas das melhores frameworks PHP para seus projetos web, então a seguir pode ser útil para você.Temos arredondado uma lista de Top 10 Frameworks PHP que ajudam a simplificar suas tarefas de desenvolvimento. Após Frameworks PHP ajudá-lo a projetar e desenvolver sites dinâmicos cross browser e aplicações web rapidamente. Aproveite!

1. Cake PHP

cakephp-quadro
CakePHP é um framework de desenvolvimento rápido para PHP que oferece uma arquitetura flexível para o desenvolvimento, manutenção e implantação de aplicativos. CakePHP vem com built-in ferramentas para validação de entrada, proteção CSRF, Formulário de proteção adulteração, prevenção de injeção de SQL, XSS e prevenção, ajudando você a manter seu aplicativo seguro e seguro. Em vez de ter de planejar onde as coisas vão, o CakePHP vem com um conjunto de convenções para orientá-lo no desenvolvimento de seu aplicativo.

2. Laravel

Laravel
Laravel é um framework PHP comprometida com elegância e simplicidade.Laravel é para todos os programadores PHP, até mesmo iniciantes. Laravel é construído em cima de vários componentes Symfony, dando a sua aplicação uma grande base de código bem testado e confiável. Laravel é construído com os testes em mente. Mantenha-se flexível com o contêiner IoC, e executar os testes com PHPUnit

3. Yii Framework

Yii-Quadro
Yii é um framework PHP de alta performance melhor para o desenvolvimento da Web 2.0 aplicações escritas em PHP5. Ele trabalha para simplificar o desenvolvimento de aplicativos e ajuda a garantir um produto final extremamente eficiente, extensível e de fácil manutenção. Sendo extremamente desempenho otimizado, Yii é uma escolha perfeita para qualquer projeto de tamanho.

4. Symfony

symfony
Symfony é um framework de aplicações web; symfony segue o modelo-visão-controlador do sistema (MVC) e começando o dia mais popular por dia, Symfony é um framework livre sob a licença MIT.

5. Phalcon PHP

Phalcon
Phalcon PHP é um framework web entregue como uma extensão C proporcionando alto desempenho e menor consumo de recursos. Phalcon PHP é escrito em C, com independência de plataforma em mente. Como resultado, Phalcon PHP está disponível no Microsoft Windows, GNU / Linux, Mac OS X, você pode baixar um pacote binário para o sistema de sua escolha ou construí-lo a partir de fontes. Phalcon não é apenas sobre o desempenho, é bastante robusto, rico em recursos e fácil de usar. Phalcon é um software de código aberto licenciado sob a Licença New BSD. http://phalconphp.com/en/

6. CodeIgniter

CodeIgniter
CodeIgniter é um framework PHP poderoso, com uma pegada muito pequena, construída para programadores PHP que precisam de um kit de ferramentas simples e elegante para criar aplicações web com recursos completos. Se você é um desenvolvedor que vive no mundo real das contas de hospedagem compartilhada e clientes com prazos, e se você está cansado de quadros ponderously grandes e completamente sem documentos,

7. Zend

Zend Framework
Zend Framework 2 é um framework de código aberto para o desenvolvimento de aplicações web e serviços usando PHP 5.3 +. Zend Framework 2 usa 100% de código orientado a objetos e utiliza a maior parte dos novos recursos do PHP 5.3, ou seja, namespaces, encadernação, funções lambda tarde estáticos e encerramentos. Zend Framework 2 evoluiu de Zend Framework 1, um framework PHP de sucesso com mais de 15 milhões de downloads.

8. Yaf-Yet Another Quadro

Yaf
Yaf é o primeiro framework PHP MVC que é escrito em C e construir como extensão PHP. É considerado como o mais rápido e com o menor consumo de recursos framework PHP para agora. http://www.yafdev.com/

9. Combustível PHP

fuelphp
O combustível é um simples, flexível comunidade, impulsionado PHP framework web 5.3 com base nas melhores idéias de outras estruturas com um novo começo. Combustível foi testado em Apache, IIS e Nginx. Combustível tem uma abordagem diferente para muitas estruturas e se esforça para ser conduzido pela comunidade.

10. PHPixie

PHPixie-Quadro
PHPPixie é um framework MVC Php leve projetado para ser rápido, fácil de aprender e fornecer uma base sólida para o desenvolvimento.
 Fonte: Original em Inglês => http://webtoolsdepot.com/top-10-php-frameworks-for-developers/

20/03/2014

Acrescentando um novo campo no formulário de cadastro do Joomla! 2.5

O formulário de registro de usuários do Joomla! 2.5 possui dois meios de acrescentar campos novos para cadastro.  O primeiro é através da ativação do plug-in “User - Profile” que por padrão vem desativado:

Esta forma de adicionar novos campos a seu formulário é rápida e fácil, porém não atende a campos mais específicos e personalizados que cada site possa vir a precisar.
Para definirmos novos campos personalizado exigirá um pouco mais de esforço e tempo, pois precisaremos de acesso ao servidor FTP ou SFTP e ao banco de dados do projeto Joomla! 2.5.  Como pode ser visto abaixo eu criei uma nova coluna da tabela de usuários de nome “prefixo_users”:

Agora iremos alterar os arquivos fontes do Joomla! através do acesso aos arquivos via FTP.  Veja abaixo que alteramos o arquivo: \libraries\joomla\user\user.php acrescentando a propriedade pública (public) $crm = null, na linha 47:

No formulário de registro do frontend  \components\com_users\models\forms\registration.xml, vamos inserir também um novo registro para que o Joomla acrescente uma nova linha no formulário logo abaixo do “name”:

Isso já é suficiente para que apareça no formulário de registro de usuário, como pode ser observado abaixo:

Para que possamos ver se realmente foi cadastro o campo novo criado, podemos ou consultar a base de dados ou continuar melhorando a visão agora do Administator backend do Joomla!.
Vamos agora então editar o seguinte arquivo \administrator\components\com_users\models\forms\user.xml:

Para validarmos opcionalmente o campo criado podemos criar uma condição adicional no arquivo \libraries\joomla\database\table\user.php no método check():


Inserimos este campo também no arquivo de pluglin criação de contato \plugins\user\contactcreator\contactcreator.php , linhas 88 e 90:

E para finalizar inserimos este campo tambem em \plugins\user\joomla\joomla.php na linha 254 como podemos observar abaixo:
Se nos logarmos no sistema administrativo, veremos que o campo pode ser acessado e conferido de lá:

Qualquer dúvida, sugestão ou melhoria, comentem e sigam este blog!



10/03/2014

Paginação no CakePHP 2.x - $paginate

Boa noite a todos!

Vamos falar hoje sobre paginação de resultados no Framawork CakePHP 2.4.5, que é a versão usada neste tutorial.

O CakePHP já possui internamente um recurso para paginar sua aplicação e usá-lo veremos que é muito simples e fácil.

O principio é bem simples, podemos começar definindo um padrão de linhas a serem exibidas em todas as listagens alterando o arquivo:
  -> \app\Controller\AppController.php
Adicionamos as seguintes linhas:
--------------------------------------------------------------------------------------
class AppController extends Controller {
   
  //adiciona o atributo $paginate definindo o limite de paginas padrão
   public $paginate = array(
        'limit'=>5,
    );

}
--------------------------------------------------------------------------------------

Feito isso passamos para o controlador especifico de sua aplicação, por exemplo:

--------------------------------------------------------------------------------------
  public function index() {
        $this->Frequencia->recursive = 0;
        //ordena a coluna padrão que precisar
        $this->paginate['Frequencia']['order'] = array('Frequencia.id' => 'desc');
        //redefine a quantidade
         $this->paginate['Frequencia']['limit'] = 5;
           
        $this->set('frequencias', $this->paginate());
    }
--------------------------------------------------------------------------------------

E agora vamos mostrar na View (\app\View\Frequencias\index.ctp) o resultado do que vai ser paginado:
--------------------------------------------------------------------------------------
 <table cellpadding="0" cellspacing="0">
<tr>
    <th><?php echo $this->Paginator->sort('id'); ?></th>
    <th><?php echo $this->Paginator->sort('disciplina_id'); ?></th>
    <th><?php echo $this->Paginator->sort('frequentou'); ?></th>
    <th><?php echo $this->Paginator->sort('created'); ?></th>
    <th><?php echo $this->Paginator->sort('modified'); ?></th>
    <th class="actions"><?php echo __('Actions'); ?></th>
</tr>
<table cellspacing="0" cellpadding="0">
    <?php
         $tableHeaders = $this->Html->tableHeaders(array(
            $this->Paginator->sort('id', 'ID'),
            $this->Paginator->sort('disciplina_id', 'Disciplina'),
            $this->Paginator->sort('frequentou'),
            $this->Paginator->sort('created')
         ));
         echo $tableHeaders;
         $rows = array();
         foreach($frequencias as $linha){
            $rows[] = array(
               $linha['Frequencia']['id'],
               $linha['Frequencia']['disciplina_id'],
               $linha['Frequencia']['frequentou'],
               $linha['Frequencia']['created'],
            );
         }
       
         echo $this->Html->tableCells($rows);
         echo $tableHeaders;
     ?>
</table>
<div class="paging">
   <?php
      //echo $this->Paginator->numbers();
      echo $this->Paginator->prev('Anterior', null, null, array('class' => 'disable'));
      echo $this->Paginator->next('Proximo', null, null, array('class' => 'disable'));
    ?>
</div>
--------------------------------------------------------------------------------------

Se testarem em uma aplicação real verão de funciona perfeitamente, um abraço e até a próxima.

06/03/2014

Lançamento da Nova versão do CMS PrestaShop 1.6 para loja virtuais!

http://www.prestashop.com/blog/pt/2014/02/13/back-office-da-prestashop-v-1-6-o-que-e-novo-e-o-que-melhorou/Você está pronto para a PrestaShop v.1.6? O novo back office é elegante e inteligente e possibilita que os comerciantes on-line saibam absolutamente tudo sobre sua loja on-line com muita facilidade. Como você sabe, trabalhamos junto com os comerciantes e desenvolvedores da PrestaShop para oferecer a melhor versão da PrestaShop até hoje.
Vamos examinar os recursos novos e aprimorados do back office da PrestaShop 1.6.
Com novo visual inovador baseado em Bootstrap acompanhando a tendência da responsividade para aparelhos moveis.  Clique na imagem e leia mais sobre o assunto!

Detectando qual o dispositivo está sendo acessado por sua aplicação online

Existem vários scripts prontos para fazer a detecção de qual o tipo de dispositivo o usuário está acessando a sua aplicação web.

Seja Mobile, Desktop, Tablet e seus respectivos sistemas operacionais (ANDROID, IOS, Windows, MACOX, Linux).

Para facilitar a vida segue o link para resolver este drama: -> http://detectmobilebrowsers.com/

Sabemos que vários novas plataformas de dispositivos são lançados todos os anos deixando o código obsoleto, é sempre bom estar atendo se o código atende a sua necessidade mesmo antes de implementar em sua lógica.

Um abraço e até logo.

28/02/2014

Criando um formulário validador de CPF com Ajax Jquery.

Algoritmo do CPF - O que está por trás do gerador de CPF 

Para exemplificar o processo vamos gerar um CPF válido, calculando os dígitos verificadores de um número hipotético, 111.444.777-XX.

Calculando o Primeiro Dígito Verificador:

   O primeiro dígito verificador do CPF é calculado utilizando-se o seguinte algoritmo. 1) Distribua os 9 primeiros dígitos em um quadro colocando os pesos 10, 9, 8, 7, 6, 5, 4, 3, 2 abaixo da esquerda para a direita, conforme representação abaixo:

111444777
1098765432

 2) Multiplique os valores de cada coluna:

111444777
1098765432
1098282420282114

3) Calcule o somatório dos resultados (10+9+...+21+14) = 162

4) O resultado obtido (162) será divido por 11. Considere como quociente apenas o valor inteiro, o resto da divisão será responsável pelo cálculo do primeiro dígito verificador.
Vamos acompanhar: 162 dividido por 11 obtemos 14 como quociente e 8 como resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor obtido de 11, que é nosso caso. Sendo assim nosso dígito verificador é 11-8, ou seja, 3 (três). Já temos portanto parte do CPF, confira: 111.444.777-3X.


Veja agora como implementar isso em PHP + jQuery:

Arquivo => index.html:
-------------------------------------------------------------------------------------------------------------------
<html>
<head>
  <script src="js/jquery-1.2.6.pack.js" type="text/javascript"></script>
  <script src="js/jquery.maskedinput-1.1.4.pack.js" type="text/javascript"></script>
  <script type="text/javascript">
   $(document).ready(function(){
    $("#cpf").mask("999.999.999-99");
   });
   
   //minha funcao validadora
   function  enviaValor(){
    var valor = $('#cpf').val();
    //console.log($('#cpf').val());
    $(document).ready(function(){
      //efetuando a gravação e contabilização de pratos mais acessados
      $.post(
       "./validar.php",
       { codigo: valor  },
       function(data) {
        //console.log(data);
        if(data == 1) {  
         $("#saida").html("<span style='color: green'>CPF Válido!</span>");   
        } else {  
         $("#saida").html("<span style='color: red'>CPF Inválido!</span>");   
        }
       }
        );
    });
   }
  </script>
</head>
 <title>
 Validar CPF
 </title>
</html></pre>
<body>
  <form action="" id="form1" method="post" name="form1">
   <div align="center">
    <table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;">
     <tbody>
<tr>
       <td height="40">
        <div align="center">
         <input class="saida" id="cpf" name="cpf" type="text" />
        </div>
</td>
      </tr>
<tr>
       <td>
        <div align="center">
         <input id="botaoValidarCPF" name="botaoValidarCPF" onclick="enviaValor();" style="cursor: pointer; font-size: 15px;" type="button" value="Validar CPF" />
        </div>
<div align="center" class="style7" id="saida">
         <span style="color: green;"></span>
        </div>
</td>
      </tr>
</tbody>
    </table>
</div>
</form>
</body>
------------------------------------------------------------------------------ 
 Observe que linha onde é importado o arquivo .js, é uma biblioteca (jquery.maskedinput) de mascaras javascript e é aplicada na linha 7;

Em seguida é criado uma função javascript de nome "enviaValor()" que possui uma requisição Ajax jQuery $.post que envia o valor do campo de formulario para o arquivo PHP "validar.php" receber e procesar da seguinte forma:

---------------------------------------------------------------------------------------------------------------------

 <?php
 //recebe o dado vindo da pagina via Ajax jQuery
$cpf = (isset($_REQUEST['codigo'])) ? $_REQUEST['codigo'] : "" ;


//funcao que retira o ponto e traço e valida o CPF com o calculo do algoritmo
function validaCPF($cpf = null) {

    // Verifica se um número foi informado
    if(empty($cpf)) {
        return false;
    }

    // Elimina possivel mascara
    $cpf = ereg_replace('[^0-9]', '', $cpf);
    $cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT);
   
    // Verifica se o numero de digitos informados é igual a 11
    if (strlen($cpf) != 11) {
        return false;
    }
    // Verifica se nenhuma das sequências invalidas abaixo
    // foi digitada. Caso afirmativo, retorna falso
    else if ($cpf == '00000000000' ||
        $cpf == '11111111111' ||
        $cpf == '22222222222' ||
        $cpf == '33333333333' ||
        $cpf == '44444444444' ||
        $cpf == '55555555555' ||
        $cpf == '66666666666' ||
        $cpf == '77777777777' ||
        $cpf == '88888888888' ||
        $cpf == '99999999999') {
        return false;
     // Calcula os digitos verificadores para verificar se o
     // CPF é válido
     } else { 
       
        for ($t = 9; $t < 11; $t++) {
           
            for ($d = 0, $c = 0; $c < $t; $c++) {
                $d += $cpf{$c} * (($t + 1) - $c);
            }
            $d = ((10 * $d) % 11) % 10;
            if ($cpf{$c} != $d) {
                return false;
            }
        }

        return true;
    }
}

//verifica se não enviado o formulario em branco
if($cpf !== ""){
        //verifica se a funçao retornou "true" ou "false"
        if(validaCPF($cpf)){
            echo 1;
        } else {
            echo 0;
        }
} else {
    echo "Digite um CPF!";
}

?>
---------------------------------------------------------------------------------------------------------------------

Um exemplo funcionando pode ser visto abaixo:

Um abraço e até a próxima a todos(as)!