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

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

Garyuten > 複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい @ 2015/5/22 14:11
過去に数件、フォーラムにも投稿がありましたがその方法では解決できなかったので質問します。

複数のブログから新着記事を表示したい
http://forum.basercms.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=1346&forum=3
新着一覧に複数のブログからの記事を表示したい。
http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1482&forum=5#forumpost5573
公式wiki 複数のブログの記事を混ぜて表示させたい
http://wiki.basercms.net/%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E6%B7%B7%E3%81%9C%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84


目的は、よくある画像+テキストのスライドショーです。
各ブログ記事のアイキャッチ画像と記事タイトルをHOMEなどでスライドショーとして表示させたかった時に従来の手段では対応できませんでした。

複数のブログを表示させるには、フィードプラグインを使うのが常套手段になっていると思いますが、以下の問題が起きてきています。

・Feedプラグイン上のテーマファイルで扱える記事一覧情報($items)には”eye_catch”など記事情報が欠如している
・PHP上で処理し、HTMLで出力したい
 ・Ajax経由では読み込みに遅延が発生する。
 ・JSの読み込みタイミングなどの調整が必要
  Ajaxで読み込み終了後にスライドショーの処理を実行するように処理が必要であるが、
  この記述はコアファイルから/Feed/ajax.phpをコピーしてくる必要がある(webデザイナーには難易度が高い…)


なんとかテーマファイル上で、各ブログ記事情報をPHPで扱える連想配列等で取得する方法はないでしょうか?
取得さえできれば、PHP上でなんとか処理をできると思います(日付別に並べ替えるなど)

どうぞよろしくお願いします。

■ BaserCMSのバージョン: 3.0.7
■ レンタルサーバー名:lolipop
■ スマートURLの利用: ON
■ 設置フォルダ: ドキュメントルート
■ 利用しているデータベース: MySQL
■ PHPスキル(自己評価): C

p.s.

WordpressのWP_Queryとまでいかなくても、get postsのような記事取得関数が、baserCMSにもあれば助かります。
http://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts
goichi > Re: 複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい @ 2015/5/22 21:09
こんにちは(^^
ちょっとアイディアだけ&強引ですが、ヘルパーを作って解決する手法があるかもしれません。
テーマヘルパーの仕組みを利用して・・・

引用:
/app/webroot/theme/テーマ/Helper/

というフォルダを用意します。その中に「BlogExHelper.php」というファイルを作って、以下の内容を記載します。

<?php
//モデルの利用
App::import('Model', 'Blog.BlogPost');

/**
 * 記事取得拡張ヘルパー
 */
class BlogExHelper extends AppHelper {

/**
 * ブログの別に関わらず新着順にデータ取得する
 */
 public function getPostEx($limit = 10){
   //インスタンスの生成
   $blogPost = new BlogPost();
   //取得条件の設定
   $conditions = array(
     'BlogPost.status' => 1 //公開状態
   );
   //データの取得
   $posts = $blogPost->find('all', array(
     'conditions' => $conditions,
     'order' => array('BlogPost.id' => 'DESC'),
     'limit' => $limit
   ));
   //値を返す
   return $posts;
 }
}


引数に取得件数をとりますの、例えば5件欲しい時は、
$this->BlogEx->getPostEx(5)

として使います。出力はせず、連想配列でデータが返ってくると思います。

固定ページ内で使えると思いますが、ちゃんと試していません。。。。。
(すみません、でも、アイディア的には間違ってないと思います。)

参考までに投稿しておきます。


Garyuten > Re: 複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい @ 2015/6/3 14:18
goichiさん、回答ありがとうございます!
ヘルパーにあると確かに便利ですね!

今回、他の方法を教えてもらって無事解決できました。
テーマファイルなら固定ページに限らずどのテーマファイルに書いても動作する、
テーマ内に直接記述する方法です。

その時のコードを残しておきます。


▼複数ブログ記事の取得(テーマならどこでもOK)

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


▼例)記事情報をアイキャッチ画像付きでループ

