2015-01-14 2 views
0

일부 부분이 포함 된 콧수염 템플리트가 있습니다. 문자열에 포함 된 부분 문자열의 내용과 함께 PHP에서 문자열에 부분을로드하려고합니다. 하지만 템플릿을 파싱하지 않으려 고합니다. 콧수염 PHP로, 부분 파싱을하지만 태그를 파싱하지 않습니다.

예를 들어,이 콧수염 템플릿, myTemplate.mustache있는 경우 :

{{> partials/myPartial }} 
{{ my_text }} 

을하고이 partials/myPartial.mustache입니다 :

을 :

{{ my_header }} 

그때 내가 myTemplate.mustache을로드하고 PHP 변수 포함을 갖고 싶어

{{ my_header }} 
{{ my_text }} 

나는 th의 내용을 얻는 방법을 볼 수있다. e 템플릿은 new Mustache_Loader_Filesystem()->load()을 사용하지만 부분의 내용은 포함하지 않습니다.

답변

1

불가능하기 때문에 그렇게 할 방법이 없습니다. 콧수염 자체는 이와 같이 병합 된 템플릿을 다루지 않으므로 API를 가져올 이유가 없습니다.

부분적인 특성 때문에 부분 태그를 해당 템플릿의 내용으로 바꾸는 것만 큼 간단하지 않습니다. 예를 들어 partial은 구분 기호 변경 사항과 pragma를 포함하는 템플릿에서 상속하지 않으므로 해결해야합니다. 부분 태그도 포함하는 태그의 수준까지 들여 쓰기되므로 부분 태그를 부분 태그의 내용으로 바꾸면이 작업을 수행해야합니다.

정말로 원한다면 템플릿과 부분을로드 한 다음 Mustache Tokenizer를 사용하여 템플릿 소스의 partials 태그를 찾아 (재귀 적으로) 연관된 부분의 내용으로 바꿀 수 있습니다. 그런 다음 인라인 된 부분의 시작과 끝 부분에서 구분 기호를 변경하는 방법을 알아야합니다 (또는 구분 기호 변경을 완전히 금지합니다. 구문 분석 된 템플릿을 처리하는 중에 예외가 발생하면 예외를 throw 할 수 있습니다). 그리고 일단 추가되면 pragma를 제거하는 방법을 생각할 수 없으므로 pragma를 허용하지 않거나 모든 inlined partial이 부모 템플릿에 사용 된 pragma와 호환되는지 확인해야합니다.

최소의 것은 말할 것도없이 상당한 금액입니다.

+0

오 잘. 포괄적 인 답변에 많은 감사드립니다. –

+0

문제 없습니다. 특정 유스 케이스를 염두에두고 있다면 구체적으로 물어보십시오. 거기에 좋은 기회가 당신이 뭘 하려는지 얻을 수있는 또 다른 방법이있어 :) – bobthecow

+0

나는 이전 질문에 제기 된 문제를 해결하기 위해 노력했다 :) http://stackoverflow.com/questions/27927322/having-mustache- templates-both-render-and-not-laravel-blade-and-javascript 변수에 (평평하게 된) 템플릿을 가져 와서 그것을 '

관련 문제