「最近の投稿」にアイキャッチ画像を表示したいです

Nori > 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/9 17:29
nice-tempoにて、ブログのサイドウィジェットにある「最近の投稿」にアイキャッチを表示させたいのですが可能でしょうか?

可能であれば詳しい方ご指導のほどよろしくお願いします。



以上のような感じで考えています。

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

beychan > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/10 11:19
Noriさん

こんにちは。

引用:
nice-tempoにて、ブログのサイドウィジェットにある「最近の投稿」にアイキャッチを表示させたいのですが可能でしょうか?


可能ではあるのですがウィジェットの仕様上アイキャッチのデータを取得していないので、表示させるのは難しい内容になると思います。

方法としては、
* DBからアイキャッチのデータを取得してくる
* 専用のプラグインを作成する
* 専用のコントローラーやヘルパーを作成する
等が上げられますが、baserCMSに詳しい方に直接依頼するのが良いのではないでしょうか?

問題の解決になっていないかもしれないですが、よろしくお願いします。
Nori > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/10 12:42
beychan 様


ご返答ありがとうございます。

専用の方に任せるようなサイトではないので、極力自力での作成を考えております。

例えばトップページにアイキャッチを載せる方法などを応用してはできないのでしょうか?

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

Nori > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/10 16:13
<?php $this->BcBaser->link($recentEntry['BlogPost'][$this->Blog->getEyeCatch($post, array('link' => false, 'class'=>'EyeCatch'))], array('admin' => false, 'plugin' => '', 'controller' => $blogContent['BlogContent']['name'], 'action' => 'archives', $recentEntry['BlogPost']['no'])) ?>


自分なりに考えて、以上のようにしてみたところ、
ソース上でリンクは形成されているようですが、画像は出ておりません…

最近の投稿でのタイトル部分と思われる
<?php $this->BcBaser->link($recentEntry['BlogPost']['name'], array('admin' => false, 'plugin' => '', 'controller' => $blogContent['BlogContent']['name'], 'action' => 'archives', $recentEntry['BlogPost']['no'])) ?>


の下にnews/indexなどでアイキャッチを表示する方法で使用している

<?php $this->Blog->postLink($post, $this->Blog->getEyeCatch($post, array('link' => false, 'class'=>'EyeCatch')));?>


を書き入れても、該当するブログ記事のページでのみ、その記事のアイキャッチが表示されるのですが、
すべての記事のアイキャッチが、表示しているページのアイキャッチ画像になってしまいます。


(※本来は画像Aは上の記事だけで、画像Bを下の記事にしたいです。なお、オリジナルにはない、liにfloat:leftを入れてます。)

ちなみに記事ページ以外ではnews/archivesまでのリンクの生成がされていますが、
画像が表示されません。

あと一歩な気がするのですがどなたか助けていただけませんでしょうか?

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

Nori > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/11 1:45
テーマのカスタマイズのみでblog widgets blog_recent_entries でブログの投稿日時を表示させる。

こちらの投稿にある機能もアイキャッチ同様に実装したく、調べていましたがうまくいかず、
助けていただければ幸いです。

あと、アイキャッチ画像を表示させる機能も上記の応用で行けるのではと勝手ながら考えていますが、
どうなのでしょうか?

どなたか教えていただければ幸いです。

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

tecking > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/14 22:24
Noriさん

nice-tempoではないテーマでの検証ですが、一例としてどうぞ。
(しかもCakePHPの作法からいうと、やや手抜きな方法ではありますが……)

1. /lib/Baser/Plugin/Blog/View/Elements/widgets/blog_recent_posts.php を、お使いのテーマディレクトリの Elements/widgets/ にコピー( widgets ディレクトリがなければ新規作成)。
これで、コピー先のファイルが「最近の投稿」のテンプレートとして優先されるようになります。

※(追記)『nice-tempo』については、すでに Elements/widgets/blog_recent_posts.php があるので 1 の操作は不要です

2. /app/webroot/theme/{お使いのテーマディレクトリ}/Helper 内に FooHelper.php として下記を作成( Helper ディレクトリがなければ新規作成)。
$options の値はブログプラグインの getEyecatch() 関数に準じるので、適宜設定してください(下記コードでは、大きいサイズの画像へのリンクをなくす設定だけ行っています)。

