■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。
このフォーラムは閲覧専用のアーカイブです。

フィードにブログタイトルやカテゴリタイトルを表示させたい

umeboshi > フィードにブログタイトルやカテゴリタイトルを表示させたい @ 2011/6/1 15:56
BaserCMS 1.6.10 を利用しています。
フィードの日付が入っている隣り辺りに、対象となるカテゴリタイトルを表示させたいと考えています。
欲を言うと、さらにそこからカテゴリ一覧ページにリンクさせたいと考えています。
このようなことは可能でしょうか?

app\webroot\themed\○○○\feed\default.ctp
以下本文

<?php
/**
 * フィード
 */
$feed->saveCachetime();
?>
<cake:nocache>
	<?php $feed->cacheHeader() ?>
</cake:nocache>
<?php if(!empty($items)): ?>

<ul class="feed">
	<?php foreach($items as $key => $item): ?>
		<?php $no = sprintf('%02d',$key+1) ?>
		<?php if($key == 0): ?>
			<?php $class = ' class="clearfix first feed'.$no.'"' ?>
		<?php elseif($key == count($items) - 1): ?>
			<?php $class = ' class="clearfix last feed'.$no.'"' ?>
		<?php else: ?>
			<?php $class = ' class="clearfix feed'.$no.'"' ?>
		<?php endif ?>
	<li<?php echo $class ?>><span class="date"><?php echo date("Y年m月d日 H:i",strtotime($item['pubDate']['value'])); ?></span><br />
		<span class="title"><a href="<?php echo $item['link']['value']; ?>"><?php echo $item['title']['value']; ?></a></span></li>
	<?php endforeach; ?>
</ul>
<?php else: ?>
<p class="t-center">―</p>
<?php endif; ?>


現状このような形で作成しています。ご教示いただければ幸いです。
ryuring > Re: フィードにブログタイトルやカテゴリタイトルを表示させたい @ 2011/6/1 20:36
こんばんわ。

フィードプラグインでトップの新着を出力していると思うのですが、基本的に、RSSフィードは、カテゴリ名称は含みますが、カテゴリページへのリンク情報は含みません。

カテゴリ名だけでよい場合は、

<?php echo $item['category']['value']; ?>


で出力できますがURLは取得できません。

BaserCMS 1.6.11 より、同サイト内のブログ情報は、RSSフィード経由ではなく、DBより直接出力できるようになり、デフォルトのデモテーマでもそちらを利用する事になりました。

出力用のタグは、

<?php $baser->blogPosts('news', 5) ?>


のような感じとなり、

テンプレートの場所は、

baser/plugins/blog/views/blog/default/posts.ctp


となります。
※ こちらをテーマ内にコピーして使います

このテンプレート内で、

<?php $blog->category($post) ?>


と書けばカテゴリ一覧へのリンクが出力されます・・・・・・の予定だったのですが、
ちゃんとカテゴリが表示される為には一箇所コアの修正が必要でした(汗

baser/plugins/blog/controllers/blog_controller.php の 611行目

	'recursive'	=> 0)


を

	'recursive'	=> 1)


としてください。

このコアの修正は、本体へもフィードバックします。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

ryuring > Re: フィードにブログタイトルやカテゴリタイトルを表示させたい @ 2011/6/1 20:45
すんまっせん、もう一箇所修正が必要でした。。

baser/plugins/blog/views/helpers/blog.php の261行目あたりに、getCategoryUrlというメソッド(関数)があるのですが、
そちらを次のコードに差し替えて下さい。

	function getCategoryUrl($blogCategoryId) {

		if (!isset($this->BlogCategory)) {
			$this->BlogCategory =& ClassRegistry::init('BlogCategory','Model');
		}
		$categoryPath = $this->BlogCategory->getPath($blogCategoryId);
		$blogContentId = $categoryPath[0]['BlogCategory']['blog_content_id'];
		$this->setBlogContent($blogContentId);
		$blogContentName = $this->blogContent['name'];
		
		$path = array('category');
		if($categoryPath) {
			foreach($categoryPath as $category) {
				$path[] = $category['BlogCategory']['name'];
			}
		}
		$url = Router::url(am(array('admin'=>false,'plugin'=>'','controller'=>$blogContentName,'action'=>'archives'),$path));
		return str_replace(preg_replace('/^\//','',baseUrl()),'',$url);

	}

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

