Categoria: php

CakePHP: caching semi automatico delle query tramite AppModel

23 gennaio 2012Categoria:database | php

In un precedente articolo è stata mostrata una semplice struttura per salvare i dati in cache da controller.
Per automatizzare questa funzionalità e scrivere meno codice è possibile centralizzare le funzioni necessarie all’interno della classe AppModel.

La classe contiene:

  • una variabile $cache_key per impostare la chiave per il salvataggio in cache
  • una funzione findCached() da richiamare con gli stessi parametri della funzione find() standard che ritorna i risultati salvati in cache oppure, nel caso in cui non ci siano risultati salvati, esegue la funzione find()
  • il callback afterFind() per salvare i risultati in cache dopo la prima esecuzione della query

Ed ecco la classe completa con i commenti necessari per comprenderne il funzionamento:

Leggi tutto…

Applicare sconti su tutti i prodotti di una categoria in Prestashop

2 gennaio 2012Categoria:php

Un piccolo modulo che può far risparmiare diverse ore di lavoro: Sale Category.
Con questo modulo è possibile impostare con un click uno sconto (sul totale o in percentuale) ad un’intera categoria di prodotti. Inoltre è possibile applicare allo stesso modo anche il flag “saldi” .

Ovviamente esiste anche la funzione per rimuovere velocemente gli sconti e i flags inseriti.

Il modulo è gratuito e al momento è compatibile con le versioni 1.2, 1.3 e 1.4 di Prestashop (testato personalmente sulla versione 1.4.6).

Link per il download: http://btcdev.net/2011/11/30/sale-category/

Prestashop: ordinamento degli attributi in ordine non alfabetico

20 dicembre 2011Categoria:php

Come default Prestashop visualizza gli attributi dei prodotti in ordine alfabetico, quindi un attributo tipo “Taglia” sarà visualizzato dagli utenti del negozio e-commerce in questo modo:

  • L
  • M
  • S
  • XL
  • XXL

Per ottenere l’ordinamento corretto sono necessarie un paio di piccole modifiche ai files di Prestashop.
Nel file classes/Product.php cercare la funzione getAttributesGroups e modificare l’ordinamento della query da

ORDER BY agl.`public_name`, al.`name`');

a

ORDER BY a.`id_attribute`')

Nel file controllers/ProductController.php è invece necessario commentare le seguenti righe

Leggi tutto…

CakePHP Paginator: ordinamento in base a un campo Translated

6 dicembre 2011Categoria:database | php

Nel caso in cui si utilizzi il Paginator Helper e si vogliano ordinare i risultati in base ad un campo tradotto con Tranlsate Behavior

var $actsAs = array(
    'Translate'=> array(
        'name'
    )
);

si deve utilizzare all’interno delle view la funzione sort in questo modo

echo $paginator->sort('name','I18n__name.content');

e aggiungere  nell’AppModel la seguente funzione (testato in CakePHP 1.3):

function hasField($fieldName) {
    if (parent::hasField($fieldName))
        return true;
    else
        switch ($fieldName) {
            case "content":
                return true;
            default:
                return false;
        }
    return false;
}

CakePHP: paginazione con condizioni su campi tradotti

30 novembre 2011Categoria:php

Per eseguire la paginazione in CakePHP utilizzando delle condizioni sui campi tradotti (Translate Behavior) è necessario aggiungere alcune funzioni nell’app_model (testato nella versione 1.3):

var $usePaginateMethod = 'standard';
function setPaginate($method=''){
    if (empty($method)){
        $this->usePaginateMethod = 'standard';
    }else{
        $this->usePaginateMethod = $method;
    }
}

function paginateCount($conditions, $recursive, $extra){
    switch ($this->usePaginateMethod) {
        case 'standard':
            return $this->standardPaginateCount($conditions, $recursive, $extra);
        break;

        case 'custom':
        return $this->customPaginateCount($conditions, $recursive, $extra);
        break;
    }
}

function standardPaginateCount($conditions, $recursive, $extra){
    $results = $this->find('count', compact('conditions', 'recursive', 'extra'));
    return $results;
}

function customPaginateCount($conditions, $recursive, $extra){
    $results = $this->find('all', compact('conditions', 'recursive', 'extra'));
    $count = count($results);
    return $count;
}

Leggi tutto…

PHP: utilizzare la funzione mail() in locale con xampp e Windows 7

9 novembre 2011Categoria:php

In un precedente articolo ho spiegato come configurare sendmail correttamente in Windows per poter utilizzare la funzione PHP mail() in locale.
Ora su Windows7 la configurazione non funziona più e per questo motivo ho dovuto cercare un’alternativa per risolvere velocemente il problema.

L’alternativa si chiama fake sendmail for windows . Ecco come configurare correttamente il programma:

Leggi tutto…

CakePHP : cronometrare la propria applicazione

21 ottobre 2011Categoria:php

In un’applicazione possono esserci dei punti critici che ne rallentano l’esecuzione; nelle applicazioni web molto spesso capita in presenza di query molto pesanti al database e magari non ottimizzate oppure nel caso di chiamate ad API che si connettono a servizi esterni.

Per capire dove l’applicazione “rallenta” è utile inserire dei punti di controllo all’interno delle varie funzioni (soprattutto quelle più critiche) per visualizzare in fase di debug  i tempi impiegati per l’esecuzione e capire subito dove si deve intervenire.

Come prima cosa inserire nell’AppController le seguenti funzioni (o creare l’AppController se non c’è già): Leggi tutto…

CakePHP: estrarre in automatico le stringhe da tradurre tramite console (Windows)

9 settembre 2011Categoria:php

1) Configurare le variabili d’ambiente aggiungendo alla fine della stringa Path:

;C:\xampp\php\

Cambiando il percorso della cartella php in base alla propria installazione.

2) Tramite linea di comando posizionarsi nella cartella “app” della propria applicazione, es:

cd C:\xampp\htdocs\vhosts\pilosio\app

Leggi tutto…

CakePHP: una semplice struttura per salvare i dati in cache via controller

8 settembre 2011Categoria:php

Ecco una struttura molto semplice per gestire via controller i dati da salvare in cache:

//imposta identificativo dei dati salvati in cache
$cache_id = 'contenuto_xyz';
//imposta un prefisso per la cache costituito da LINGUA_mycache_
Cache::set(array('prefix' => Configure::read('Config.language').'_mycache_'));
//cerca i dati. se la chiave della cache non è impostata, se è scaduta
//o si verifica un errore durante la lettura $data sarà == false
$this->data[$cache_id] = Cache::read($cache_id);
//se i dati non sono in cache
if ($this->data[$cache_id] === false) {

    /*   INIZIO RICERCA/ELABORAZIONE DATI  */
    $data = $this->XYZ->find('all');
    /*  FINE RICERCA/ELABORAZIONE DATI  */

    //scrittura dell'elemento in cache
    Cache::set(array('prefix'=>Configure::read('Config.language').'_mycache_'));
    Cache::write($cache_id, $data );
}
//imposta la variabile con i dati
$this->data[$cache_id] = $data;

Leggi tutto…

CakePHP: eseguire ricerche sui campi tradotti (Translate Behavior)

6 settembre 2011Categoria:php

CakePHP permette di gestire la traduzione dei campi del DB tramite Translate Behavior.
Ad esempio se abbiamo un Model chiamato Elements definito nel seguente modo:

class Element extends AppModel {

}

Possiamo impostare che i campi title e description siano trattati come traduzioni:

Leggi tutto…