Pages

Subscribe:

Ads 468x60px

Labels

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)!

20/02/2014

Como criar uma loja on-line: 10 perguntas que você deve fazer antes de contratar um desenvolvedor de comércio eletrônico

19/02/2014

Site para uso de várias fotos e imagens tematicas variadas

Neste post do site abaixo segue uma relação de sites que disponibilizaram muitas fotos para se usar em diferentes projetos:

Um abraço e até logo!

11/02/2014

Personalizar Mensagens “setFlash” no CakePHP

Olá,  estive com uma dificuldade de entender como modificava as mensagens de erro e sucesso padrão do CakePHP e achei um interessante tutorial:







Como achei muito útil para mim gostaria de compartilhar este tutorial:

1º Passo:
 
Criar arquivo: /app/views/elements/flash-sucesso.ctp
<div class="flash-sucesso">
“O cadastro foi concluído com sucesso!”
</div>


2º Passo:
 
Criar arquivo: /app/views/elements/flash-erro.ctp
<div class="flash-erro">
“Não foi possível salvar. Tente novamente.”
</div>


ALTERANDO O CONTROLLER

Devemos agora alterar o controller para chamar os arquivos que criamos na pasta “views/elements/”.
//CONTROLLER
$this->Session->setFlash(‘’, ‘flash-sucesso’);
//ou
$this->Session->setFlash(‘’, ‘flash-erro’);


CRIANDO O CSS
 
Criar arquivo: /app/webroot/css/css-styles.css
.flash-sucesso {
background: #e5f2be;
border:2px solid #bedf5d;
padding:10px;
font-weight:bold;
}
.flash-erro {
background: #eccecf;
border:2px solid #9e0b0f;
padding:10px;
font-weight:bold;
}


Não, eu não criei o código css acima, apenas dei um CTRL C + CTRL V para facilitar a minha vida e a de vocês. Sejamos práticos galera! Rsrs.
Pronto! Basicamente é isto. Simples, não é?
É claro que vocês podem ainda criar “n” situações com o setFlash. Vocês podem implementar funcionalidades com o jQuery, tais como: criar um botão “fechar” dentro da mensagem, fazer com que a mensagem suma depois de alguns segundos, etc. Isso vai depender do conhecimento, da criatividade e da preguiça de cada um. =D
Espero que tenham gostado.
Abraços e até a próxima!


http://mytechnews.com.br/blog/?p=64

10/02/2014

TRABALHANDO COM O CAKEPHP E O USO DE JOIN


Entre os framaworks de desenvolvimento ágil e rápido de aplicações em linguagem PHP, temos o CakePHP.  Criado e mantido pelo desenvolvedor  Garrett Woodworth (aproximadamente em 2009).  Possui uma excelente estrutura contendo todos os padrões de separação de camadas do MVC e boas práticas de programação.  Sua documentação e colaboração em sua comunidade tem animado mais e mais a multiplicar seus novos adeptos a este framework.

Vou tratar de deixar registrado um recurso para quem já iniciou seus projetos com o CakePHP ou pretende iniciar, que trata sobre o uso de JOINS numa consulta que retorna uma paginação de resultados vindo de 2 ou mais tabelas de um banco relacional MySQL.
Observe que neste exemplo temos na linha 43 a parametrização do recursive como -1, para que o JOIN desta consulta ocorra desprezando os relacionamentos existentes no Model da aplicação para este contexto de visão no Controller.  

A linha 44 além de trazer o relacionamento dos campos da tabela de Log e Users(usuários) ele armazena em uma sub-consulta a data de último acesso ao sistema através da leitura do registro de ultimo acesso:
$this->paginate['User']['fields'] = array('Log.*,(SELECT MAX(created) FROM logs WHERE users = User.id ORDER BY created DESC LIMIT 1) as ultimo','User.*');

Nas linhas 46 a 53 temos a consulta JOIN de relacionamento da tabela users com a tabela logs através de suas respectivas chaves primária e estrangeiras.

Na linha 54 temos uma conditions (condição) para caso o filtro de busca seja usado será filtrado e adequadamente listado.

Linha 55 temos o agrupamento da tabela ou GROUP BY, seguido pelo ORDER (ordenação linha 56) e limite de páginas a serem exibidas na listagem (linha 57).

A estrutura da classe do modelo de Log ficou simples e objetiva para este caso:
-------------------------------------------------------------------------------------------------------
class Log extends AppModel {
    
    public $name = 'Log';

public $belongsTo = array(
        'User' => array(
            'className'=> 'User', 
            'foreignKey' => 'users'
)
      );
}
-------------------------------------------------------------------------------------------------------

Já a classe de modelo (Model) de usuário foi mantido acrescentado ao atributo $belongsTo o relacionamento do Model Logs:
-------------------------------------------------------------------------------------------------------
public $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Log' => array(
'className' => 'Log',
'foreignKey' => 'id'
)
);
------------------------------------------------------------------------------------------------------- 

Disso resultará uma consulta para listar todos os usuários ativos e suas respectivas data e hora de último acesso:


Podemos ver na coluna Ultimo - Acesso a data e hora de último acesso de cada usuário ao sistema.

Achei bom compartilhar esta experiência e agradeço a colaboração e ajuda de meu amigo Victor Souto que me orientou a melhor prática para chegar a esse resultado.

Um abraço a todos (as).
Bibliografia:
http://pt.wikipedia.org/wiki/CakePHP
http://www.mainelydesign.com/blog/view/forcing-a-single-join-in-cakephp-pagination
http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html