2011-10-15 3 views
0

사과 간단한 경우, Silverstripe에서 데이터 객체가 작동하는 방식에 대해 머리 숙여하고 있습니다.Silverstripe의 Data 객체 : 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 게시물 (이 경우 최신 3)의 DataObjectSet을 반환합니다. 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 %>