umeboshi > Re: フィードにブログタイトルやカテゴリタイトルを表示させたい @ 2011/6/3 19:19
ご教示頂きありがとうございます。早速バーションを最新(1.6.11.4)にしてみました。
サイト内のブログでしたので2番目の方法を試してみたところ、無事カテゴリもリンク付きで表示され、動作もだいぶ早くなりました。

トップページにて
<?php $baser->js('/feed/ajax/1') ?>

と書いてあるところを
<?php $baser->blogPosts('news', 5) ?>
<?php $baser->blogPosts('activity', 5) ?>

に置き換えました。

ただこれだと複数のブログをまとめた新着5件の表示が出来なくなってしまいますが、何か対処方法はありますか?
元々2つのフィードを1か所に読み込ませていたもので…。
質問違いでしたらすみません。
出来ないようでしたら1番目の方法(リンクなし)を試してみようかと思っています。
よろしくお願いします。
ryuring > Re: フィードにブログタイトルやカテゴリタイトルを表示させたい @ 2011/6/3 19:47
こんばんは。

引用:
ただこれだと複数のブログをまとめた新着5件の表示が出来なくなってしまいますが、何か対処方法はありますか?


この場合の対処法は今のところないですね〜。。

また、$baser->blogPosts をトップに貼りつけた場合、ブログ記事を更新した際に、サーバーキャッシュが邪魔をして即座に反映されないという問題も見つかってしまいました。
http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=327&forum=5

現在の最新版(1.6.11.4)の仕様だとブログ記事を更新した後、サーバーキャッシュを手動で削除しなければならなくなりました。
この辺の問題が解決するまで、$baser->js を使われる事をおすすめします。


なお、カテゴリへのリンクはこんな感じで張れるかと思います。
DBから直接カテゴリデータを取得して、フィードのカテゴリ名をURLで利用できる値に変換しています。

// 行頭に記述
<?php
$BlogCategory = ClassRegistry::init('Blog.BlogCategory');
$categories = $BlogCategory->find('list', array(
	'fields' => array('name', 'title'),
	'conditions' => array('blog_content_id' => 1),
	'recursive' => -1
));
?>

// foreach 内で記述
<?php $categoryName = array_search($item['category']['value'], $categories) ?>
<?php if($categories) $baser->link($item['category']['value'], '/news/archives/category/'.$categoryName) ?>


動作確認してませんが取り急ぎ。。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

umeboshi > Re: フィードにブログタイトルやカテゴリタイトルを表示させたい @ 2011/6/6 12:41
$baser->js にて実現することができました!PHPはコピペするしか能がないので非常に助かりました。

app\webroot\themed\○○○\feed\default.ctp
以下本文

<?php
/**
 * フィード
 */
$feed->saveCachetime();
?>
<cake:nocache>
	<?php $feed->cacheHeader() ?>
</cake:nocache>
<?php if(!empty($items)): ?>

<?php
$BlogCategory = ClassRegistry::init('Blog.BlogCategory');
$categories = $BlogCategory->find('list', array(
	'fields' => array('name', 'title'),
	'conditions' => array('blog_content_id' => 1),
	'recursive' => -1
));
?>

<ul class="feed">
	<?php foreach($items as $key => $item): ?>
		<?php $no = sprintf('%02d',$key+1) ?>
		<?php if($key == 0): ?>
			<?php $class = ' class="clearfix first feed'.$no.'"' ?>
		<?php elseif($key == count($items) - 1): ?>
			<?php $class = ' class="clearfix last feed'.$no.'"' ?>
		<?php else: ?>
			<?php $class = ' class="clearfix feed'.$no.'"' ?>
		<?php endif ?>
	<li<?php echo $class ?>>
		<span class="date"><?php echo date("Y年m月d日 H:i",strtotime($item['pubDate']['value'])); ?></span>&nbsp;
		<?php $categoryName = array_search($item['category']['value'], $categories) ?>
		<?php if($categories) $baser->link($item['category']['value'], '/news/archives/category/'.$categoryName) ?></span><br />
		<span class="title"><a href="<?php echo $item['link']['value']; ?>"><?php echo $item['title']['value']; ?></a></span>
	</li>
	<?php endforeach; ?>
</ul>
<?php else: ?>
<p class="t-center">―</p>
<?php endif; ?>

しばらくこれで行ってみようと思います。回答頂きありがとうございました!