La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 2 ]

zuck

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? wink

Last edited by zuck (18-02-2008 22:15:00)

Namaless

Re: [1.2] Web Browser Helper

WOW! non avevo guardato neutral

Quasi quasi lo uso subito smile

Consiglio una modifica:

return ereg($this->browsers[$name], $_SERVER['HTTP_USER_AGENT']);

sostituisci con la funzione "env()".

return @ereg($this->browsers[$name], env('HTTP_USER_AGENT'));

Ho commentato "ereg" in quanto mi dà le notice e non sò il perchè.. comunque sono messaggi di poco conto e pure inutili smile

Ti ringrazio e sticko big_smile

Posts [ 2 ]

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

Pages: 1

Topic info

1 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.084 seconds, 10 queries executed ]