2014-09-06 6 views
0

저는 일부 사용자 지정 CMS를 기반으로 프로젝트를 진행하고 있는데, 여기서 사용자 지정 CMS는 호출 할 때 CMS 모듈에서 표시 블록을 반환합니다. 이 블록은 다른 파일에 정의한 사용자 정의 함수를 사용하여 그려집니다. 물론 ob_start()은 이미 CMS 자체에 사용되어 출력 문자열을 보존합니다. 이제 보시다시피, 특정 조건 (예 : 날짜)이 충족 될 때만 내부 블록 (CMS 모듈에 의해 호출되는 함수에 의해 그려 짐) 중 일부가 그려집니다. 따라서 호출 된 함수가 아무 것도 울리지 않으므로 블록 (div)의 외부 래퍼 만 그려지는 경우도 있습니다. 이제 함수가 어떤 것을 반향하는지 확인하여 해당 모듈을 편집하고 싶습니다.PHP에서 뭔가가 울려 있는지 확인하는 방법?

 $temp = ob_get_contents(); 
    ob_flush(); 
    ob_start(); 
    eval(trim($block->detail));//this is where custom function is called in module 
    $block = ob_get_contents(); 
    ob_flush(); 
    ob_start(); 
    echo $temp; 
    if($block) 
    { 
     echo $start.$block.$end;//$start and $end contains div wrapper html 
    } 

이유는이 VIEW 모듈이 서로 다른 조건에 따라 블록을 끌기 위해 동일한 구성 요소 내에서 여러 번 호출 될 것입니다 : 내 문제는 내가 이런 식으로 뭔가를 사용할 수 있다는 것입니다. 위의 작업을 수행하면서 이전에 echo 된 html을 (뷰 모듈이 호출되기 전에) 여러 번 그립니다. 나는 여전히 같은 HTML의 여러 번 울리는 것을 피하는 방법에 갇혀있다. 이 문제는 다소 복잡하지만 도움이 될 것입니다.

+0

당신을 여러 개의 ob_start()를 함께 중첩시킬 수 있습니다! – Gerifield

+0

공용 출력 버퍼링을 건너 뛰어도 될까요? – Sayed

+0

예! http://php.net/manual/en/function.ob-start.php "출력 버퍼는 스택 가능합니다. 즉, 다른 ob_start()가 활성화되어있는 동안 ob_start()를 호출 할 수 있습니다 .ob_end_flush() 적절한 횟수를 반환합니다. 여러 출력 콜백 함수가 활성 상태 인 경우 출력은 중첩 순서에 따라 순차적으로 필터링됩니다. " – Gerifield

답변

0

나는 진짜 대답을 여기에 쓸 것이다. 내가 말한 것처럼 여러 개의 ob_start()를 함께 중첩시킬 수 있습니다.

php.net 매뉴얼을 확인하십시오. http://php.net/manual/en/function.ob-start.php 경고 메시지가 표시된 후.

출력 버퍼는 스택 가능합니다. 즉, 다른 ob_start()가 활성화되어있는 동안 ob_start()를 호출 할 수 있습니다. 그냥 적절한 횟수만큼 ob_end_flush()를 호출했는지 확인하십시오. 여러 개의 출력 콜백 함수가 활성화되어 있으면 출력은 각각의 중첩 순서로 순차적으로 필터링됩니다.

그래서 코드가 될 수있다 :

ob_start(); 
eval(trim($block->detail)); 
$block = ob_get_contents(); 
ob_end_clean(); 
if($block){ 
    echo $start.$block.$end; 
} 

그리고 그 모든 것을, 당신은 중지하고 다시 출력 버퍼를 시작할 필요가 없습니다.

편집 :

또는 당신도 이런 식으로 ob_end_clean() (http://php.net/manual/en/function.ob-get-clean.php)

을 남길 수 있습니다 : 당신은 이전 산부인과를 _... 플러시 할 필요가 없습니다

ob_start(); 
eval(trim($block->detail)); 
$block = ob_get_clean(); 
if($block){ 
    echo $start.$block.$end; 
} 
+0

내가 체크하자 .. 그냥 분. – Sayed

+0

레이아웃이 왜곡되어 있거나 아마 뭔가를 놓치고있어 대답으로 표시 할 것입니다. :) – Sayed