18 Ott 2012

Le Master Pages sono una soluzione molto utile offerta dell’ambiente di sviluppo web .NET della Microsoft. Il modo in cui semplificano la vita, accentrando le principali questioni relative al design di più pagine di un sito web in un unico documento, mi ha conquistato da subito e l’ho utilizzato con soddisfazione a lungo.

Recentemente mi è capitato di dover modificare un attributo HTML comune a tutte le pagine del sito al quale sto lavorando: mi riferisco la tag BODY delle mie pagine.
Il mio primo approccio è stato lato cliente, cercando di sviluppare una funzione JQuery che permettesse la sostituzione della proprietà ID del tab BODY in ognina delle pagine, adattandola al contesto del contenuto presente.

Ho dovuto abbandonare questa strada perchè tutto diventava troppo complicato dovendo personalizzare lo script eseguito nell’HEAD delle mie pagine, mi sembrava una soluzione eccessivamente verbosa e difficile da mantenere.

Ho quindi effettuato dei testo per riuscire a modificare una singola variabile inserita appositamente nella mia Master Page di riferimento: la mia variabile era la seguente:

<body id="<%= this.body_id %>" >

E fin qui è stato facile. I guai sono arrivato dopo… non riuscivo ad accedere con successo alla variabile dagli script delle mie pagine, essa rimaneva sempre non definita e quindi vuota.
La soluzione è stata quella di ricorrere alla seguente notazione, che indica con chiarezza l’appartenenza della variabile ad una Master Page, permettendo così agli script delle pagine che la implementano di modificarla direttamente:

((SiteMaster)this.Master).body_id = "home";

dove “SiteMaster” è il nome della vostra Master Page (controllate bene il nome che la definisce nel file .AS ad essa abbinata, non al nome che ha il documento: io lo vedevo infatti diviso da un punto, “Site.Master”, ma nel codice la classe era chiamata “SiteMaster” ed è quello il nome da prendere in considerazione.
Questa soluzione mi è stata molto utile, spero possa tornare utile anche a voi.

15 Ott 2012

Lo Zend Framework è un potente set di classi e funzionalità che può risultare minaccioso per la sua complessità e per il rigore che può richiedere una sua implementazione nei vostri script.
Molti componenti di Zend invece si prestano ad essere utilizzati senza alterare eccessivamente il vostro modo di programmare.
Personalmente ho goduto di un sollievo incommensurabile utilizzando le funzioni che Zend offre per dialogare con i database. Dopo una corretta configurazione di Zend e avergli permesso di accedere al vostro DB, effettuare query può essere estremamente semplice.
Il primo passo è quello di creare una classe che incapsuli una delle vostre tabelle instanziando una classe apposita di Zend:

class Zend_Tabella extends Zend_Db_Table_Abstract
{
protected $_name = 'nome_mia_tabella';//Questa stringa deve corrispondere al nome esatto della vostra tabella
protected $_primary = 'id_tabella';//dichiarazione chiave primaria necessaria

}

Disponiamo ora di una classe che Zend potrà utilizzare per interrogare il database. Vediamo come utilizzarla.

$table = new Zend_Tabella(); // Instanziamo la tabella e assegnamola ad una variabile
$table_name = "nome_mia_tabella"; // Dichiariamo il nome della tabella
$order_by = "id_tabella"; // Passiamo il nome del parametro da utilizzare per la nostra query

// Definizamo ora una procedura select di base popolandola con le variabili dichiarate in precedenza
$select_base = $table ->select()
->from($table_name)
->order($order_by)
->setIntegrityCheck(false);

// Eseguiamo la query e conserviamola in una variabile
$rows = $table->fetchAll($select_base);

$array_rows = $rows->toArray();

Fatto! Ora la nostra variabile $rows conserva un oggetto zend_db_table_rowset contenente le righe recuperate… se ce ne sono! Vediamo ora come effettuare un semplice controllo per capire cosa abbiamo recuperato.

if ($rows)
{
$numero_elementi_totali = $rows->count(); // Conserviamo il numero totale delle righe recuperate
if ($numero_elementi_totali // Non è stato recuperato nulla
} else {
$array_rows = $rows->toArray(); // Per poterle utilizzare più facilmente, convertiamo le righe recuperate in un array standard
}
} else {
// c'è stato un errore
}

Questo è solo un punto di partenza ma può rendere l’idea di come Zend possa semplificare processi tediosi dal codice non riutilizzabile in blocchi più concisi, leggibili e che possono essere riutilizzati con facilità.
Per approfondire: