segunda-feira, 29 de dezembro de 2014

Instanciar Model em uma Library no Codeigniter

//application/libraries

<?php

class Auth{
  
    private $CI;
  
    public function __construct() {     
        $this->CI =& get_instance();     
    }  
  
    public function check(){      
        $this->CI->load->model('usuario_model');
        $check = $CI->usuario_model->find();
        return $check;
    }
}

sexta-feira, 26 de dezembro de 2014

Instanciar Library em um Helper no Codeigniter

//application/helpers/

function setPagination($total_rows){

$CI =& get_instance();

$CI->load->library('pagination');
$config['base_url'] = _SERVER.'/www/cipadrao/usuario/index/';
$config['first_link'] = 'Primeiro';
$config['last_link'] = 'Último';
$config['next_link'] = 'Próximo';
$config['prev_link'] = 'Anterior';
$config['per_page'] = _PER_PAGE;
$config['num_links'] = _NUM_LINKS;
$config['total_rows'] = $total_rows;

return $CI->pagination->initialize($config);

}

quarta-feira, 24 de dezembro de 2014

Paginação/Pagination Helper no Codeigniter

//config/constants.php
define('_SERVER', 'http://'.$_SERVER['SERVER_NAME']);
define('_PER_PAGE', 3);
define('_NUM_LINKS', 5);

//Controller
public function index(){
//criando paginação
$this->load->helper('pagination_helper');
$total_rows = $this->count();
$limit[0] = _PER_PAGE;
$limit[1] = $this->uri->segment(3) ? $this->uri->segment(3) : 0;
setPagination($total_rows);
//selecionando os dados
$this->data['usuarios'] = $this->usuario->findAll(null, null, $limit);
$this->data['pagination'] = $this->pagination->create_links();
//padronizando o caminho da página
$page = setPage($this->data['module'], 'lista');
//chamando a page pelo template
$this->template->view($page, $this->data);
}


//Pagination_helper
function setPagination($total_rows){
$CI =& get_instance();
$CI->load->library('pagination');
$config['base_url'] = _SERVER.'/usuario/index/';
$config['first_link'] = 'Primeiro';
$config['last_link'] = 'Último';
$config['next_link'] = 'Próximo';
$config['prev_link'] = 'Anterior';
$config['per_page'] = _PER_PAGE;
$config['num_links'] = _
$config['total_rows'] = $total_rows;
return $CI->pagination->initialize($config);
}

terça-feira, 9 de dezembro de 2014

Flashdata Messages no Codeigniter

//Controller
<?php
public function excluir($cliente_id){
        $this->load->model('cliente_model');
        $delete = $this->cliente_model->delete($cliente_id);
        if($delete){
            $this->session->set_flashdata('sucesso', 'Cliente excluído com sucesso.');
        }
        else{
            $this->session->set_flashdata('erro', 'Não foi possível excluir o cliente.');
        }
        redirect('cliente');
    }
?>

//View
<?php
        if($this->session->flashdata('erro')){
            echo '<div class="erro">'.$this->session->flashdata('erro').'</div>';
        }
        if($this->session->flashdata('sucesso')){
            echo '<div class="sucesso">'.$this->session->flashdata('sucesso').'</div>';
        }
?>

segunda-feira, 24 de novembro de 2014

Gerando as Entidades com Doctrine2 no Zend Framework2

01 - Configurar o arquivo /config/autoload/doctrine_orm.local.php

02 - No terminal (Linux/Mac)

cd /caminho/para/seu/projeto/root_do_projeto

03 -  vendor/bin/doctrine-module orm:convert-mapping --filter="NomeTabela" --from-database annotation module/NomeController/src/NomeController/Entity/

04 - Verificar se o arquivo foi criando em /module/NomeController/src/NomeController/Entity/

//Observações

01 - O nome da tabela

A tabela nome_tabela na geração da entidade dever ser nomeada NomeTabela.

02 - No terminal o comando vendor/bin/doctrine-module, mostra todas as funções disponíveis do doctrine2.

quinta-feira, 20 de novembro de 2014

Configurando Doctrine2 no Zend Framework2

01 - No diretório /config/autoload, criar o arquivo doctrine_orm.local.php:

<?php
return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'params' => array(
                    'host'     => '127.0.0.1', //Não usar localhost
                    'port'     => '3306',
                    'user'     => 'root',
                    'password' => '',
                    'dbname'   => 'nome_do_banco',
                    'driverOptions' => array(
                        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
                    )
                )
            )
        )
    ),
);
?>

02 - No diretório data criar a pasta DoctrineORMModule e dentra ela criar a pasta Proxy.

terça-feira, 18 de novembro de 2014

Instalando Doctrine2/Hounddog no Zend Framework 2

No zendframework

01 - Composer.json

{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"minimum-stability": "dev",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.*",
"doctrine/doctrine-module": "dev-master",
"doctrine/doctrine-orm-module": "dev-master",
"hounddog/doctrine-data-fixture-module": "dev-master"
}

}

No Terminal

02 - php composer.phar self-update

03 - php composer.phar install

04 - cd public

05 - php -S localhost:8888

No browser

06 - localhost:8888

No zendframework

07 - Em config/application.config.php

'modules' => array(
        'Application',
        'DoctrineModule',
        'DoctrineORMModule',
        'DoctrineDataFixtureModule'

    ),

segunda-feira, 17 de novembro de 2014

Instalando o Zend Framework2

Acesse o link:

01 - http://framework.zend.com/downloads/skeleton-app

No terminal (Linux/Mac)

02 - cd caminho/para/pasta/www

03 - git clone git://github.com/zendframework/ZendSkeletonApplication.git

04 - mv ZendSkeletonApplication/ zf2

05 - cd zf2

06 - php composer.phar self-update

07 - php composer.phar install

08 - cd public

09 - php -S localhost:8888

No browser

10 - localhost:8888

terça-feira, 28 de outubro de 2014

Paginação no Codeigniter

//Controller

public function index(){

$this->load->library('pagination');
$config['base_url'] = 'http://localhost/www/cipadrao/usuario/index/';
$config['per_page'] = 5;
$config['num_links'] = 5;
$config['total_rows'] = $this->count();

$limit[0] = $config['per_page'];
$limit[1] = $this->uri->segment(3) ? $this->uri->segment(3) : 0;

$this->pagination->initialize($config);

//selecionando os dados
$this->data['usuarios'] = $this->usuario->findAll(null, null, $limit);
$this->data['pagination'] = $this->pagination->create_links();
//padronizando o caminho da página
$page = setPage($this->data['module'], 'lista');
//chamando a page pelo template
$this->template->view($page, $this->data);
}

//retorna a quantidade de registros da consulta
private function count($where=null){
$this->load->model('usuario_model');
return $this->usuario_model->count($where);
}

//View

<table border="1" width="100%">
<tr>
<td>Id</td>
<td>Nome</td>
<td>Email</td>
<td>Alterar</td>
<td>Excluir</td>
</tr>
<?php
if(count($usuarios)){
foreach($usuarios as $usuario){
$buffer = null;
$buffer .= '<tr>';
$buffer .= '<td>'.$usuario['usuario_id'].'</td>';
$buffer .= '<td>'.$usuario['usuario_nome'].'</td>';
$buffer .= '<td>'.$usuario['usuario_email'].'</td>';
$buffer .= '<td><a href="'.base_url('usuario/edit/'.$usuario['usuario_id']).'">Alterar</a></td>';
$buffer .= '<td><a href="'.base_url('usuario/delete/'.$usuario['usuario_id']).'">Excluir</a></td>';
$buffer .='</tr>';
echo $buffer;
}
}
else{
echo 'Nenhum registro encontrado.';
}
?>
</table>
<br/>
<div id="pagination"><?php echo $pagination; ?></div>

domingo, 26 de outubro de 2014

HighCharts com Ajax/Codeigniter - Parte02

<?php

class Vendas{

public function dadosGrafico(){

$categorias[] = 'Semana 1' ;
$categorias[] = 'Semana 2' ;
$categorias[] = 'Semana 3' ;
$categorias[] = 'Semana 4' ;

$series_data[] = array('name' => 'Primeiro Mês', 'data' => array(rand(1,5), rand(5,10), rand(10,15), rand(15,20)));
$series_data[] = array('name' => 'Segundo Mês', 'data' => array(rand(1,5), rand(5,10), rand(10,15)));

$dados = array( 'series_data' => $series_data, 'categories' => $categorias);

echo json_encode($dados);

}

}

?>

sexta-feira, 24 de outubro de 2014

HighCharts com Ajax/Codeigniter - Parte01

//Na página HTML
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>

<div id="chartContainer" style="width:500px; height:500px;"></div>

//No arquivo JavaScript

