当我在Zend_framework(php)上开发Web应用程序时,我必须包含图像(css文件,js文件等)。
包含的解决方案是每次我需要一个图像时指定绝对路径(我与主机一起存储在“global like”参数中,并将其与主机上图像的相对路径连接起来)。据我所知,这个解决方案价格过高(每个图片去DNS服务等等),我正在寻找一个更简单的解决相对路径问题的方法。
P.S。在下面的示例中可以更好地描述该问题:当我要进行“http://myhost.com/”时,图像将正常显示(图像路径为:“./ images / logo.jpg”)。但它不会从“http://myhost.com/users/”网址中看到(为了让我看到我必须更改为图像路径:“。/ ./ images / logo.jpg”。
我知道如何解决这个问题,我很高兴听到。
戈列利克。
答案 0 :(得分:8)
您正在寻找BaseUrl帮助者。
<?php echo $this->baseUrl('images/logo.jpg'); ?>
答案 1 :(得分:2)
您应该使用站点根目录相对路径而不是相对路径。
只需删除图片路径中的该点:./images/logo.jpg
应为/images/logo.jpg
。前导点使其成为相对于当前URL的路径(因此需要根据您在网站上的位置进行更改)。如果没有圆点,则它是相对于根的路径,因此它可以在任何地方工作而无需更改它。
另请查看this related question及其答案中的链接。
答案 2 :(得分:1)
据我所知,这个解决方案是 价格过高(每张照片都要去 DNS服务等等)和我一样 寻找一个更简单的解决方案 相对路径问题。
我不相信这是真的。
即使您使用完整的绝对URL(包括主机名),也不会在每个图像上进行DNS查找。请放心,客户端操作系统(在某些情况下,我认为是浏览器)正在为您缓存这些内容。
当然,没有理由使用完全限定的网址。从服务器根目录开始绝对:
<?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'; ?>" />
如果您的应用在网络根目录中运行,只需将DITE_ROOT_URL_PATH设置为''
你甚至可以创建一个小帮手函数来为你节省一些击键:imgurl('foo.jpg')。
我已经使用这种方法多年了,从来没有头疼。除非我在问题中遗漏了一些东西,否则这就是你要走的路。
答案 3 :(得分:0)
试试这个:
代码:
$imgurl=$this->layout()->staticBaseUrl.'application/themes/themes-files/images/filename.jpg';
HTML:
<img src="<?php echo $imgurl; ?> " width="50" height="50"/>
:)