문제

Smarty와 PHP를 사용하고 있습니다. 템플릿이있는 경우 (파일 또는 문자열로) 파일/문자열을 구문 분석하고 해당 템플릿의 모든 스마트 변수가있는 배열을 반환 할 수있는 방법이 있습니까?

예 : 저는 다음과 같은 것을 원합니다.

$mystring = "Hello {$name}. How are you on this fine {$dayofweek} morning";
$vars = $smarty->magically_parse( $string );
// $vars should now be array( "name", "dayofweek" );

내가 이것을하고 싶은 이유는 사용자가 템플릿을 스스로 입력 한 다음 나중에 입력 할 수 있기를 원하기 때문입니다. 따라서이 템플릿에있는 변수 목록을 얻을 수 있어야합니다.

간단한 변수 만 수행한다고 가정 해 봅시다 (예 : 없음 "{$ object.method}"또는 "{$ varaible | function}") 다른 템플릿을 포함하지 않는다고 가정 해 봅시다.

도움이 되었습니까?

해결책 2

이 작업을 수행하는 내장 방법이없는 것 같습니다.

다른 팁

같은 것들에 숨겨진 변수가 필요한 경우 {if $var%2} 나는 이런 종류의 코드를 가지고 갈 것입니다.

preg_match_all('`{[^\\$]*\\$([a-zA-Z0-9]+)[^\\}]*}`', $string, $result);
$vars = $result[1];

그런 것들을 잡고 싶다면 다음과 같은 것을 잡으십시오. {if $var != $var2} 더 나은 버전은 다음과 같습니다

function getSmartyVars($string){
  // regexp
  $fullPattern = '`{[^\\$]*\\$([a-zA-Z0-9]+)[^\\}]*}`';
  $separateVars = '`[^\\$]*\\$([a-zA-Z0-9]+)`';

  $smartyVars = array();
  // We start by extracting all the {} with var embedded
  if(!preg_match_all($fullPattern, $string, $results)){
    return $smartyVars;
  }
  // Then we extract all smarty variables
  foreach($results[0] AS $result){
    if(preg_match_all($separateVars, $result, $matches)){
      $smartyVars = array_merge($smartyVars, $matches[1]);
    }
  }
  return array_unique($smartyVars);
}

일반적으로 나는 정규 표현에 반대하지만 이것은 나에게 유효한 경우처럼 보입니다. 당신은 사용할 수 있습니다 preg_match_all() 그렇게하려면 (당신이 같은 변수 만 원한다면 ${this}):

preg_match_all('\{\$(.*?)\}', $string, $matches, PREG_PATTERN_ORDER);
$variableNames = $matches[1];
{debug}

이 스레드가 오래되었음을 알고 있지만 이것은 내장 솔루션입니다.

나는 당신이 찾고있는 것이 디버깅 콘솔.

이 콘솔은 웹 페이지와 관련된 템플릿 내에서 사용되는 모든 변수를 보여줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top