<?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) ?></h2>
      <p><?php
      // $post['BlogPost']['content'] //概要
      // $post['BlogPost']['detail'] //本文
      echo $post['BlogPost']['content'];
      ?>
      </p>
    </a>
  </div>
  <?php endforeach; ?>
<?php else: ?>
  <p class="no-data">記事がありません</p>
<?php endif ?>
Tokitake > Re: 複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい @ 2015/11/12 16:24

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


$BlogPost = ClassRegistry::init('Blog.BlogPost');

が必要でした。一応メモ。
Garyuten > Re: 複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい @ 2015/11/13 17:23
@Tokitakeさん

ありがとうございます!!大事な1行を忘れておりました。助かりました。
Garyuten > Re: 複鐃緒申鐃塾ブワ申鐃緒申鐃塾居申鐃緒申鐃緒申鐃緒申鐃緒申鐃銃¥申鐃殉常申鐃緒申PHP鐃叔種申鐃緒申鐃緒申鐃緒申HTML鐃夙わ申鐃銃緒申鐃熟わ申鐃緒申鐃緒申 @ 2016/1/21 13:59
鐃緒申鐃緒申鐃緒申鐃塾フワ申鐃緒申鐃緒申鐃緒申鐃祝書かわ申鐃銃る記鐃述はワ申鐃緒申鐃獣ワ申鐃遵が鐃緒申鐃殉るた鐃潤、鐃緒申鐃術わ申鐃銃わ申鐃緒申鐃夙随申GB鐃塾ワ申鐃緒申鐃獣ワ申鐃遵が鐃緒申鐃殉るこ鐃夙わ申鐃緒か鐃緒申鐃殉わ申鐃緒申鐃緒申
鐃緒申鐃緒申鐃獣ワ申鐃緒申鐃薯オフにわ申鐃暑記鐃述わ申鐃宿加わ申鐃緒申鐃塾わ申鐃書いてわ申鐃緒申鐃殉わ申鐃緒申


<?php
/*
鐃緒申鐃瞬ワ申鐃緒申鐃叔醐申鐃緒申鐃緒申鐃瞬の居申鐃緒申鐃緒申鐃緒申鐃緒申
*/
$BlogPost = ClassRegistry::init('Blog.BlogPost');
$posts = $BlogPost->find('all', array(
    'conditions' => array_merge($BlogPost->getConditionAllowPublish()), // 鐃緒申鐃緒申鐃緒申鐃緒申
    'order' => array('BlogPost.posts_date DESC'), //
  'limit' => 10000,
  'cache' => false //鐃緒申鐃緒申鐃獣ワ申鐃緒申鐃熟ワ申鐃春わ申
));
?>


wiki鐃祝ワ申鐃緒申鐃竣ワ申鐃緒申鐃殉わ申鐃銃まとわ申鐃銃みまわ申鐃緒申
http://wiki.basercms.net/%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E6%B7%B7%E3%81%9C%E3%81%A6%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E3%83%86%E3%83%BC%E3%83%9E%E4%B8%8A%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%9F%E3%81%84
Garyuten > Re: 複数のブログの記事情報をテーマ上のPHPで取得してHTMLとして出力したい @ 2016/1/21 13:59
こちらのフォーラムに書かれてる記述はキャッシュが貯まるため、運用していると数GBのキャッシュが貯まることがわかりました。
キャッシュをオフにする記述を追加したのを書いておきます。


<?php
/*
全ブログで公開状態の記事を取得
*/
$BlogPost = ClassRegistry::init('Blog.BlogPost');
$posts = $BlogPost->find('all', array(
    'conditions' => array_merge($BlogPost->getConditionAllowPublish()), // 公開記事
    'order' => array('BlogPost.posts_date DESC'), //
  'limit' => 10000,
  'cache' => false //キャッシュはオフに
));
?>

ログイン
ユーザー名:
パスワード:


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

検索

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

フォーラムガイド


関連リンク

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

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