In passato ho parlato un paio di volte di come creare file Excel usando PHP e la libreria PHPExcel.

Qui trovate un articolo (ho paralto anche di come integrarlo in CodeIgniter).

Una cosa che ho visto chiedere molto in giro è come impostare la prima riga in grassetto.

Per farlo possiamo usare la funzione getStyle, che ci permette di "prendere" lo stile corrente per poi estenderlo.

Qui trovate alcuni esempi.

PHPExcel è un'ottima libreria per creare file excel con PHP.

Ne ho già parlato in passato, ed ora useremo questa libreria dentro al framework CodeIgniter.

Prima di tutto scaricate la libreria da qua.

Dentro al file zip identificate la cartella Classes; il suo contenuto mettetelo dentro application/third_party.

A questo punto create un file nominato excel.php dentro a application/libraries:

<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

require_once APPPATH . '/third_party/PHPExcel.php';

class Excel extends PHPExcel {

    public function __construct() {
        parent::__construct();
    }

}

Questo sarà il file che noi richiameremo nel controller, e altro non fa che richiamare la classe PHPExcel.

A questo punto procediamo nella creazione del model che eseguirà la query su db, e che richiameremo nel controller; ad esempio:

<?php

class Excel_model extends CI_Model {

    public function getEntrate() {
        $this->db->select('entrata_valore, causale_nome, conto_nome, entrata_data, entrata_note');
        $this->db->from('entrate');
        $this->db->join('causali', 'entrate.causale_id = causali.causale_id');
        $this->db->join('conti', 'entrate.conto_id = conti.conto_id');
        $this->db->order_by('entrata_data', 'desc');
        $this->db->limit(50);
        $query = $this->db->get();
        return $query->result();
    }

}

Se non volete prendere tutte le colonne della tabella, dovete specificare quali volete, altrimenti ve le ritroverete tutte nel file excel.

CodeIgniter è uno dei framewrok PHP più utilizzati; io lo stesso su due progetti e mi ci trovo bene.

Ne ho già parlato in altri articoli, e oggi vediamo come sia semplice inviare email.

Supponiamo di voler inviare dopo che l'utente ha inviato un form; nel caso specifico l'utente dovrà inserire la propria email con la quale si è registrato in modo da potergli reinviare la password (che si è dimenticato)

<div id="login">
    <?php echo validation_errors('<p class="error">', '</p>'); ?>
    <?php echo form_open('pwdrecovery/dorecover'); ?>
    <dl>
        <dt><label for="cl_email">Email:</label></dt>
        <dd><input type="text" name="cl_email" value="<?php echo set_value('cl_email'); ?>" autofocus /></dd>
    </dl>
    <dl>
        <dd><input type="submit" value="Send" name="submit" /></dd>
    </dl>
</form>
</div>

Viene richiamata la funzione doRecover del controller PwdRecovery:

public function doRecover() {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('cl_email', 'Email', 'required|trim|valid_email');
        if ($this->form_validation->run() == FALSE) {
            $data = array();
            $data['title'] = 'Login';
            $this->load->view('header', $data);
            $this->load->view('pwd_recovery_view', $data);
            $this->load->view('footer');
        } else {
            $this->load->model('email_model');
            $this->email_model->sendEmail($this->input->post('cl_email'), 'Password', 'La tua nuova password è NUOVA_PASSWORD');
            redirect('home');
        }
    }

Carico la libreria form_validation per validare il form (è obbligatorio mettere una email ben formata).

Oggi vedremo come è possibile sfruttare AJAX attraverso jQuery in applicazioni scritte con il framework CodeIgniter.

Il primo step è sempre quello di includere la libreria jQuery nell'head della pagina:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

Dopo di che nella view ho un link, che al click attiva una funzione Javascript per la chiamata AJAX:

<a href="javascript:dtlArticolo('<?php echo $var->articolo_codice; ?>');" ><?php echo $var->articolo_codice; ?></a>

<script type="text/javascript">
    function dtlArticolo(articolo) {
        $.ajax({
            url: "<?php echo base_url('ajax/getdtlarticolo/'); ?>/" + articolo,
            type: 'POST',
            dataType: 'html',
            success: function(response) {
                $("#dtl_articolo").html(response);
            },
            error: function() {
                $("#dtl_articolo").html('ERRORE');
            }
        });
    }
</script>

In genere in CI si usano la funzione anchor() per creare link, e anche io in effetti la uso sempre.

Questo è l'unico caso in cui non la uso perchè trovo più intuitivo fare alla maniera "classica" in questo specifico caso.

Come vedete la funzione l'ho messa nella view, e questo perchè l'url glielo passo attraverso PHP e la funzione di CI base_url().

Ricordate che di default CI non usa i classici parametri GET, e quindi in questo non avremo potuto costruire l'url come siamo abiautati a fare:

url: 'pagina.php',

data: 'id=3&cm=7'

Non so se mi sono spiegato, ma penso di si visto che prima di arrivare a usare AJAX avrete di sicuro studiato un pò il framework e capito come funzionano i link e i parametri.

Oggi vediamo come gestire i cookie attraverso il framework CodeIngiter.

In generale abbiamo tre funzioni:

  • get_cookie
  • set_cookie
  • delete_cookie

Nel mio caso sto usando i cookie per salvare la lingua scelta (Italiano o Inglese).

Per la gestione del cookie ho creato un model apposito da richiamare dove mi serve.

Fate attenzione che la funzione set_cookie è leggermente diversa dalla funzione setcookie nativa di PHP.

Ad esempio i parametri path e dominio sono invertiti, e in CI mancano alcuni parametri.

Vediamo questa classe che fa da model:

<?php

class Lang_model extends CI_Model {

    public function getLang() {
        if (get_cookie('LANG') == 'eng') {
            $lang = array(
                'allUtente' => 'User'
            );
        } else {
            $lang = array(
                'allUtente' => 'Utente'
            );
        }
        return $lang;
    }

    public function setDefaultLang() { // SETTA IL COOKIE LA PRIMA VOLTA CHE SI ACCEDE SE NON ESISTE
        if (!get_cookie('LANG')) {
            set_cookie("LANG", 'ita', time() + 2592000, 'www.sito.it', '/');
        }
    }

    public function setLang($lng) {
        set_cookie("LANG", $lng, time() + 2592000, 'www.sito.it', '/');
    }

}

Ho tre funzioni.

Nella prima reperisco il valore del cookie, e in base a quello imposto le parole/frasi/quello che vi serve, in una o nell'altra lingua.