Dataobject в 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 () - wp_posts


person Don H    schedule 15.10.2011    source источник


Ответы (1)


Это вернет вам DataObjectSet ваших сообщений WordPress (в данном случае последние 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 %>
person ryanwachtl    schedule 16.10.2011