2010-09-16 8 views
0

Je veux ajouter des icônes à mon application. J'ai mis les icônes dans public_html/images/icons/et je veux un moyen DRY de les mettre dans mes view-scripts. Donc, je préférais ne pas répéter ..Quelles sont les meilleures pratiques pour ajouter des icônes aux applications Zend Framework?

<img src="<?php echo $this->baseUrl();?>/images/icons/plus-circle.png"</a> 

..pour chaque icône. Je préférerais un simple appel d'objet + fonction. Quelle est la meilleure pratique pour cela?

I suspect Je devrais utiliser un assistant d'affichage, mais je ne comprends pas encore complètement.

Merci!

Répondre

2

Je voudrais utiliser une aide View pour cela.

class My_View_Helper_Icon extends Zend_View_Helper_Abstract 
{ 

    public function icon($icon) 
    { 
     // not sure if you can use $this->baseUrl(); inside view helper 
     $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl(); 
     $xhtml = sprintf('<img src="%s/images/icons/%s"', $baseUrl, $icon); 

     return $xhtml; 
    } 

} 

l'intérieur de votre vue

echo $this->icon('plus-circle.png'); 
+2

retour ''; – user228395

+0

J'ai adapté votre réponse à une nouvelle réponse pour la faire fonctionner dans mon application. Mais votre réponse est fondamentalement bonne, autant que je sache. –

+0

C'est sympa, mais vous ne pouvez pas ajouter de paramètres à la balise 'img' de cette façon. Vous devriez sous-classer 'Zend_View_Helper_HtmlTag' à la place. – takeshin

0

J'ai une aide de vue qui a la méthode $this->app()->getFileUrl('favicon.ico'). Ce qui permettra de rechercher l'emplacement du thème d'abord, puis l'emplacement public. J'attribue ceci à une variable en haut de mon script de vue et tout est fait.

se trouve la source de l'aide de vue et plugin de contrôleur frontal ici: http://github.com/balupton/balphp/tree/master/trunk/lib/Bal/

Ou plutôt le code directement: http://github.com/balupton/balphp/blob/master/trunk/lib/Bal/Controller/Plugin/App/Abstract.php#L721

+0

"Ce qui va chercher l'emplacement du thème d'abord, puis l'emplacement public." Cela semble assez gourmand en ressources, avez-vous testé cela pour la vitesse? –

+0

La performance de ceci est triviale; Il est à peine utilisé (et où il est, le résultat est mis en cache), les problèmes de performance seraient simplement avec deux contrôles 'file_exists' (un pour les thèmes, un pour les publics). – balupton

0

En utilisant @ réponse de ArneRie:

Dans les vues/aides /Icon.php J'ai écrit la classe suivante:

class Zend_View_Helper_Icon extends Zend_View_Helper_Abstract 
{ 
    //$icon is the name of an icon without the ".png" at the end because all icons 
    //are .png 
    public function icon($icon) 
    { 
     $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl(); 
     return sprintf('<img src="%s/images/icons/%s.png">', $baseUrl, $icon); 
    } 
} 

Dans mon dossier de vue dans les vues/scripts/index/index.phtml j'appelle alors la méthode de l'objet de l'icône comme ceci:

<?php echo $this->icon('plus-circle');?> 
0

Voici ma version:

class My_View_Helper_Icon extends Zend_View_Helper_HtmlElement 
{ 
    /** 
    * 
    * @param string $src Icon source 
    * @param array $attribs HTML Atrtibutes and values 
    * @param string $tag HTML tag name 
    * @return string HTML 
    */ 
    public function icon($src, $attribs = array(), $tag = 'img') 
    { 
     $attribs['src'] = $this->view->baseUrl($src);  
     $html = '<' . $tag . $this->_htmlAttribs($attribs) . $this->getClosingBracket(); 

     return $html; 
    } 
}