<?php

class FooHelper extends AppHelper {

	public $helpers = array('Blog.Blog');
	
	public function getEyecatch($blogContentId, $postNo) {
		if (empty($blogContentId) || empty($postNo)) return;

		$BlogPost = ClassRegistry::init('Blog.BlogPost');
		$post = $BlogPost->find('first',
			array('conditions' => array(
				'BlogPost.no' => $postNo,
				'BlogPost.blog_content_id' => $blogContentId
			))
		);

		$options = array(
			'link' => false
		);
		return $this->Blog->getEyecatch($post, $options);
	}
}


3. 1のコピー先ファイルの任意の位置(=アイキャッチ画像を挿入したい位置)に下記のように挿入。

<?php $this->BcBaser->link($this->Foo->getEyecatch($id, $recentEntry['BlogPost']['no']), array('admin' => false, 'plugin' => '', 'controller' => $blogContent['BlogContent']['name'], 'action' => 'archives', $recentEntry['BlogPost']['no'])) ?>


これで、個別記事へのリンクが埋め込まれたアイキャッチ画像が表示されるかとおもいます。アイキャッチ画像の大きさは、2. のコードの $options や、CSSで適宜調整してみてくださいね。
Nori > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/15 16:33
teckingさん

この度はありがとうございます。

ほぼ希望通り出来るようになったのですが、この場合は画像なしの際のnoimageはどうやれば反映させられるのでしょうか?

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

tecking > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/15 16:52
引用:
画像なしの際のnoimageはどうやれば反映させられるのでしょうか?

独自ヘルパー(2で示したコード)の $options に noimage のキーと値を追加すればよいかとおもいます。値には画像ファイルへのパスを記述します。

未検証ですが、テーマディレクトリの img ディレクトリ内に noimage.png を置いた場合、ヘルパーはこんなコードになるのではと。

<?php

class FooHelper extends AppHelper {

	public $helpers = array('Blog.Blog', 'BcBaser');
	
	public function getEyeCatch($blogContentId, $postNo) {
		if (empty($blogContentId) || empty($postNo)) return;

		$BlogPost = ClassRegistry::init('Blog.BlogPost');
		$post = $BlogPost->find('first',
			array('conditions' => array(
				'BlogPost.no' => $postNo,
				'BlogPost.blog_content_id' => $blogContentId
			))
		);

		$options = array(
			'link' => false,
			'noimage' => $this->BcBaser->getImg('noimage.png')
		);
		return $this->Blog->getEyeCatch($post, $options);
	}
}


$options に設定できるキーと値は、関数リファレンスを参考にしてください。

関数リファレンス/Blog getEyeCatch

余談ですが、baserCMS(CakePHP)の作法的には getEyecatch でなく getEyeCatch が正しい記述でした。
Nori > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/15 18:25
アドバイスありがとうございます。

noimage.jpgをimg/common/以下に用意しているので、
そちらにアクセスさせたく、
教えていただいたコードの該当部分、

'noimage' => $this->BcBaser->getImg('noimage.png')




'noimage' => $this->BcBaser->getImg('common/noimage.jpg')


としたのですが、

表示される部分に

<img src="/img/%3Cimg%20src%3D%22/theme/nice-tempo/img/common/noimage.jpg%22%20alt%3D%22%22%20/%3E" class="img-eye-catch" alt="">


と、文字化け?のような現象が起きます…

img直下にnoimage.pngを用意し、
頂いたとおりにやっても同様のことが起きます。

何度もおたずねして恐縮ですが、
どこが問題でこのことが起きているかすらわからず、お手数おかけいたしますがお助けをお願いします。

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

Nori > Re: 「最近の投稿」にアイキャッチ画像を表示したいです @ 2016/5/15 18:38
'noimage' => $this->BcBaser->getImg('common/noimage.jpg')


の部分を

'noimage' => 'common/noimage.jpg'


とすることで解決できました!

ありがとうございました!!

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

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


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

検索

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

フォーラムガイド


関連リンク

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

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