固定ページのアイキャッチ画像のURLを出力する方法が知りたい

いつもお世話になっています。

管理画面→オプション→アイキャッチにて、個別の固定ページごとにアイキャッチ画像を登録しています。
登録したアイキャッチ画像を
<meta property="og:image" content="https://+++/files/contents/000001_eyecatch.jpg">
という形でOGP用のイメージに利用したいのですが、固定ページのアイキャッチ画像のURLを出力するコードがわかりません。
ご教示いただけないでしょうか?

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

【環境情報】
・baserCMSのバージョン:4.4.2
・レンタルサーバー名:ロリポップ
・使用テーマ:Omotenashi2
・PHPスキル(自己評価):E

あまりスマートではないかもしれませんが。
Layouts head内の$eyeCatchを以下に修正すれば対応できるかと思います。
ご自身の環境に合わせてダミー画像のパスやファイル名などは修正してください。

if ($this->request->params['Content']['eyecatch']){
  $eyeCatch = $this->BcUpload->uploadImage('Content.eyecatch',
  $this->request->params['Content']['eyecatch'],
    [
      'imgsize' => '',
      'alt' => '',
      'noimage' => '',
      'output' => 'url',
      'link' => false,
    ]
  );
} else {
  $eyeCatch = $this->BcBaser->getThemeUrl();
  $eyeCatch .= "img/common/dummy.png"; 
}

<meta property="og:image" content="<?=$eyeCatch?>">
<meta name="twitter:image" content="<?=$eyeCatch?>">
1 Likes

@ryota
早速、コメント頂きありがとうございます。
想定通りの出力ができました。ありがとうございました。

@ryota
一点、取得したURLにクエリー文字列がついてしまっているのですが、削除する方法はありますでしょうか?

GUSSAN 様

簡単な方法だと特定の文字(ここでは?を使用します。)以降を削除すれば良いかなと思います。
あくまで特定文字が画像ファイル名に使用してされてないものと想定しています。

特定文字を画像ファイル名に使用している場合には、この方法は利用できません。

if ($this->request->params['Content']['eyecatch']){
			$eyeCatch = $this->BcUpload->uploadImage('Content.eyecatch',
	 			$this->request->params['Content']['eyecatch'],
				[
					'imgsize' => '',
					'alt' => '',
					'noimage' => '',
					'output' => 'url',
					'link' => false,
				]
	 	);

		$trim = "?";
		$eyeCatch = substr($eyeCatch, 0, strcspn($eyeCatch, $trim)); // どっちでも
		$eyeCatch = strpos($eyeCatch, $trim) ? strstr($eyeCatch, $trim, true) : $eyeCatch; // どっちでも
		} else {...

試してみてください。

1 Likes

@ryota
いつもありがとうございます。
実現できました。 substr() 勉強になりました。
同じ発想で、別のトピックも解決することができました。

if ($this->request->params['Content']['eyecatch']){
			$eyeCatch = $this->BcUpload->uploadImage('Content.eyecatch',
	 			$this->request->params['Content']['eyecatch'],
				[
					'imgsize' => '',
					'alt' => '',
					'noimage' => '',
					'output' => 'url',
					'link' => false,
				]
	 	);

		$trim = "?";
		$eyeCatch = $this->BcBaser->getUri(substr($eyeCatch, 0, strcspn($eyeCatch, $trim)));
		} else {
			$eyeCatch = "https://hoge.com/theme/.../img/ogp/default.jpg";
			}

最終的にFaceBookのシェアデバッガーで確認したところ、URIでの表示を求められていたので、上記のように $this->BcBaser->getUri() で括りました。
ありがとうございました。