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

index.phpのブログの記事をカテゴリごとに並べたい

saodozo > index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/12 11:31
saodozoと申します。

現在ブログのindex.phpは記事の一覧が表示されているのですが、
下記のようにindex.phpをカテゴリごとに並べたいです。
どのようにすればよろしいでしょうか?

--

カテゴリA

--
・A記事のコンテンツ1
・A記事のコンテンツ2
・A記事のコンテンツ3
--

カテゴリB

--
・B記事のコンテンツ1
・B記事のコンテンツ2
・B記事のコンテンツ3
--

カテゴリC

--
・C記事のコンテンツ1
・C記事のコンテンツ2
・C記事のコンテンツ3


現在のソースは

<?php if (!empty($posts)): ?>
	<?php foreach ($posts as $post): ?>
		<div class="service_box clearfix">
            <div>
			    <h4>
			        <?php $this->Blog->postTitle($post,false) ?>
			    </h4>
			    <?php $this->Blog->postServiceContent($post, false, true) ?>
        </div>
            <?php $this->Blog->eyeCatch($post) ?>

		<?php $this->BcBaser->element('blog_tag', array('post' => $post)) ?>
		</div>
	<?php endforeach; ?>
<?php else: ?>
	<p class="no-data">記事がありません。</p>
<?php endif; ?>

<!-- pagination -->
<?php $this->BcBaser->pagination('simple'); ?>


このようになっております。
出来ない場合、Blog->description() ?>で
ブログ名を取得して表示させようと並べようと考えておりますが、
もし、カテゴリごとに並べる方法があればお教えください。

よろしくお願い致します。

■ BaserCMSのバージョン: 3.0.5.1
■ レンタルサーバー名: ロリポップ
■ スマートURLの利用: ON
■ 設置フォルダ: ドキュメントルート
■ 利用しているデータベース: MySQL
■ PHP

n1215 > Re: index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/12 23:11
saodozo 様

元の$postsはもったいないですが放っておいて、BcBaserHelperのblogPosts()メソッドを利用するとよいでしょう。
http://basercms.net/reference_3/archives/31
第三引数の$options配列で
・ブログ記事のカテゴリの絞り込み
・ブログ記事表示に利用するテンプレートの名前の指定
などが可能です。

テンプレートの指定がない場合は、デフォルトでapp/webroot/theme/{テーマ名}/Blog/default/posts.phpが利用されます。
ただこちらのテンプレートはトップページの新着情報の表示に利用している事が多いでしょう。

同じディレクトリに好きな名前でブログ表示用のテンプレートを作って指定すると良いかと思います。

例)
	<h2>カテゴリA</h2>
	<?php $this->BcBaser->blogPosts('news', 5, array('category' => 'a', 'template' => 'myposts')) ?>
	<h2>カテゴリB</h2>
	<?php $this->BcBaser->blogPosts('news', 5, array('category' => 'b', 'template' => 'myposts')) ?>
	<h2>カテゴリC</h2>
	<?php  $this->BcBaser->blogPosts('news', 5, array('category' => 'c', 'template' => 'myposts')) ?>

※app/webroot/theme/{テーマ名}/Blog/default/myposts.phpを作成

もちろんforeachを利用してコードをすっきり短くまとめても構いません。

Twitter: @n_1215

sao > Re: index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/13 9:25
n1215様

ご返事ありがとうございます!
お教え頂いた通り、posts.phpをコピーして
表示用のテンプレートにカスタマイズしたところ、無事表示することができました。
ただ問題があって、
<?php $this->BcBaser->blogPosts('news', 5, array('category' => 'a', 'template' => 'myposts')) ?>

category名は日本語で付けていたらきちんと表示してくれませんでした。
英文にしたところ大丈夫だったのですが、日本語で、きちんと表示はできるんでしょうか?
n1215 > Re: index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/13 10:33
sao 様

「ブログカテゴリタイトル」は日本語も可能ですが、「ブログカテゴリ名」は半角英数字じゃないと正しく動作しないはずです。
編集画面で日本語を入力して保存しようとするとエラーが出ますし、ヘルプチップにもこうあります。
引用:
URLに利用されます
半角のみで入力してください


それともblogPosts()メソッドの引数にブログカテゴリ名ではなくブログカテゴリタイトルを使いたいということですか?
これは仕様なので簡単に変更はできません。

Twitter: @n_1215

sao > Re: index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/13 10:47
n1215様

そうなんですね。。
ブログカテゴリタイトルとして使用しようと考えておりました。
ブログタイトル名はhtml上で入力する形で対応します。
お教え頂きありがとうございます!

それと表示の際のブログ記事の並び順はデフォルトで登録した順番になっておりますが、
これを指定の順番に変更することは可能でしょうか?
n1215 > Re: index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/13 12:00
sao 様

マニュアルには載っていないみたいですが第三引数の$optionsに並び替え用のキーが用意されています。

http://basercms.net/reference_3/archives/31
https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/Plugin/Blog/View/Helper/BlogBaserHelper.php#L46-L56

'sort'     並び替えのキーとするフィールド名 指定しない場合は'posts_date'が適用される模様
'direction'  昇順('ASC')or 降順('DESC')の指定

となっているみたいです。

Twitter: @n_1215

sao > Re: index.phpのブログの記事をカテゴリごとに並べたい @ 2014/11/13 13:44
n1215様

無事解決いたしました!
毎回すごく分かりやすい説明ありがとうございます!

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


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

検索

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

フォーラムガイド


関連リンク

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

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