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