2010-05-01 7 views
1

나는 이것을 할 수있는 PHP 파서를 찾고있다.PHP 템플릿 찾기 중첩 된 파서

{tag} Replace the tag with text coming from a function 

{tag(params)} It must support params 

{tag({tag(params)},{tag(params)})} It must support nesting 

{tag()? 

else 

} It must support Tests 

{$tag=value} It must support varriables 

누구나이 작업을 수행 할 수있는 파서를 알고 있습니까?

아니면 내가 어떻게 만들 수 있는지 알고 있습니다. 나는 이것을 preg과 함께 시도했지만, 중첩을 만드는 것은 불가능 해 보입니다.

Smarty는 약간 큰 것처럼 보입니다. 추가 기능을 모두 사용 중지 할 수 있는지 여부는 알 수 없습니다. 위에서 나열한 기능 만 필요합니다.

멋지게 PHP 코드를 작성할 수있어서 좋지 않습니다. {php} {/ php} 그래서 내가 그것을 사용하려고하면 나는 그것을 돌릴 수 있어야합니다.

CodeIgniter와 함께 사용하겠습니다.

답변

0

정규식에 중첩을 포함하려면 재귀 패턴 (? R)을 사용해야합니다. 이것은 전체 패턴과 일치합니다.

/{([^{}]*(?R))*[^{}]+}/

당신에 대해 읽을 수 있습니다 여기 (R을?) :

은} {바깥 쪽은이 같은 표현을 사용한다 (그 안에} 가능성이 {다른과) 텍스트 -s 확인하는 방법은 다음과 같습니다 http://pl2.php.net/manual/en/regexp.reference.recursive.php

거기에 제안 된 구조는 {((?>[^{}]+)|(?R))*}입니다. 내가 만든 것보다 더 효율적일지도 몰라.

0

나는 Smarty3와 함께 갈 것입니다. 왜 누군가가 이미 수년간 개발, 테스트 및 최적화를 해왔습니까?

Smarty3에서 {php} 태그는 기본적으로 사용되지 않습니다. 또한 security policies을 지원합니다. 여기서 PHP 함수 호출을 비활성화 할 수 있으며 사용자가 템플릿을 수정하도록 할 수 있습니다.

0

CodeIgniter는 빌트인 템플릿 기능을 도입하기 전에 이것을 아주 잘 수행했습니다. CodeIgniter 뷰 템플릿은 PHP로 간단하게 작성되었으므로 호출 구조, 함수 호출 등 원하는 PHP 기능을 자유롭게 사용할 수 있습니다.

Template Parser 대신 View을 사용하는 것이 좋습니다.