Topic: [1.2] Web Browser Helper
Metto a disposizione questo piccolo e semplice "helper" che ho scritto per semplificare la gestione di contenuti personalizzati in base al browser usato dall'utente che accede alla pagina:
<?php
/**
* Helper per identificare il browser utilizzato dall'utente.
*
* @author Emanuele "Zuck" Bertoldi
* @email zuck@fastwebnet.it
* @version 1.0
*/
class BrowserHelper extends AppHelper {
/**
* name => string_id
*
* @var $array
*/
var $browsers = array('ie6' => 'MSIE 6.0',
'ie7' => 'MSIE 7.0',
'Firefox' => 'Firefox',
'Opera' => 'Opera',
'Safari' => 'Safari'
);
/**
* Restituisce il nome del browser utilizzato.
*
* @return string
*/
function identify() {
foreach ($this->browsers as $name) {
if ($this->check($name)) {
return $name;
}
}
}
/**
* Verifica se il browser indicato è quello utilizzato dall'utente.
*
* @param string $name Nome del browser.
* @return boolean
*/
function check($name) {
return ereg($this->browsers[$name], $_SERVER['HTTP_USER_AGENT']);
}
}
?>Il suo utilizzo più efficace e utile, secondo me, è per l'inserimento dei fogli di stile con regole personalizzate per i vari browsers, in maniera tale da non sporcare il codice nei browsers in cui tali regole non dovrebbero servire.
Chiunque sia pratico di CSS sa che deve, solitamente, fare i conti con due categorie di browsers: IE e non-IE. Chi poi ha dovuto sporcarsi le mani con i CSS sa bene quanto sia difficile, a volte, far convivere le regole per risolvere i bugs di IE con il listato pulito di Firefox (per esempio).
Con questo helper la vita è estremamente semplice, poichè basterà semplicemente scrivere questo codice nell'intestazione della pagina XHTML:
<head>
...
<?php echo $html->css('media/screen', 'stylesheet', array('media' => 'screen' )); ?>
<?php if ($browser->check('ie6')): ?>
<?php echo $html->css('browsers/ie/6/default', 'stylesheet', array('media' => 'all' )); ?>
<?php elseif ($browser->check('ie7')): ?>
<?php echo $html->css('browsers/ie/7/default', 'stylesheet', array('media' => 'all' )); ?>
<?php endif; ?>
<?php echo $html->css('media/print', 'stylesheet', array('media' => 'print' )); ?>
</head>...e il gioco è fatto! Perfette pagine XHTML con altrettanto perfetti fogli di stile liberi da hack e workaround per tutti i browsers intelligenti, fogli di stile e markup XHTML personalizzato invece per Internet Explorer. Pulizia ed eleganza con poche righe di codice!!
Effettuando, infatti, questo controllo dal lato-server, non ne rimarrà traccia sulle pagine XHTML presentate all'utente, al contrario, ad esempio, di soluzioni con JavaScript o "commenti condizionali" (orrendi da vedere e scomodi da leggere e interpretare).
Ad esempio grazie a questo piccolo helper sono finalmente riuscito a implementare un "menu a tendina" fatto esclusivamente tramite CSS e compatibile con tutti i browsers, senza uso di JavaScript o altro: codice e CSS puliti!
Che ve ne pare? ![]()
Last edited by zuck (18-02-2008 22:15:00)