■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

取得した複数のブログ記事を日付順にならべたい

tomato > 取得した複数のブログ記事を日付順にならべたい @ 2015/8/24 18:08
Feedプラグインを利用すると確かに簡単に複数ブログの記事が新着順に取得できたのですが、
Feedプラグイン上のテーマファイルで扱える記事一覧情報($items)には”eye_catch”など記事情報がなかったので、
他の方法を考えています。
添付の画像のような記事一覧をつくりたいです。

<?php $this->BcBaser->blogPosts('4', 3) ?>
<?php $this->BcBaser->blogPosts('3', 3) ?>
<?php $this->BcBaser->blogPosts('news', 3) ?>
<?php $this->BcBaser->blogPosts('test', 3) ?>


と記述すると思った通りのデザインにはなったのですが、ブログ内での新着になるので、
4つのブログをまぜた新着順にしたいです。

他の方のサンプルコードで試したのですが、すいません。PHPが詳しくないので、
An Internal Error Has Occurred.
となってしまいました。

http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1899&forum=5#forumpost7124
こちらの記事を参考にさせていただきました。

どこがおかしいのか、教えていただけますでしょうか?
以下エラーとなってしまったコード。

<?php
$posts = $blogPosts->find('all', array(
'conditions' => array_merge($blogPosts->getConditionAllowPublish(), array(
'blogPosts.blog_content_id' => array(news,test,3,4) //blog IDを指定
)),
'order' => array('blogPosts.posts_date DESC'), //並び順:日付順
'limit' => 3 //記事取得件数
));
?>


お手数ですが、よろしくお願いします。

スマートURL: OFF
レンタルサーバー名:ロリポップ
セーフモード:Off
データベース: SQLite
baserCMSバージョン: 3.0.7
CakePHPバージョン: 2.5.3
PHPスキル(自己評価):全くわからない

tecking > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/24 20:06
tomatoさん

未検証で恐縮ですが……

'blogPosts.blog_content_id' => array(news,test,3,4)

の array() 内は数値でないといけないのでは、と思います。

管理画面の[ブログ管理]−[ブログ一覧]に表示の「ブログアカウント」でなく「NO」の数字を入れて試してみてください。
tomato > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/25 14:34
ご返信ありがとうございます。

いただいた通り、数値にしてみたのですが、こちらも
エラーとなってしまいました。。。

すいません。
よろしくお願いします。

スマートURL: OFF
レンタルサーバー名:ロリポップ
セーフモード:Off
データベース: SQLite
baserCMSバージョン: 3.0.7
CakePHPバージョン: 2.5.3
PHPスキル(自己評価):全くわからない

tecking > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/25 23:29
ちょっと検証してみました。

$posts = $BlogPost->find('all', array(
    'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
        'BlogPost.blog_content_id' => array({blog ID が入ります}) //blog IDを指定
    )),
    'order' => array('BlogPost.posts_date DESC'), //並び順:日付順
  'limit' => 5 //記事取得件数
));

の上に

$BlogPost = new BlogPost();

の1行を入れてみてはどうでしょう?
tomato > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/26 11:39
ご返信ありがとうございます。
試してみたのですが、
An Internal Error Has Occurred.
となってしまいました。、、、

トップページに表示したいので、
固定ページ情報編集:Indexの
エディターをソースコードにして、そこに入力しているのがいけないのでしょうか?
※あまり関係ない気はしますが、、、

すいません。お手数ですが、よろしくお願いいたします。

以下、試したコードです。


<?php
$BlogPost = new BlogPost();
?>
<?php
$posts = $BlogPost->find('all', array(
'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
'BlogPost.blog_content_id' => array(1,2,3,4) //blog IDを指定
)),
'order' => array('BlogPost.posts_date DESC'), //並び順:日付順
'limit' => 3 //記事取得件数
));
?>





スマートURL: OFF
レンタルサーバー名:ロリポップ
セーフモード:Off
データベース: SQLite
baserCMSバージョン: 3.0.7
CakePHPバージョン: 2.5.3
PHPスキル(自己評価):全くわからない

tecking > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/26 13:43
うーん……ちょっと原因が見えなくなってきましたね……

原因切り分けのため、いったん今回挿入した一連のコードを削除してみて、それでもエラーが出るか確認されてはいかがでしょう?
コードをあれこれいじっているうちに、意外なところを間違って削除してしまっていたり、逆に重複する記述が出てしまったりしてるかもしれません。
tomato > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/26 14:25
ご返信ありがとうございます。
すいません。ちょっと記載の仕方が悪くて、、、
エディター内に記載のタグに関しては、毎回、全部入れ替えているので、
添付のような感じで、質問に記載しているタグしか記載がないのですが、

エディター内にPHPを記載するのにあたって特有の規定とか、
何かあるのかなぁとか思ったりしたので、、、

お手数ですが、よろしくお願いいたします。


スマートURL: OFF
レンタルサーバー名:ロリポップ
セーフモード:Off
データベース: SQLite
baserCMSバージョン: 3.0.7
CakePHPバージョン: 2.5.3
PHPスキル(自己評価):全くわからない

tecking > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/26 15:32
なるほど。記事の編集画面を「ソース」に切り替えて貼り付けられたのですね。

元のトピックである

複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい
http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1899&forum=5#forumpost7124
の中に

テーマファイルなら固定ページに限らずどのテーマファイルに書いても動作する、
テーマ内に直接記述する方法です。

とあるので、そもそも記事本文に貼り付ける想定のコードではないようです。
(試しに記事本文の「オプション」欄にも貼り付けてみましたが、やはりFatal Errorが出ました)

このコードを生かしつつ、トップページにだけ表示するようにするなら、/app/webroot/theme/{使用中のテーマ}/Layouts/default.php を開いて、baserCMSの関数 isHome() で切り分けるのも一案かと思いますが、それだと不都合があったりするでしょうか?

<?php if ($this->BcBaser->isHome()): ?>
	// トップページで表示させたいコードをここに書く
<?php endif; ?>


《関連Wiki》
関数リファレンス/BcBaser isHome
tomato > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/27 12:22
ご返信ありがとうございます。
default.php
に以下を記載してみましたところ、エラーとはなりませんでしたが、
何も表示されませんでした。


<?php if ($this->BcBaser->isHome()): ?>
<?php
$BlogPost = new BlogPost();
?>
<?php
$posts = $BlogPost->find('all', array(
'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
'BlogPost.blog_content_id' => array(1,2,3,4) //blog IDを指定
)),
'order' => array('BlogPost.posts_date DESC'), //並び順:日付順
'limit' => 3 //記事取得件数
));
?>

<?php endif ?>



= new BlogPost();をはずし、以下としてもやはり
何も表示されませんでした。



<?php if ($this->BcBaser->isHome()): ?>
<?php
$posts = $BlogPost->find('all', array(
'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
'BlogPost.blog_content_id' => array(1,2,3,4) //blog IDを指定
)),
'order' => array('BlogPost.posts_date DESC'), //並び順:日付順
'limit' => 3 //記事取得件数
));
?>

<?php endif ?>



引数の順番とか、指定に抜けとかがあるのでしょうか?
すいません。PHPがわからないので、お手数ですが、教えていただけますと幸いです。
よろしくお願いします。

スマートURL: OFF
レンタルサーバー名:ロリポップ
セーフモード:Off
データベース: SQLite
baserCMSバージョン: 3.0.7
CakePHPバージョン: 2.5.3
PHPスキル(自己評価):全くわからない

tecking > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/27 13:49
tomatoさん

<?php if ($this->BcBaser->isHome()): ?>
<?php
$BlogPost = new BlogPost();
$posts = $BlogPost->find('all', array(
    'conditions' => array_merge($BlogPost->getConditionAllowPublish(), array(
        'BlogPost.blog_content_id' => array(1,2,3,4) //blog IDを指定
    )),
    'order' => array('BlogPost.posts_date DESC'), //並び順:日付順
  'limit' => 3 //記事取得件数
));
?>
<?php endif ?>


お示しのコード(一部改変しました)だけでは、「もしトップページが表示されているなら、複数ブログの記事を横断して日付順で3件取得する」までの処理しかしないので、取得したデータを表示するためのコードが必要となります。

元トピックである

複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい

に示されている後半のコード「例)記事情報をアイキャッチ画像付きでループ」を、上記の

<?php endif ?>

の上に挿入すれば表示されるかとおもいますので、一度試してみてください。
(実際には、表示された記事タイトルなどに対して適宜CSSで装飾する必要がありそうですが)
ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
30 人のユーザが現在オンラインです。 (29 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 30