2011-03-05 33 views
0

PHP代碼:問題,PHP和模板

class build { 

     function panel() { 

    $dummy="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum velit ultricies orci pharetra elementum. In massa mauris, varius sed tempus a, iaculis sed erat. Ut sollicitudin tellus mollis arcu laoreet semper. Suspendisse ut felis odio. Aliquam auctor, tortor sit amet suscipit elementum, nunc ante dictum lectus, ac accumsan justo nunc sed velit. Sed sollicitudin varius tortor vitae varius. Aliquam interdum, nisl consectetur laoreet commodo, metus massa sagittis nisl, non venenatis lacus mi nec tortor. Ut malesuada auctor dolor, id pulvinar est malesuada sed. Aliquam sed posuere orci. Proin porttitor euismod condimentum. Integer suscipit nibh nec augue facilisis ut commodo nisi ornare. Nam sed mauris vitae justo convallis placerat. Curabitur viverra, ipsum id volutpat sollicitudin, mi nisi condimentum nulla, nec dapibus velit libero eget orci. Nam purus lectus, imperdiet pharetra pulvinar ac, sodales sit amet sem. Ut vel mollis ante. Vivamus consectetur varius risus eu hendrerit. Sed scelerisque euismod leo, quis accumsan justo venenatis eu. Ut risus lorem, aliquet id fermentum nec, auctor ut enim. Ut pretium elementum turpis vel dignissim."; 


     $columns=mysql_query('SELECT * FROM `column` ORDER BY id'); 
     while($column=mysql_fetch_array($columns)) 
     { 
      echo '<div class="column" id="column'.$column['id'].'" >'; 
      $items=mysql_query("SELECT * FROM widgets WHERE column_id='".$column['id']."' AND user='".$_COOKIE['id']."' ORDER BY sort_no"); 
      while($widget=mysql_fetch_array($items)) 
      { 
       echo ' 
       <div class="dragbox" id="item'.$widget['id'].'"> 
        <h2>'.$widget['title'].'</h2> 
         <div class="dragbox-content" '; 
       if($widget['collapsed']==1) 
        echo 'style="display:none;" '; 
       echo '> 
          '.$dummy.' 
         </div> 
       </div>'; 
      }    
      echo '</div>'; 
     } 

    } 

    } 


    $build_panel = new build(); 

,並把模板:

   $file = str_replace('{main_panel_window}', $build_panel, $file); 

錯誤:類生成的對象無法轉換爲字符串....在線47

如何解決問題?

+0

這很奇怪。我得到了'PHP解析錯誤:語法錯誤,意外的T_LOGICAL_AND ...第38行' – Oswald 2011-03-05 17:21:29

+0

@Oswald:你說得對,那很奇怪。他的代碼中沒有'T_LOGICAL_AND'標記。 – 2011-03-05 17:24:31

+0

@Tomalak T'是代碼格式錯誤。修復。 – Oswald 2011-03-05 17:30:08

回答

0

我認爲正確的代碼是:

class build { 

    function panel() 
    { 
     $dummy="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum velit ultricies orci pharetra elementum. In massa mauris, varius sed tempus a, iaculis sed erat. Ut sollicitudin tellus mollis arcu laoreet semper. Suspendisse ut felis odio. Aliquam auctor, tortor sit amet suscipit elementum, nunc ante dictum lectus, ac accumsan justo nunc sed velit. Sed sollicitudin varius tortor vitae varius. Aliquam interdum, nisl consectetur laoreet commodo, metus massa sagittis nisl, non venenatis lacus mi nec tortor. Ut malesuada auctor dolor, id pulvinar est malesuada sed. Aliquam sed posuere orci. Proin porttitor euismod condimentum. Integer suscipit nibh nec augue facilisis ut commodo nisi ornare. Nam sed mauris vitae justo convallis placerat. Curabitur viverra, ipsum id volutpat sollicitudin, mi nisi condimentum nulla, nec dapibus velit libero eget orci. Nam purus lectus, imperdiet pharetra pulvinar ac, sodales sit amet sem. Ut vel mollis ante. Vivamus consectetur varius risus eu hendrerit. Sed scelerisque euismod leo, quis accumsan justo venenatis eu. Ut risus lorem, aliquet id fermentum nec, auctor ut enim. Ut pretium elementum turpis vel dignissim."; 
     $return=""; 

     $columns=mysql_query('SELECT * FROM `column` ORDER BY id'); 
     while($column=mysql_fetch_array($columns)) 
     { 
      $return .= '<div class="column" id="column'.$column['id'].'" >'; 
      $items=mysql_query("SELECT * FROM widgets WHERE column_id='".$column['id']."' AND user='".$_COOKIE['id']."' ORDER BY sort_no"); 
      while($widget=mysql_fetch_array($items)) 
      { 
       $return .= ' 
       <div class="dragbox" id="item'.$widget['id'].'"> 
        <h2>'.$widget['title'].'</h2> 
         <div class="dragbox-content" '; 
       if($widget['collapsed']==1) 
        $return .= 'style="display:none;" '; 
       $return.= '> 
          '.$dummy.' 
         </div> 
       </div>'; 
      }    
      $return .= '</div>'; 
     } 
     // return the value 
     return $return; 
    } 

} 

並在您的模板文件中:

$build_panel = new build(); 
$file = str_replace('{main_panel_window}', $build_panel->panel(), $file); 
+0

不,$ build_panel-> panel()不會返回一個值。 – 2011-03-05 17:25:31

+0

我知道。所以我更新了它。 – ahmet2106 2011-03-05 17:27:54

0

變化

$file = str_replace('{main_panel_window}', $build_panel, $file); 

$file = str_replace('{main_panel_window}', $build_panel.panel(), $file); 
+0

不,panel()不返回一個字符串(或者實際上,任何東西)。 – 2011-03-05 17:22:07

+0

好的。 Adam Backstrom的答案要好得多,除非將示例更改爲追加到字符串而不是'echo'。 – mdm 2011-03-05 17:25:26

+0

......這絕對應該做。只有_very_很少應該有任何成員函數在其中有'echo'。 – 2011-03-05 17:26:42

0

的問題是錯誤說只是它是什麼:你試圖使用build對象像調用str_replace的字符串。

也許您需要a string conversion,或者您需要重新考慮爲什麼您要將build對象傳遞給str_replace

如果你意味着panel()返回一個字符串,然後使它返回一個字符串,而不是echo直接ING,然後寫:

$file = str_replace('{main_panel_window}', $build_panel.panel(), $file); 
0

您不能str_replace()這段代碼的寫法。我認爲你打算對$build_panel->panel()的輸出進行操作,但函數的回聲字符串是直接字符串,而不是構建模板輸出並將其作爲字符串返回。

因此,在一些output buffering中使用換行panel()或者讓它連接並返回一個字符串。