首页 文章

PHP:Twig:图像的相对路径?

提问于
浏览
1

想知道是否有办法在Twig模板引擎中使用相对于模板存储位置的路径 .

方案如下:

我有一个Typo3网站,我的应用程序驻留在fileadmin / myApplication中 . 我使用Twig作为模板引擎来呈现从JSON文件动态加载的多语言内容 . 我的一些模板文件包含图像路径,鉴于Typo3的性质,需要有一个src路径的fileadmin / myApplication / img / ...

现在,如果我想测试我的应用程序的新版本,我希望能够创建目录fileadmin / myApplication2.0,而无需在模板文件中更改我的图像的路径 .

有模板引擎(例如raintpl,参见this link)可以转换服务器文件路径的相对路径 . 有没有一种在Twig中实现相同效果的简单方法?

例如

templates/template.html 
img/logo.png

输出

<img src="fileadmin/myApplication2.0/img/logo.png">

这就是rain.tpl的用法:

WYSIWYG - Path replace
This cool feature allows designers to create templates as regular HTML with images and styles with relative paths, RainTPL replaces automatically these paths with the correct server paths.

Absolute paths and paths ending with # will be not changed.

<link href="style.css" type="text/css" rel="stylesheet">
<img src="img/logo.gif">

Output html:

<link href="tpl/style.css" type="text/css" rel="stylesheet">
<img src="tpl/img/logo.gif">

Note: if you set raintpl::$base_url, RainTPL will replace the path with raintpl::$base_url.

3 回答

  • 1
    <img src="{{ asset('img/my_image.gif') }}" alt="something" />
    

    资产路径将解析为/ web目录 . 在我的示例中,图像的完整项目路径为:

    Project/web/img/my_image.gif
    

    您需要使用.twig扩展名才能使用此方法 .

  • 2

    正如约瑟夫所说:

    <img src="/img/logo.png">
    

    只有当您的网站位于根URL上时才能看到图像

    http://localhost/
    

    它不会起作用

    http://localhost/myApp/
    

    所以在这种情况下你需要为它创建一个主机

    http://myApp/
    

    当你可以在浏览器或html编辑器中看到它的外观时,模板就是WYSIWYG,所以基本上任何模板都使用相对路径 .

    RainTPL有一个很棒的想法,即自动替换模板的相对路径和正确的服务器路径(相对或绝对),这样您就可以立即看到模板的外观 .

    使用WYSIWYG模板的另一个非常好的方法是<base href =“http:// localhost / myApp /”>标记,它允许您使用相对路径 . 唯一的问题是交叉浏览和Javascript,因为如果在所有这些中工作相同,则不是很清楚 .

  • 3

    src 属性中的路径是相对URL,而不是服务器上文件系统的相对文件路径,以及如何在目录中组织文件 .

    相对URL将被解析为模板将成为/存在的文档的基本URL . 因此,您可以使用相对URL,但您需要知道它们的相关内容才能使它们正常工作 .

    在您的情况下,可以使用快速解决方案

    <img src="/img/logo.png">
    

    如果您的网站位于Web根目录中 .

    另一种方法是使用模板函数,该函数负责根据请求的URL路径构建(相对)URL . 另一种方法是在整个模板中对<base> href Docs进行硬编码 .

    另一种方法是获取渲染模板的输出,解析链接并使其适合 .

    但重要的是,您需要了解特定的请求的URL路径以及您的模板(块)的使用方式 .

相关问题