Répertoire de codes source
Aide de vue pour chemin relatif | |
---|---|
déposé par JEDI_BC le 18/06/2009 nombre de visites : 4234 edité le 18/06/2009 par JEDI_BC |
Parfois, la déclaration de liens/images/ressources/etc... via un chemin absolu grace à baseUrl ne fonctionne pas. En effet, en utilisant un reverse proxy avec des sous-répertoires cela ne fonctionne plus. Exemple : http://mon_portail/demo/ qui est proxyé vers http://mon_appli_mvc Dans la page, http://mon_appli_mvc/controller/action/ il y a une image dont le chemin absolu est /images/test.png. Sauf que coté client, le même chemin est utilié et le navigateur essaye de trouver http://mon_portail/images/test.png au lieu de http://mon_portail/demo/images/test.png Mon petit helper, via $this->relativeUrl('/images/test.png') renverra ../../images.png |
<?php class Zend_View_Helper_RelativeUrl extends Zend_View_Helper_Abstract{ protected static $_depth = null; public function RelativeUrl($url = null) { // On supprime le / initial if (substr($url, 0, 1) == '/') $url = substr($url, 1); if (null == self::$_depth) { // On parse REQUEST_URI pour n'avoir que les répertoires $urlData = @parse_url($_SERVER['REQUEST_URI']); if (false === $urlData) return $url; $urlPath = $urlData['path']; // On enlève la partie baseUrl en trop $front = Zend_Controller_Front::getInstance(); $urlPath = substr($urlPath, strlen($front->getBaseUrl())); // On calcul la profondeur exacte du chemin relatif $pos = strrpos($urlPath, '/'); if ((false !== $pos) && (0 !== $pos)) { $urlPath = substr($urlPath, 1, $pos-1); self::$_depth = count(explode('/', $urlPath)); } else { self::$_depth = 0; } } return str_repeat('../', self::$_depth) . $url; } } |
|