2

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

场景如下:

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

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

有模板引擎(例如raintpl,请参阅此链接)将相对路径转换为服务器文件路径。有没有一种简单的方法可以在 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.
4

3 回答 3

3

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

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

在您的情况下,一个快速的解决方案可能是使用

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

如果您的网站位于 web 根目录中。

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

另一种选择是您获取渲染模板的输出,解析链接并使其适合。

但重要的部分是您需要具体了解所请求的 URL 路径以及您的模板(块)是如何使用的。

于 2011-08-19T14:20:37.903 回答
2

正如约瑟夫所说的绝对路径:

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

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

http://localhost/

它不起作用

http://localhost/myApp/

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

http://myApp/

当您可以看到它在浏览器或 html 编辑器中的外观时,模板就是所见即所得的,因此基本上任何使用相对路径的模板。

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

使用 WYSIWYG 模板的另一个非常好的方法是 <base href="http://localhost/myApp/"> 标记,它使您能够使用相对路径。唯一的问题是交叉浏览和 Javascript,因为不是很清楚它们是否都相同。

于 2011-09-28T14:20:53.093 回答
1
<img src="{{ asset('img/my_image.gif') }}" alt="something" />

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

Project/web/img/my_image.gif

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

于 2013-07-09T23:50:32.220 回答