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

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

tomato > Re: 取得した複数のブログ記事を日付順にならべたい @ 2015/8/27 17:28
ありがとうございます!!
できました!!
長々、いろいろご指導ありがとうございました!!
助かりました!!!

いただいた通り、default.php に
以下と記載することで取得できました。
が、画像だけ、この記述だと記載できなかったので、少し変更したらできました。



<?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
if ($posts):
foreach ($posts as $key => $post):
//記事のブログnameの取得
$blogName = $post["BlogContent"]["name"];
$baseCurrentUrl = "/".$blogName . '/archives/';
//記事のファイルアップロードディレクトリ
$baseCurrentImgUrl = "/files/blog/".$blogName . "/blog_posts/";
//記事のURL
$postLink = $this->BcBaser->getUrl($baseCurrentUrl.$post['BlogPost']['no'],true);
if($post["BlogPost"]["eye_catch"]){
// アイキャッチ画像のパス
$eyeCatch = $baseCurrentImgUrl . $post["BlogPost"]["eye_catch"];
// アイキャッチ画像を別サイズで利用する場合は文字列置換
// $eyeCatch = str_replace(".jpg","__mobile_thumb.jpg", $eyeCatch);
// $eyeCatch_m = str_replace(".jpg","__thumb.jpg", $eyeCatch);
} else {
// アイキャッチが指定されてなかった場合
$eyeCatch = "/img/no-photo.png";
}
?>
<div class="post">
<a href="<?php echo $postLink; ?>">
<figure>
<img src="<?php echo $eyeCatch; ?>" alt="">
</figure>
<h2><?php $this->Blog->postTitle($post,false) ?>
<p><?php
// $post['BlogPost']['content'] //概要
// $post['BlogPost']['detail'] //本文
echo $post['BlogPost']['content'];
?>
</p>
</a>
</div>
<?php endforeach; ?>
<?php else: ?>
<p class="no-data">記事がありません


<?php endif ?>

<?php endif ?>


アイキャッチ画像をリンク付きで取得する記述に変えて、以下だと画像が取得できました。


<?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
if ($posts):
foreach ($posts as $key => $post):
//記事のブログnameの取得
$blogName = $post["BlogContent"]["name"];
$baseCurrentUrl = "/".$blogName . '/archives/';
//記事のファイルアップロードディレクトリ
$baseCurrentImgUrl = "/files/blog/".$blogName . "/blog_posts/";
//記事のURL
$postLink = $this->BcBaser->getUrl($baseCurrentUrl.$post['BlogPost']['no'],true);
if($post["BlogPost"]["eye_catch"]){
// アイキャッチ画像のパス
$eyeCatch = $baseCurrentImgUrl . $post["BlogPost"]["eye_catch"];
// アイキャッチ画像を別サイズで利用する場合は文字列置換
// $eyeCatch = str_replace(".jpg","__mobile_thumb.jpg", $eyeCatch);
// $eyeCatch_m = str_replace(".jpg","__thumb.jpg", $eyeCatch);
} else {
// アイキャッチが指定されてなかった場合
$eyeCatch = "/img/no-photo.png";
}
?>
<div class="post">
<a href="<?php echo $postLink; ?>">
<?php $this->Blog->postLink($post, $this->Blog->getEyeCatch($post, array('link' => false)));?>

<h2><?php $this->Blog->postTitle($post,false) ?>
<p><?php
// $post['BlogPost']['content'] //概要
// $post['BlogPost']['detail'] //本文
echo $post['BlogPost']['content'];
?>
</p>
</a>
</div>
<?php endforeach; ?>
<?php else: ?>
<p class="no-data">記事がありません


<?php endif ?>

<?php endif ?>

スマート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で装飾する必要がありそうですが)
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/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/26 14:25
ご返信ありがとうございます。
すいません。ちょっと記載の仕方が悪くて、、、
エディター内に記載のタグに関しては、毎回、全部入れ替えているので、
添付のような感じで、質問に記載しているタグしか記載がないのですが、

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

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


スマート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 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/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/25 14:34
ご返信ありがとうございます。

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

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

スマート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」の数字を入れて試してみてください。
ログイン
ユーザー名:
パスワード:


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

検索

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

フォーラムガイド


関連リンク

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

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