2011-10-15 118 views
0

如果這是一個簡單的道歉,我會首先回顧一下數據對象如何在Silverstripe中工作。Silverstripe中的數據對象:從Wordpress數據庫中獲取數據

我的任務是從我們網站的wordpress博客(當前在/博客)上獲取帖子列表,並在頁腳中顯示最近的帖子,在另一種情況下,某些編輯在他們的頁面上顯示帖子。

我已經看到了SqlQuery的手冊頁,但是每當我嘗試使用它時我都會收到錯誤消息。我正在使用的代碼是基於例子,看起來是這樣的:

$sqlQuery = new SQLQuery(); 
    $sqlQuery->select = array(
     'post_title', 
     'post_content', 
     'post_name' 
    ); 
    $sqlQuery->from = array(" 
     wp_posts 
    "); 
    $sqlQuery->where = array(" 
     post_status = 'publish' 
    "); 
    $sqlQuery->orderby = " 
     post_date DESC 
    "; 
    // $sqlQuery->groupby = ""; 
    // $sqlQuery->having = ""; 
    // $sqlQuery->limit = ""; 
    // $sqlQuery->distinct = true; 

    // get the raw SQL 
    $rawSQL = $sqlQuery->sql(); 

    // execute and return a Query-object 
    $result = $sqlQuery->execute(); 
    $myDataObjectSet = singleton('wp_posts')->buildDataObjectSet($result); 
    var_dump($myDataObjectSet->First()); // DataObject 

我得到的錯誤是:

[用戶錯誤]階級成分不好獨居() - wp_posts

回答

1

這將返回一個WordPress主題的DataObjectSet(本例中是最新的3)。假設WordPress位於與SilverStripe相同的數據庫中。

function LatestPosts() { 
    $sqlQuery = new SQLQuery(); 
    $sqlQuery->select("post_title", "post_content"); 
    $sqlQuery->from("wp_posts"); 
    $sqlQuery->where("post_status = 'publish'"); 
    $sqlQuery->orderby("post_date DESC"); 
    $sqlQuery->limit(3); 

    if ($result = $sqlQuery->execute()) { 
     $wp_posts = new DataObjectSet(); 
     foreach($result as $row) { 
      $wp_posts->push(new ArrayData($row)); 
     } 
     return $wp_posts; 
    } 

    return; 
} 

然後,您可以迭代您的模板中的DataObjectSet。

<% if LatestPosts %> 
    <% control LatestPosts %> 
     <h3>$post_title</h3> 
     <div>$post_content</div> 
    <% end_control %> 
<% end_if %>