2011-08-19 5 views
1

Twig 템플릿 엔진에서 템플릿 저장 위치를 ​​기준으로 경로를 사용하는 방법이 있는지 궁금합니다.PHP : 나뭇 가지 : 이미지의 상대 경로?

내 응용 프로그램이 fileadmin /에서는 MyApplication에 상주하는 TYPO3의 웹 사이트가 다음과 같이

시나리오입니다. JSON 파일에서 동적으로로드되는 다국어 컨텐츠를 렌더링하기 위해 템플릿 엔진으로 Twig를 사용하고 있습니다. 일부 템플릿 파일에는 Typo3의 특성상 fileadmin/myApplication/img /의 src 경로가 있어야하는 이미지 경로가 포함되어 있습니다 ...

이제 새 버전의 my 응용 프로그램, 템플릿 파일 내 이미지의 경로를 변경하지 않고 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

src 속성의 경로는 상대 URL이 아닌 파일에 대한 상대 파일 경로입니다 시스템에서 파일을 디렉토리 안에 정리하는 방법에 대해 설명합니다.

상대 URL은 템플릿이 존재하거나 존재하는 문서의 기본 URL로 확인됩니다. 따라서 상대 URL을 사용할 수 있지만 관련 URL을 사용할 수는 있지만 관계가 올바로 작동하는지 확인해야합니다. 귀하의 경우에는

빠른 솔루션은 웹 사이트가 웹 루트에있는 경우

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

를 사용하는 수 있습니다.

또 다른 방법은 요청 된 URL 경로에 따라 (상대적) URL을 작성하는 데주의를 기울이는 템플릿 함수를 사용하는 것입니다. 또 다른 접근법은 전체 템플릿에 <base> href Docs을 하드 인코딩하는 것입니다.

또 다른 방법은 렌더링 된 템플릿의 출력을 가져 와서 링크를 구문 분석하고 수정하는 것입니다.

하지만 중요한 부분은 요청한 URL 경로와 템플릿 (블록) 사용 방법에 대해 알아야한다는 것입니다.조셉 절대 경로로

+0

hakre, 답장을 보내 주셔서 감사합니다. 내보기가 지나치게 단순화 된 것 같습니다. 편집 된 답변에서 좀 더 자세하게하려고 노력할 것입니다. –

+0

편집 된 답변을 확인했지만 변경되지 않았습니다. 나는 그것이 당신을 위해 작동하지 않는 것을보십시오. 먼저 URL의 용도와 상대 URL의 작동 방식을 이해해야합니다. IIRC Typo3는 이미''를 사용하고 있습니다. (또는 typo3 프로젝트에서 자주 발생합니다.) – hakre

+0

실제로 rain.tpl에 대한 링크를 보았습니까? URL에 관한 것이 실제로 도움이되지는 않습니다. –

2

는 말했다 : 당신의 웹 사이트가

http://localhost/ 

같은 루트 URL에있는 경우에만

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

당신이

http://localhost/myApp/ 
에서 작동하지 않습니다 이미지를 볼 수 있습니다

이 경우 호스트를 만들어야합니다.

http://myApp/ 

템플릿은 브라우저 또는 HTML 편집기에서 보이는 모양을 볼 때 WYSIWYG이므로 기본적으로 상대 경로를 사용하는 모든 템플릿입니다.

RainTPL은 템플릿의 상대 경로를 올바른 서버 경로 (상대 또는 절대)로 자동 바꾸기 때문에 템플릿이 어떻게 보이는지 즉시 알 수 있습니다.

WYSIWYG 템플릿을 사용하는 또 다른 좋은 방법은 상대 경로를 사용할 수있게 해주는 < 기본 href = "http : // localhost/myApp /"> 태그입니다. 크로스 브라우징과 자바 스크립트 만 문제가됩니다. 왜냐하면 모두 똑같이 작동한다면 명확하지 않기 때문입니다.

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

자산 경로는/web 디렉토리로 해석됩니다. 예를 들어 이미지의 전체 프로젝트 경로는 다음과 같습니다.

Project/web/img/my_image.gif 

이 방법을 사용하려면 .twig 확장자를 사용해야합니다.