Où placer une fonction accessible partout?

Ce sujet est résolu
Default
,

Bonjour,

Simple question, j'ai ma fonction get_gravatar:

/**
 * Get either a Gravatar URL or complete image tag for a specified email address.
 *
 * @param string $email The email address
 * @param string $s Size in pixels, defaults to 80px 1 - 512 ]
 * @param string $d Default imageset to use 404 | mm | identicon | monsterid | wavatar ]
 * @param string $r Maximum rating (inclusive) g | pg | r | x ]
 * @param boole $img True to return a complete IMG tag False for just the URL
 * @param array $atts Optional, additional key/value attributes to include in the IMG tag
 * @return String containing either just a URL or a complete image tag
 * @source http://gravatar.com/site/implement/images/php/
 */




function get_gravatar( $email, $s = 50, $d = 'mm', $r = 'g', $img = false, $atts = array() ) {
    $url = 'http://www.gravatar.com/avatar/';
    $url .= md5( strtolower( trim( $email ) ) );
    $url .= "?s=$s&d=$d&r=$r";
    if ( $img ) {
        $url = '<img src="' . $url . '"';
        foreach ( $atts as $key => $val )
            $url .= ' ' . $key . '="' . $val . '"';
        $url .= ' />';
    }
    return $url;
}

Ou la placer pour qu'elle soit accessible depuis mon layout par default et toute mes vues ?

8 Réponse

Default
,

En effet c'est pas très propre, la class AppHelper te permet d'ajouter des fonctionnalités à tous tes helpers... Si tu veux utiliser ton helper dans une vue, tu devras faire :

<?php
/* Dossier /app/views/helpers/gravatar.php */
class GravatarHelper extends AppHelper {
    function get_gravatar($email, $s = 50, $d = 'mm', $r = 'g') {
        $url = 'http://www.gravatar.com/avatar/';
        $url .= md5(strtolower(trim($email)));
        $url .= "?s=$s&d=$d&r=$r";


        return $this->output($url);
    }
}
?>

Dans un controller quelconque :

var $helpers = array('Gravatar');

Et dans ta vue :

<?php echo $gravatar->get_gravatar($param1,$param2,...); ?>
Default
,

Oook

Mais lorsque je passais sur un autre controller le layout n'arrivait a atteindre le helper, je l'ai donc placer dans app_controller pour etre utiliser a partir de n'importe quel controller:

class AppController extends Controller {
    var $helpers = array('Gravatar', 'Session', 'Html'); 
        ...

Et la ça fonctionne!

Une foi de plus Hardware ton aide a été précieuse! merci :)

Default
,

En utilisant les composants ou les assistants (Components, Helpers) de cake php. Tu pourras alors accéder aux fonctions de ton plugin ou de ton helper (au choix) partout dans le framework.

Quelques liens :

Il existe aussi des helpers et des plugins gravatar déjà codés pour cakePHP

Edit : Graf le parsage des liens n'est pas bon, on ne peut pas poster plus de deux liens sans que le texte soit coupé... :/

@+

Default
,

Parfait merci beaucoup,

Je vais tester ça et confirme que tout fonctionne

Le lien et le code, une foi que l'on tape un code, les retours chariots ne fonctionnent plus!

Default
,

Nan nan c'est pas ça, le parsage des liens a un comportement bizzard, regarde je vais poster 4 liens mais ça va en afficher qu'un seul :

Lien 1

Lien 2

Lien 3

Lien 4

Edit : voila il ne reste que le dernier lien :/

Default
,

Parfait c'est fait.

J'avais pas trop envie de perdre mon temps dessus donc j'ai fait au plus simple, j'arrivai pas a utiliser mon helper dans mes vue et layout donc j'ai crée app_helper.php:

<?php
class AppHelper extends Helper {


    /**
     * Get either a Gravatar URL or complete image tag for a specified email address.
     *
     * @param string $email The email address
     * @param string $s Size in pixels, defaults to 80px 1 - 512 ]
     * @param string $d Default imageset to use 404 | mm | identicon | monsterid | wavatar ]
     * @param string $r Maximum rating (inclusive) g | pg | r | x ]
     * @return String containing either just a URL
     * @source http://gravatar.com/site/implement/images/php/
     */




    function get_gravatar($email, $s = 50, $d = 'mm', $r = 'g') {
        $url = 'http://www.gravatar.com/avatar/';
        $url .= md5(strtolower(trim($email)));
        $url .= "?s=$s&d=$d&r=$r";


        return $this->output($url);
    }   


}
?>

Ainsi la fonction get_gravatar() est accessible depuis n'importe quel helper.

Mais si quelqu'un a une solution pour faire passer le helper dans les vues et layout je suis preneur (ce sera plus propre ainsi)

Default
,

Oh tiens j'avais essayé mais ça ne fonctionnait pas...

bref encore une petite question, et maintenant comment l'utilisé dans mon layout?

Default
,

Si tu as bien télécharger la dernière version de cakephp (1.3.x) et que tu n'as pas touché au coeur du framework (dossier cake), ça devrait marcher... les helpers que tu charges dans la propriété $helpers sont disponibles dans les layouts ET les vues, ... théoriquement :)

Tu utilises bien ceci pour charger un layout autre que le "default.ctp" ? :

$this->layout = 'nom_du_layout';