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<