//variaveis
var chart1;
var timeGrafico;

//chamando a função para atualizar o gráfico
$(function(){
     atualiza_chart();
});

//função para buscar os dados e atualizar as informações do gráfico
function atualiza_chart() {

        $.post(base_url+'vendas/dadosGrafico', {}, function(data) {
           
                var chart1 = new Highcharts.Chart({
                                chart: {
                                    renderTo: 'chartContainer',
                                    type: 'line',
                                },
                                title: {
                                    text: 'Titulo do Gráfico'
                                },
                                xAxis: {
                                    categories: data.categories
                                },
                                yAxis: {
                                    title: {
                                        text: 'Valores'
                                    }
                                },
                                series: data.series_data
            });
                                             
           //grafico se atualiza a cada 1minuto
           timeGrafico = setTimeout(function(){atualiza_chart()}, 60000 );

        }, 'json');

    }

segunda-feira, 29 de setembro de 2014

Templates no Codeigniter Parte02 (Personalização)

//application/libraries/Template.php

function view($page, $data = null){
      if(!is_null($page) && $page != ''){
        $title = !isset($data['titulo']) || is_null($data['titulo']) || empty($data['titulo']) ? $this->title : $data['titulo'];
        $this->write('title', trim($title));
        $this->write_view('content', $page, $data);
        $this->render();
      }
      else{
        die('Template => Pagina em branco!');
      }
   }

//application/controllers/usuario.php

public function index(){
//dados
$dados['dados'] = array('nome' => 'João da Silva', 'idade' => 30);
                        //titulo da página
                        $dados['titulo'] = 'Lista de Usuários';
//padronizando o caminho da página
$pagina = 'usuario/lista';
//chamando a pagina pelo template
$this->template->view($pagina, $this->dados);
}

quinta-feira, 25 de setembro de 2014

Templates no Codeigniter Parte01 (Instalação/Configurações)

1- Fazer o download da library Template em:
http://williamsconcepts.com/ci/codeigniter/libraries/template/download.html

2 - Colocar os arquivos nas suas pastas respectivas
/libraries/Template.php para /application/system/libraries/
/config/template.php para /application/config/
/views/template.php para /application/views/

3 -  Em /config/template.php adicionar o valor "title":

$template['default']['regions'] = array(
   'title',
   'header',
   'content',
   'footer',
);

4 - No método do controller adiocionar as chamadas do template:

public function index(){
       //carregando a biblioteca
       $this->load->library('template');
       //array de dados para serem mostrados na view
       $data = array('blog' => 'phpephp.blogspot.com', 'post' => 'Templates no Codeigniter');
        //passando os parâmetros para o template
        $this->template->write('title', 'Templates no Codeigniter');
        $this->template->write('header', 'Cabeçalho do template');
        $this->template->write_view('content', 'pasta/nome_da_view', $data);
        $this->template->write('footer', 'Rodapé do template');
        //chamando o template/página
        $this->template->render();
}

5 - No arquivo de view colar o código:

<?php   
    echo 'Blog: '.$blog;
    echo '<br>Post: '.$post.'<br>';
?>

6 - Verifique se o arquivo  /application/views/template.php está assim:

<html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title><?= $title ?></title>
      <link rel="stylesheet" type="text/css" href="main.css" />
   </head>
   <body>
      <div id="wrapper">
         <div id="header">
            <?= $header ?>
         </div>
         <div id="main">
            <div id="content">
               <h2><?= $title ?></h2>
               <div class="post">
                  <?= $content ?>
               </div>
            </div>           
         </div>
         <div id="footer">
            <?= $footer ?>
         </div>
      </div>
   </body>
</html>

segunda-feira, 22 de setembro de 2014

Estrutura Codeigniter - Parte03 (Helper)

<?php

//padronizando o caminho da página pelo módulo
function setPage($module, $page){
if(!is_null($module) || !empty($module)){
if(!is_null($page) || !empty($page)){
return strtolower($module.'/'.$page);
}
else{
die('Pagina nao encontrada!');
}
}
else{
die('Modulo nao encontrado!');
}
}

?>

sexta-feira, 19 de setembro de 2014

Estrutura Codeigniter - Parte02 (Controller)

<?php

class Usuario extends CI_Controller{

//array dados da classe
private $data = array();

public function __construct(){
parent::__construct();
$this->load->model('usuario_model', 'usuario');
$this->data['module'] = __CLASS__;
}

/********************métodos principais********************/

//mostrando a lista de registros
public function index(){
//selecionando os dados
$this->data['usuarios'] = $this->usuario->findAll();
//padronizando o caminho da página
$page = setPage($this->data['module'], 'lista');
//chamando a page pelo template
$this->template->view($page, $this->data);
}

//cadastrando ou alterando o registro
public function edit($id=null){
$page = setPage($this->data['module'], 'form');
//se formulário for submetido
if($this->input->post()){
//setando os valores a serem enviado ao bd
$data= $this->setData($this->input->post());
//alteracao
if(!is_null($id)){
$this->usuario->update($id, $data);
}
//cadastro
else{
$this->usuario->insert($data);
}
$this->index();
}
else{
//alteracao
$data=array();
if(!is_null($id)){
$data = $this->usuario->findById($id);
}
//setando os valores vindos do bd
$this->data['data'] = $this->setData($data);
//page do formulário
$this->template->view($page, $this->data);
}
}

//excluindo o registro
public function delete($id){
$this->usuario->delete($id);
$this->index();
}

/********************métodos auxiliares********************/

//setando os valores
private function setData($data=array()){
$values= array(
'usuario_id' => isset($data['usuario_id']) ? $data['usuario_id'] : null,
'usuario_nome' => isset($data['usuario_nome']) ? $data['usuario_nome'] : null,
'usuario_email' => isset($data['usuario_email']) ? $data['usuario_email'] : null,
'usuario_senha' => isset($data['usuario_senha']) ? md5($data['usuario_senha']) : null,
);
return $values;
}

}

?>

quinta-feira, 18 de setembro de 2014

Estrutura Codeigniter - Parte01 (Model)

<?php

class usuario_model extends CI_Model{

private $table = null;
private $table_id = null;

public function __construct(){
$this->table = 'usuario';
$this->table_id = $this->table.'_id';
}

//selecionando os registros do bd pelos parâmetros passados
public function findAll($where=null, $order=null, $limit=null){
$this->db->select('*');
$this->db->from($this->table);
if(!is_null($where)){
$this->db->where($where);
}
if(!is_null($order)){
$this->db->order_by($order[0], $order[1]);
}
else{
$this->db->order_by($this->table_id, 'desc');
}
if(!is_null($limit)){
$this->db->limit($limit[0], $limit[1]);
}
$query = $this->db->get();
if($query->num_rows()>0){
return $query->result_array();
}
else{
return null;
}
}

//selecionando o registro pelo id
public function findById($id){
$this->db->select('*');
$this->db->from($this->table);
$this->db->where(array($this->table_id => $id));
$query = $this->db->get();
if($query->num_rows()>0){
$resultado = $query->result_array();
return $resultado[0];
}
else{
return null;
}
}

//selecionando o registro pela coluna
public function findBy($column, $value){
$this->db->select('*');
$this->db->from($this->table);
$this->db->where(array($column => $value));
$query = $this->db->get();
if($query->num_rows()>0){
$resultado = $query->result_array();
return $resultado[0];
}
else{
return null;
}
}

//realizando uma consulta com a query livre
public function find($qry){
$query = $this->db->query($qry);
if($query->num_rows()>0){
return $query->result_array();
}
else{
return null;
}
}

//contando a quantidade de registros da consulta
public function count($where){
$this->db->select('*');
$this->db->from($this->table);
if(!is_null($where)){
$this->db->where($where);
}
$query = $this->db->get();
return $query->num_rows();
}

//inserindo registros no bd
public function insert($data=array()){
$this->db->insert($this->table, $data);
   return $this->db->insert_id();
}

//alterando o registro no db
public function update($id, $data=array()){
$this->db->where($this->table_id, $id);
return $this->db->update($this->table, $data);
}

//excluindo o registro do bd
public function delete($id){
return $this->db->delete($this->table, array($this->table_id => $id));
}

//realizando um requisição livre
//se retornar algum registro retorna e forma de array
public function execute($qry){
$query = $this->db->query($qry);
if(is_object($query)){
if($query->num_rows()>0){
return $query->result_array();
}
else{
return null;
}
}
else{
return true;
}
}

}

?>

quarta-feira, 17 de setembro de 2014

Descompactar/extrair arquivo ZIP com Codeigniter

//link para download da classe Unzip criada por Phil Sturgeon
//https://github.com/philsturgeon/codeigniter-unzip
//colocar em: application/libraries/

