2009-11-14 6 views
1

Lorsque je développe une application web sur Zend_framework (php), je dois inclure des images (fichiers css, fichiers js, etc.).Zend_framework - chemins relatifs d'images

La solution pour l'inclusion était de spécifier les chemins absolus chaque fois que j'avais besoin d'une image (je stockais dans le paramètre "global like" avec mon hôte et le concaténais avec le chemin relatif de l'image). Comme je comprends que cette solution est trop chère (pour chaque image pour aller au service de DNS et ainsi de suite) et je cherche une solution plus simple au problème de chemin relatif.

P.S. Le problème peut être mieux décrit dans l'exemple suivant: quand je vais à "http://myhost.com/" les images seront montrées normalement (le chemin de l'image était: "./images/logo.jpg"). mais il ne sera pas vu de l'url "http://myhost.com/users/" (pour le faire voir que je devais changer en chemin de l'image à: "./../images/logo.jpg".

Id tout le monde sait comment je peux résoudre ce problème, je serai heureux d'entendre.

Gorelik.

Répondre

8

Vous cherchez le

<?php echo $this->baseUrl('images/logo.jpg'); ?> 
2
aide BaseUrl.

Vous devez utiliser chemins-parent racine du site au lieu de parent

Supprimez simplement ce point dans le chemin de votre image: ./images/logo.jpg doit être /images/logo.jpg. Le premier point en fait un chemin relatif à l'URL actuelle (il doit donc y avoir des changements selon l'endroit où vous vous trouvez sur le site). Sans point c'est un chemin relatif à la racine, donc ça marche partout sans avoir besoin de le changer.

Jetez aussi un coup d'oeil à this related question et les liens dans ses réponses.

+0

Je seconde cette solution car il n'ajoute pas les frais généraux d'invoquer l'aide baseUrl . – Gordon

+0

Que se passe-t-il si son site Web se trouve dans un sous-répertoire? http: // myhost.com/blah/blah/public/'=>' http: // myhost.com/images/logo.jpg' –

+0

L'utilisation d'un assistant est la solution la plus flexible puisqu'il peut déplacer son site sans se soucier à propos des chemins de rupture. L'assistant 'baseUrl' interroge le contrôleur frontal pour l'URL de base actuelle. Vous pouvez également écrire votre propre assistant d'URL de base en utilisant les valeurs de configuration. * Optimisation prématurée bla bla:) * –

1

Comme je comprends cette solution est hors de prix (pour chaque image pour aller le service DNS et ainsi de suite) et je suis à la recherche d'une solution simple au problème de chemin relatif.

Je ne crois pas que ce soit vrai.

Même si vous utilisiez des URL absolues complètes, y compris le nom d'hôte, vous n'encourriez pas de recherche DNS sur chaque image. Soyez assuré que le système d'exploitation client (et dans certains cas, je pense, le navigateur) met en cache ce genre de choses pour vous.

Bien sûr, il n'y a aucune raison d'utiliser des URL complètes. Il suffit d'aller absolu de la racine du serveur:

<?PHP 
// somewhere in config.php or similar: 
define('SITE_ROOT_URL_PATH','/myapplication'); 
... 
// meanwhile, in some template 
<img src="<?php echo SITE_ROOT_URL_PATH . '/images/foo.jpg'; ?>" /> 

Si votre application est en cours d'exécution dans la racine web, vient de mettre DITE_ROOT_URL_PATH à « »

Vous pouvez même créer une petite fonction d'assistance pour vous faire économiser quelques frappes au clavier: imgURL ('foo.jpg').

J'ai utilisé cette méthode pendant des années et je n'ai jamais eu de maux de tête. À moins que je ne manque quelque chose dans la question, c'est la voie à suivre.

0

Essayez ceci:

code:

$imgurl=$this->layout()->staticBaseUrl.'application/themes/themes-files/images/filename.jpg'; 

Html:

<img src="<?php echo $imgurl; ?> " width="50" height="50"/> 

:)

Questions connexes