2014-09-06 93 views
0

我正在開發一個基於一些自定義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模塊稱爲相同的組件內多次繪製根據不同的條件塊。像上面所做的那樣,多次繪製以前回顯的html(在調用視圖模塊之前)。我仍然堅持如何避免同一個html的多次回顯。 我知道這個問題有點複雜,但任何幫助將非常感激。

+0

您不必刷新之前的OB _...,你可以將多個ob_start()一起嵌套! – Gerifield 2014-09-06 12:29:50

+0

會跳過緩衝已經緩衝的通用輸出嗎? – Sayed 2014-09-06 12:30:57

+0

是的! http://php.net/manual/en/function.ob-start.php 「輸出緩衝區是可堆疊的,也就是說,當另一個ob_start()處於活動狀態時,您可以調用ob_start(),只要確保調用ob_end_flush ()適當的次數,如果多個輸出回調函數處於活動狀態,那麼輸出將按照嵌套順序依次過濾。「 – Gerifield 2014-09-06 12:31:27

回答

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 2014-09-06 12:59:57

+0

佈局變得扭曲或可能我錯過了一些東西,所以我要把它標記爲答案.. :) – Sayed 2014-09-06 13:06:01

相關問題