La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 2 ]

Saiborg

Topic: WIP: Componente per le statistiche

Una delle prime cose che mi erano venute in mente riguardo a Cake era che sarebbe stato utile realizzare un componente per salvare le statistiche (visite etc.) in modo da non doversi appoggiare per forza a servizi esterni o altri script ma avere un servizio "integrato" con le nostre applicazioni Cake.

La cosa mi sembrava abbastanza semplice ma ogni volta che combino qualcosa con Cake mi sorgono dubbi e controdubbi perciò ho deciso di iniziare col minimo indispensabile e aprire la discussione, magari con l'aiuto di altri viene qualcosa di decente tongue

Inizio quindi con un progetto semplicissimo.
Si parte con una tabella nel DB:
Tabella page_statistics
id stringa (Primary Key)
impressions int

L'id nell'idea è l'url della pagina.
Il modello:

<?
class PageStatistic extends AppModel
{
 var $name = 'PageStatistic';
 var $useTable = 'saib_stats';
}
?>

Il codice del componente è il seguente:

<?
class StatsComponent extends Object
{
 var $controller = true;
 var $Stats = NULL;    // riferimento al modello per il salvataggio delle statistiche
 
 function startUp(&$controller)
 {
  $this->controller = $controller;
  $modelName = $this->controller->statsModel;
  $this->Stats =& $this->controller->$modelName;
  
  $this->update($this->controller->here);
 }
 
 /*
  *  parametri: 
  *   - pageKey (stringa): id della pagina
  */
 function update($pageKey)
 {
  $this->Stats->id = $pageKey;
  $currStat = $this->Stats->read();
  
  if($currStat)
  {
   $currStat['PageStatistic']['impressions']++;
   $currStat['id'] = $pageKey;
    }
    else
    {
     $currStat = array('id' => $pageKey,
                       'impressions' => 1,
                       );
    }
    $this->Stats->save($currStat);
 }
}
?>

Nella funzione startUp recupero il riferimento al controller e anche al modello (PageStatistic) per il salvataggio dei dati. Qui iniziano i dubbi tongue A me sarebbe piaciuto semplicemente creare il modello all'interno del component per poter avere un componente che eventualmente funzionasse completamente in automatico, quindi senza bisogno di configurazioni varie.

Dicono però che creare i modelli all'interno dei componenti non sia una buona idea. In effetti mi sono accorto da solo che è una pessima idea, in quanto se il modello che ci server per salvare le statistiche non è nell'array $uses del controller i file con la configurazione della classe non sono visibili dal component e un'istruzione del tipo: $a = new PageStatistic(); da errore.

E' quindi sempre necessario fare affidamento al controller e ricordarsi di caricare da lì il modello giusto. Nel mio caso, visto che ormai il controller doveva per forza esser tirato in ballo, ho deciso di utilizzare una variabile $statsModel, da settare nel controller, che contenga il nome del modello per il salvataggio delle statistiche (nel mio caso 'PageStatistic') così se qualcuno vuole usare un altro nome può farlo, basta che la tabella abbia la stessa struttura. Il component a quel punto (come si vede dal codice) può recuperare tutto dal controller senza dover creare nulla.

Non so se sia elegantissima come soluzione ma non mi è venuto in mente altro tongue Se qualcuno ha un'idea migliore son ben disponibile ad accettare suggerimenti smile

Altra cosa: se a qualcuno interessa un componente del genere e ha voglia di collaborare si può spostare la cosa nella categoria progetti e andiamo avanti insieme smile

zuck

Re: WIP: Componente per le statistiche

Perchè no? Un visualizzatore di statistiche integrato in Cake sarebbe molto comodo e utile!

Compatibilmente con il tempo a disposizione io ci sono wink

Per la tua domanda...Io sinceramente non inserirei logica nel controller, mi spiego: il nome del modello lo renderei una variabile del component e non del controller, con un valore di default. Se lo si vuole modificare basta che nel metodo "beforeFilter" del controller si scriva:

$this->Stats->modelName = 'blablabla';

Posts [ 2 ]

Guest posting is disabled. You must login or register to post a reply.

Pages: 1

Topic info

0 guests and 0 users are reading this topic now


Forum quick jump menu

Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB

[ Generated in 0.026 seconds, 12 queries executed ]