PHP: Twig: Относительные пути для изображений?
Хотите знать, есть ли способ использовать пути относительно места хранения шаблонов в шаблонизаторе Twig?
Сценарий таков:
У меня есть веб-сайт Typo3, где мое приложение находится в fileadmin/myApplication. Я использую Twig в качестве движка шаблонов для рендеринга многоязычного контента, который загружается динамически из файлов JSON. Некоторые из моих файлов шаблонов содержат пути к изображениям, которые, учитывая природу Typo3, должны иметь src-путь 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.
3 ответа
Путь в src
Атрибут - это относительный URL-адрес, а не относительный путь к файловой системе на вашем сервере, способ организации ваших файлов внутри каталогов.
Относительный URL-адрес будет преобразован в базовый URL-адрес документа, частью которого будет / является шаблон. Таким образом, вы можете использовать относительные URL-адреса, но вам нужно знать, к чему они относятся, чтобы они работали должным образом.
В вашем случае быстрое решение может быть использовать
<img src="/img/logo.png">
Если ваш сайт находится в веб-корне.
Другим способом является создание шаблонной функции, которая заботится о построении (относительного) URL-адреса в соответствии с запрошенным путем URL-адреса. Другой подход заключается в жестком кодировании <base>
href Документы в общем шаблоне.
Другой альтернативой является то, что вы получаете выходные данные отрендеренных шаблонов, анализируете ссылки и делаете их подходящими.
Но важная часть заключается в том, что вам нужно знать о запрошенном пути URL-адреса в частности и о том, как используется ваш шаблон (блоки).
С абсолютным путем, как сказал Иосиф:
<img src="/img/logo.png">
Вы можете видеть изображения, только если ваш сайт находится на корневом URL-адресе, как
http://localhost/
это не будет работать на
http://localhost/myApp/
так что в этом случае вам нужно создать хост для него
http://myApp/
Шаблон WYSIWYG, когда вы можете видеть, как он выглядит в вашем браузере или в html-редакторе, то есть, в основном, любые шаблоны, которые используют относительные пути.
У RainTPL была замечательная идея автоматически заменить относительные пути шаблонов на правильный путь сервера (относительный или абсолютный), чтобы вы могли сразу увидеть, как выглядит ваш шаблон.
Другим очень хорошим способом использования шаблонов WYSIWYG является тег
<img src="{{ asset('img/my_image.gif') }}" alt="something" />
Путь к активу будет преобразован в каталог /web. В моем примере полный путь проекта для изображения:
Project/web/img/my_image.gif
Вам нужно будет использовать расширение.twig, чтобы использовать этот метод.