PHP: Twig: Относительные пути для изображений? - PullRequest
1 голос
/ 19 августа 2011

Интересно, есть ли способ использовать пути относительно места хранения шаблонов в шаблонизаторе Twig.

Сценарий выглядит следующим образом:

У меня есть веб-сайт Typo3, где мое приложение находится в fileadmin / myApplication. Я использую Twig в качестве движка шаблонов для рендеринга многоязычного контента, который загружается динамически из файлов JSON. Некоторые из моих файлов шаблонов содержат пути к изображениям, которые, учитывая природу Typo3, должны иметь src-путь fileadmin / myApplication / img /...

Теперь, если я хочу протестировать новую версию своего приложения, я хочу иметь возможность создавать каталог fileadmin / myApplication2.0 без необходимости изменять пути к моим изображениям внутри файлов шаблона.

Существуют механизмы создания шаблонов (например, raintpl, см. this link ), которые переводят относительные пути в пути к файлам сервера. Есть ли простой способ добиться того же эффекта в Twig?

, например

templates/template.html 
img/logo.png

выходы * * 1016

<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 ]

3 голосов
/ 19 августа 2011

Путь в атрибуте src - это относительный URL-адрес, а не относительный путь к файловой системе на вашем сервере, способ организации файлов в ваших каталогах.

Относительный URL-адрес будет разрешенк базовому URL документа, в который будет входить / присутствовать шаблон. Таким образом, вы можете использовать относительные URL, но вам нужно знать, к чему они относятся, чтобы они правильно работали.

В вашем случае aБыстрое решение может заключаться в использовании

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

Если ваш веб-сайт находится в корне сети.

Другим способом является использование функции шаблона, которая заботится о создании (относительного) URL в соответствии сна запрошенный путь URL.Другой подход заключается в жестком кодировании <base> href Документов в общем шаблоне.

Другой альтернативой является получение выходных данных.из обработанных шаблонов, проанализируйте ссылки и сделайте их подходящими.

Но важная часть заключается в том, что вам нужно знать о запрошенном пути URL-адреса в частности и о том, как используется ваш шаблон (блоки).

2 голосов
/ 28 сентября 2011

С абсолютным путем, как сказал Иосиф:

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

Вы можете видеть изображения, только если ваш веб-сайт имеет корневой URL-адрес как

http://localhost/

не будет работать на

http://localhost/myApp/

так что в этом случае вам нужно создать хост для него

http://myApp/

Шаблон - это WYSIWYG, когда вы можете видеть, как он выглядит в вашем браузере или в html-редакторе, поэтому в основном это шаблоны, которые используют относительные пути.

У RainTPL появилась отличная идея автоматически заменить относительные пути шаблонов на правильный путь сервера (относительный или абсолютный), чтобы вы сразу могли видеть, как выглядит ваш шаблон.

Другим очень хорошим способом использования шаблонов WYSIWYG является тег , который позволяет вам использовать относительные пути. Единственная проблема - это перекрестный просмотр и Javascript, потому что не очень понятно, работает ли он одинаково в все они.

1 голос
/ 10 июля 2013
<img src="{{ asset('img/my_image.gif') }}" alt="something" />

Путь к активу будет преобразован в каталог / web.В моем примере полный путь проекта для изображения будет:

Project/web/img/my_image.gif

. Для использования этого метода вам нужно будет использовать расширение .twig.

...