>  기사  >  웹 프론트엔드  >  Thinkphp 템플릿이 is_javascript 스킬 그대로 파싱하여 직접 출력하지 못하는 문제 해결

Thinkphp 템플릿이 is_javascript 스킬 그대로 파싱하여 직접 출력하지 못하는 문제 해결

WBOY
WBOY원래의
2016-05-16 16:32:323406검색

본 글의 예시에서는 Thinkphp 템플릿이 파싱되지 않고 그대로 출력되는 문제에 대한 해결방법을 설명하고 있습니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.

1. 질문:

최근에 thinkphp 템플릿을 배우고 있는데, 템플릿 페이지가 그대로 나오더군요. 열심히 검색한 끝에 드디어 해결 방법을 찾았습니다.

2. 해결책:

많은 사람들이 동일한 문제를 겪었습니다. 변수에 할당된 문자열에 포함된 __ROOT__, __PUBLIC__, __APP__은 템플릿에 표시될 때 실제 경로로 대체됩니다. Timi 파일 관리 시스템을 작성하는 동안 이 문제를 발견했습니다.

파일에서 소스 코드를 읽고 페이지에 출력한 결과 TP 경로 문자인 한 실제 경로로 대체된 것을 발견했습니다.
예:

코드 복사 코드는 다음과 같습니다.
$this->ass('fileContent',$ fileContent); //$fileContent에는 __PUBLIC__ "경로 상수" 문자가 포함되어 있습니다.


페이지가 출력된 후에는 실제 경로 /public/으로 표시됩니다.
이 기간 동안 할당 시 base64 암호화, 템플릿 출력 시 디코딩 등 여러 가지 시도를 해보았으나 실패했습니다. 마지막으로 Tp의 소스 코드를 살펴보지 않을 수 없었고, 표시 메소드의 마지막 단계에서 태그 메소드를 호출하여 "Tp 경로 상수"가 실제 경로로 대체되었음을 발견했습니다. 렌더링 방법 이전에는 모든 것이 정상입니다.

원래 어린이 신발에 대한 다음 솔루션을 구현하기 위해 소스 코드를 변경할 계획이었습니다.
사장님, 이게 일시적인 해결책인가요, 아니면 최종적인 해결책인가요?
하지만 Assign() 메소드에 판단을 추가하는 것도 나쁘지 않다고 생각합니다.
$this->sign('','',false)인 경우 내용은 교체되지 않고 그대로 출력됩니다.

결과적으로 이 소스코드를 읽어보니 그게 쉽지 않고 변경사항이 너무 크다는 걸 깨달았습니다.

최종 해결책을 지적한 다른 어린이의 마지막 답변:

"여기에서 내용을 참조할 수 있습니다: http://www.jb51.net/article/54217.htm(템플릿 교체)

템플릿 교체 규칙을 사용하면 페이지의 모든 __PUBLIC__ 문자열이 교체됩니다. 실제로 __PUBLIC__ 문자열을 템플릿에 출력해야 하는 경우 교체 규칙을 추가할 수 있습니다. 예:

코드 복사 코드는 다음과 같습니다.
'TMPL_PARSE_STRING' =>array(
'--PUBLIC--' => '__PUBLIC__', // /Public 문자열을 출력하는 데 새로운 규칙을 사용합니다
)

이런 식으로 대체 규칙을 추가한 후 __PUBLIC__ 문자열을 출력하려면 템플릿에 --PUBLIC--만 추가하면 됩니다. 다른 대체 문자열의 출력 방법도 비슷합니다.

이런 방식으로 대체 규칙을 추가한 후 __PUBLIC__ 문자열을 출력하려면 템플릿에 --PUBLIC--만 추가하면 됩니다. 다른 대체 문자열의 출력 방법도 비슷합니다.

그래서 계획이 공개되었습니다.

Tp의 구성 파일 config.php에서 구성

코드 복사 코드는 다음과 같습니다.
'TMPL_PARSE_STRING' => 배열(//경로 구성
                         
//티미 파일 경로 복원
'--PUBLIC--' => '__PUBLIC__',
'--APP--' => '__APP__',
'--URL--' => '__URL__',
'--ACTION--' => '__ACTION__',
'--SELF--' => '__SELF__',
'--INFO--' => '__INFO__',
'--EXT--' => '__EXT__'
),

소스 코드를 읽을 때 "경로 상수 문자" __ROOT__를 --ROOT--로 바꾸세요.

코드 복사 코드는 다음과 같습니다.
$fileContent=file_get_contents($filePath)
$fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

그러면 아래 그림과 같이 템플릿이 구문 분석될 때 TMPL_PARSE_STRING 구성이 대체됩니다.

이후 이 문제는 '일시적으로', '완벽하게' 해결되었습니다.

이 글이 모든 분들의 ThinkPHP 프레임워크 프로그래밍에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.