Wolf CMSの子ページが取得できない

Wolf CMSをインストールしただけの状態にも関わらず、
なぜかArticlesの子ページが取得できないんです。
というより、children関数の戻り値が空の配列になってしまっています。

調べてみると、2011年2013年ごろに同様の質問がみつかりました。

どうやらPostgreSQLで発生する問題のようで、
ソースコードを見てみるとchildren関数が生成するSQL文がエラーになるために、
ただしく子ページを取得できないようです。

ERROR:  invalid input syntax for type timestamp: ""
LINE 1: ... 4 AND (status_id=100) AND (COALESCE(valid_until, '') = '' O...
                                                             ^

********** エラー **********

ERROR: invalid input syntax for type timestamp: ""
SQLステート:22007
文字:333

上記がchildren関数が発行するSQL文を、pgAdmin3で投げて返ってきたエラーです。

ちなみにchildren関数はwolf/app/models/Page.phpで定義されています。

public function children($args=null, $value=array(), $include_hidden=false) {

        // ...

        // Prepare SQL
        $sql = 'SELECT page.*, author.name AS author, author.id AS author_id, updater.name AS updater, updater.id AS updater_id '
                .'FROM '.TABLE_PREFIX.'page AS page '
                .'LEFT JOIN '.TABLE_PREFIX.'user AS author ON author.id = page.created_by_id '
                .'LEFT JOIN '.TABLE_PREFIX.'user AS updater ON updater.id = page.updated_by_id '
                .'WHERE parent_id = '.$this->id.' AND (status_id='.Page::STATUS_PUBLISHED.($include_hidden ? ' OR status_id='.Page::STATUS_HIDDEN : '').') '
                ." AND (COALESCE(valid_until, '') = '' OR '".date('Y-m-d H:i:s')."' < valid_until)"
                ."$where_string ORDER BY $order $limit_string $offset_string";

        // ...
}

上記のsql文を下記のように修正します。

public function children($args=null, $value=array(), $include_hidden=false) {

        // ...

        // Prepare SQL
        $sql = 'SELECT page.*, author.name AS author, author.id AS author_id, updater.name AS updater, updater.id AS updater_id '
                .'FROM '.TABLE_PREFIX.'page AS page '
                .'LEFT JOIN '.TABLE_PREFIX.'user AS author ON author.id = page.created_by_id '
                .'LEFT JOIN '.TABLE_PREFIX.'user AS updater ON updater.id = page.updated_by_id '
                .'WHERE parent_id = '.$this->id.' AND (status_id='.Page::STATUS_PUBLISHED.($include_hidden ? ' OR status_id='.Page::STATUS_HIDDEN : '').') '
        //      ." AND (COALESCE(valid_until, '') = '' OR '".date('Y-m-d H:i:s')."' < valid_until)"
                ."$where_string ORDER BY $order $limit_string $offset_string";

        // ...
}

SQL文を上記のように修正したところ、
Articlesの子ページは無事表示されるようになりました。

MySQLなら発生しないバグなのでしょうか X<


投稿日

カテゴリー:

投稿者:

タグ: