Silverstripe中的数据对象:从Wordpress数据库中获取数据



抱歉,如果这是一个简单的,我得到我的头在Silverstripe数据对象是如何工作的

我的任务是从我们网站上的wordpress博客(当前在/blog上)获取帖子列表,并在页脚显示最近的帖子,在另一种情况下,显示某些编辑在其页面上的帖子。

我已经看到了手册页的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

得到的错误是:

[用户错误]坏类到singleton()

这将返回一个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 %>

最新更新