//diretório em que o arquvivo .zip se encontra
$dir_arquivo_zip = 'uploads/tmp/';
//diretório para onde os arquivos serão movidos
$dir_fotos = 'uploads/imgs/';

//carregando a classe unzip
$this->load->library('unzip');
//definindo que só serão extraidos arquivos .jpg
$this->unzip->allow(array('jpg'));

//se a extração ocorrer corretamente
if($this->unzip->extract($dir_arquivo_zip.'pacote.zip')){


   //pegando todos os arquivos .jpg
   $arquivos = glob($path."*.jpg");

   //movendo os arquivos para outro diretorio
   foreach($arquivos as $foto){
         $arq = explode('/', $foto);
         copy($foto, $dir_fotos.'/'.strtolower($arq[2]));                  
   }


   $msg = 'Extração realizada com sucesso.' ;
   $data['msg'] = '<div id="sucesso">'.$msg.'</div>';
}
//se houver algum problema na extração
else{

     $msg = 'Não foi possível realizar a extração dos arquivos.' ;
     $data['msg'] = '<div id="erro">'.$msg.'</div>';

}

$this->load->view('extracao_zip_view', $data);

terça-feira, 16 de setembro de 2014

Upload de arquivos/imagens com Codeigniter

               $dir= 'uploads/fotos/';

                if(!file_exists($dir)){
                    mkdir($dir, 0777, true);
                }
                             
                $config = array(
                    // onde irá salvar a imagem
                    'upload_path' => $dir,
                    //extenções permitidas
                    'allowed_types' => 'gif|jpg|png',
                    //Tamanho máximo do arquivo, caso 5MB
                     'max_size' => '5000'
                );

                $this->load->library('upload', $config);
                $this->upload->initialize($config);

                if ($this->upload->do_upload('nome_do_input')) {
                    $arquivo = $this->upload->upload_path . DIRECTORY_SEPARATOR . $this->upload->file_name;                 
                     
                    $msg = 'Upload do arquivo '.$arquivo.' realizado com sucesso.';

                    $data['msg'] = '<div id="sucesso">'.$msg.'</div>';

                }
                else{

                    $msg =  $this->upload->display_errors();

                     $data['msg'] = '<div id="erro">'.$msg.'</div>';

                }

$this->load->view('upload_img_view', $data);

segunda-feira, 15 de setembro de 2014

Verificando se imagem/arquivo existe com CodeIgniter (file_exists)

//verificando se a imagem/arquivo existe no diretório
$imgFunc = "uploads/foto_funcionarios/".$funcionario->foto;
if(!file_exists($imgFunc)){
  $imgFunc = 'uploads/foto_default/funcionario_default.png';
}

//mostrando a imagem no HTML
<img id="img_func" name="img_func" src="<?php echo base_url($imgFunc); ?>" alt="<?php echo $funcionario->nome; ?>"/>

terça-feira, 9 de setembro de 2014

Ajax retornando Json com Codeigniter/JQuery

$("#cep").on("blur",function(){
                  
                var base_url = '<?php echo site_url(); ?>';
                var controller = 'cliente';
                var action = 'consultaCep';
                var cep = $(this).val();

                //requisicao ajax enviando os parâmetros via POST
                $.ajax({
                   'url' : base_url + controller + '/' + action,
                   'type' : 'POST',
                   'data' : {'cep' : cep},
                    'success' : function(data){
                       //recuperando o resultado via json
                        var dado = $.parseJSON(data);
                      //populando os valores                     
                        $("#endereco").val(dado.rua);
                        $("#bairro").val(dado.bairro);
                        $("#cidade").val(dado.cidade);
                        $("#estado").val(dado.estado);
                        $("#numero").focus();
                    }
                });

           });

Ajax com Codeigniter/JQuery

//parametros
var base_url = '<?php echo site_url(); ?>';
var controller = 'cliente';
var action = 'getCliente';
var cliente_id = $("#cliente_id").val();

//requisicao ajax enviando os parâmetros para o PRÓPRIO MÉTODO
$.ajax({
   'url' : base_url + '/' + controller + '/'+action+'/'+cliente_id,
    'success' : function(data){
       alert(data);
    }
});

//requisicao ajax enviando os parâmetros via POST
$.ajax({
   'url' : base_url + '/' + controller + '/'  + action,
   'type' : 'POST',
   'data' : {'id' : cliente_id, 'status': 1},
    'success' : function(data){
       alert(data);
       location.reload();
    }
});