【環境情報】
・baserCMSのバージョン:3.0.9
・レンタルサーバー名:ロリポップ
・使用テーマ: ratio_3_2
・PHPスキル(自己評価):E
お世話になります。
現在、事業別に日々の事業内容をブログを利用してアップしているため、8つのブログアカウントを使っています。
最新の記事だけ写真と本文を表示(大きく表示)したいのですが、可能でしょうか。
可能であれば、どのあたりを変更すればよろしいのでしょうか。
また、それはブログアカウント毎に設定できますでしょうか。
【環境情報】
・baserCMSのバージョン:3.0.9
・レンタルサーバー名:ロリポップ
・使用テーマ: ratio_3_2
・PHPスキル(自己評価):E
お世話になります。
現在、事業別に日々の事業内容をブログを利用してアップしているため、8つのブログアカウントを使っています。
最新の記事だけ写真と本文を表示(大きく表示)したいのですが、可能でしょうか。
可能であれば、どのあたりを変更すればよろしいのでしょうか。
また、それはブログアカウント毎に設定できますでしょうか。
@yume777 こういうことでしょうか?
いずれにせよそうですね。。少しphpプログラムの知識が必要になりますね。
ブログの記事一覧を表示していて、かつyume777さんのなされたいことを考えてみると、以下のファイルが対象になりそうです。
/theme/yume777さん利用中テーマ名/Blog/default/index.php
arataさん、ご返信ありがとうございます。
本職が急に忙しくなり、ご返事が遅くなりましたこと、お詫び申し上げます。
文章が稚拙でわかりづらく申し訳ありません。
arataさんのおっしゃる通りで
「それぞれのブログにおいて、最新記事1件目を大きく表示したい」
ここが肝になります。
index.phpに該当箇所の記載がありそうだと言うことですね。
PHPスキルはかなり心もとないところですが、一度中身を見てみます。
関数の呼び出しが肝になりそうなのかな?と予想しています。
ありがとうございました。
GUSSANさんにもご返事いただいていたようです。(メールで確認しました)
申し訳ありません。
確かに、スクショとかあった方が分かりやすいですよね。
次に何かしら質問する場合は、その辺り考えて投稿します。
ありがとうございました。
@yume777 baserの標準で入るbc-sampleテーマで例を載せてみます。
・対象ファイル: app/webroot/theme/bc_sample/Blog/default/index.php
1行ずつの解説も難しいので、まずざくっと載せます。
ポイントとしては、 以下のところで1件目なのかどうかを判定している、という点です。
変更前・後で載せますので、取り入れられるようであれば使ってください。
<?php if ($this->BcArray->first($posts, $key)): ?>
■ こちらは変更前です
<section class="bs-blog-post">
<?php if (!empty($posts)): ?>
<?php foreach ($posts as $post): ?>
<article class="bs-blog-post__item clearfix">
<?php if(!empty($post['BlogPost']['eye_catch'])): ?>
<a href="<?php echo $this->Blog->getPostLinkUrl($post) ?>" class="bs-blog-post__item-eye-catch">
<?php $this->Blog->eyeCatch($post, ['width' => 150, 'link' => false]) ?>
</a>
<?php endif ?>
<span class="bs-blog-post__item-date"><?php $this->Blog->postDate($post, 'Y.m.d') ?></span>
<?php $this->Blog->category($post, ['class' => 'bs-blog-post__item-category']) ?>
<span class="bs-blog-post__item-title"><?php $this->Blog->postTitle($post) ?></span>
<?php if(strip_tags($post['BlogPost']['content'] . $post['BlogPost']['detail'])): ?>
<div class="bs-top-post__item-detail"><?php $this->Blog->postContent($post, true, false, 46) ?>...</div>
<?php endif ?>
</article>
<?php endforeach; ?>
<?php else: ?>
<p class="bs-blog-no-data"><?php echo __('記事がありません。'); ?></p>
<?php endif ?>
</section>
■ こちらは変更後です
<section class="bs-blog-post">
<?php if (!empty($posts)): ?>
<?php foreach ($posts as $key => $post): ?>
<?php if ($this->BcArray->first($posts, $key)): ?>
<h3>1件目の記事はこちらの表示です。</h3>
<article class="bs-blog-post__item clearfix">
<?php if(!empty($post['BlogPost']['eye_catch'])): ?>
<a href="<?php echo $this->Blog->getPostLinkUrl($post) ?>" class="bs-blog-post__item-eye-catch">
<?php $this->Blog->eyeCatch($post, ['width' => 150, 'link' => false]) ?>
</a>
<?php endif ?>
<span class="bs-blog-post__item-date"><?php $this->Blog->postDate($post, 'Y.m.d') ?></span>
<?php $this->Blog->category($post, ['class' => 'bs-blog-post__item-category']) ?>
<span class="bs-blog-post__item-title"><?php $this->Blog->postTitle($post) ?></span>
<?php if(strip_tags($post['BlogPost']['content'] . $post['BlogPost']['detail'])): ?>
<div class="bs-top-post__item-detail"><?php $this->Blog->postContent($post, true, false, 46) ?>...</div>
<?php endif ?>
</article>
<?php else: ?>
<article class="bs-blog-post__item clearfix">
<?php if(!empty($post['BlogPost']['eye_catch'])): ?>
<a href="<?php echo $this->Blog->getPostLinkUrl($post) ?>" class="bs-blog-post__item-eye-catch">
<?php $this->Blog->eyeCatch($post, ['width' => 150, 'link' => false]) ?>
</a>
<?php endif ?>
<span class="bs-blog-post__item-date"><?php $this->Blog->postDate($post, 'Y.m.d') ?></span>
<?php $this->Blog->category($post, ['class' => 'bs-blog-post__item-category']) ?>
<span class="bs-blog-post__item-title"><?php $this->Blog->postTitle($post) ?></span>
<?php if(strip_tags($post['BlogPost']['content'] . $post['BlogPost']['detail'])): ?>
<div class="bs-top-post__item-detail"><?php $this->Blog->postContent($post, true, false, 46) ?>...</div>
<?php endif ?>
</article>
<?php endif; ?>
<?php endforeach; ?>
<?php else: ?>
<p class="bs-blog-no-data"><?php echo __('記事がありません。'); ?></p>
<?php endif ?>
</section>
ご使用のratio_3_2テーマは、index.php内にレイアウト用の別のエレメントファイル[theme/ratio_3_2/Elements/blog_loop_media.php](ウィジェット欄の一覧表示、トップページのポスト表示などで共用)を呼び出している様です。
ですので、@arataさんのアドバイスの条件分岐を以下の様にblog_loop_media.php内に当てはめると、おそらくご希望のようになるとおもいます。
変更前のファイルとご自身で見比べながら、試してみてください。
ちなみにratio_3_2テーマは、そもそもトップ記事のdiv要素に「first」のクラス名がつく様になっているので、多少強引ですが、cssだけでも同様のことは実現できると思います。
変更後
<?php
/**
* 構成要素:ブログ記事ループ:メディア
* Elements/blog_loop_media.php
*
*/
?>
<?php foreach ( $posts as $key => $post ): ?>
<?php
if( !isset( $h ) ) {
$h = 'h2';
}
if( !isset( $imgsize ) ) {
$imgsize = 'thumb';
}
if( !isset( $trim ) ) {
$trim = 70;
}
$class = array( 'media', 'post-' . ( $key + 1 ) );
if( $this->BcArray->first( $posts, $key ) ) {
$class[] = 'first';
} elseif( $this->BcArray->last( $posts, $key ) ) {
$class[] = 'last';
}
?>
<?php if ($this->BcArray->first($posts, $key)): ?>
<div class="<?php echo implode( ' ', $class ) ?>">
<a href="<?php echo $this->Blog->getPostLinkUrl( $post ); ?>">
<?php
$eye_chatch = $this->Blog->getEyeCatch( $post, array( 'link' => false, 'class'=>'media-object', 'imgsize' => $imgsize ) );
?>
<?php if( $eye_chatch ): ?>
<div class="media-left" style="width: 50%;">
<?php echo $eye_chatch; ?>
<!-- /.media-left --></div>
<?php endif; ?>
<div class="media-body">
<?php echo '<' . $h . ' class="media-title">'; ?><?php $this->Blog->postTitle( $post, false ) ?><?php echo '</' . $h . '>'; ?>
<p class="media-date"><?php $this->Blog->postDate( $post, RATIO32_DATE_FORMAT ) ?></p>
<p class="media-excerpt"><?php $this->Blog->postContent( $post, true, false, $trim ) ?>...</p>
<!-- /.media-body --></div>
</a>
<!-- /.media --></div>
<?php else: ?>
<div class="<?php echo implode( ' ', $class ) ?>">
<a href="<?php echo $this->Blog->getPostLinkUrl( $post ); ?>">
<div class="media-body">
<?php echo '<' . $h . ' class="media-title">'; ?><?php $this->Blog->postTitle( $post, false ) ?><?php echo '</' . $h . '>'; ?>
<!-- /.media-body --></div>
</a>
<!-- /.media --></div>
<?php endif; ?>
<?php endforeach; ?>
以下、適用前後のフロント側の表示サンプルです。
最後に
の要件は、ブログ毎、個別に別々の仕様(画像サイズや表示される記事の内容など)を適用したい、適用することは可能か?ということでしょうか。
もし、そうであれば、Elements/blog_loop_media.phpファイルおよびtheme/ratio_3_2/Blog/defaultフォルダを複数コピーし別名で保存した上で、ブログ毎に個別に適用させ、それぞれのElements/blog_loop_media.phpを改変すれば、可能です。