【環境情報】
・baserCMSのバージョン:4.8.0
・レンタルサーバー名:xampp
・使用テーマ:omotenashi2
・PHPスキル(自己評価):全くわからない
omotenashi2でwebサイト作成を行おうとインストールしたのですが、newsのページに飛んで記事を開こうとすると画像のようなエラーが表示されました。
この解決法を教えていただけないでしょうか。
【環境情報】
・baserCMSのバージョン:4.8.0
・レンタルサーバー名:xampp
・使用テーマ:omotenashi2
・PHPスキル(自己評価):全くわからない
omotenashi2でwebサイト作成を行おうとインストールしたのですが、newsのページに飛んで記事を開こうとすると画像のようなエラーが表示されました。
この解決法を教えていただけないでしょうか。
theme/omotenashi2/Helper/BcBaserHelper.phpを一旦、theme/omotenashi2/Helper/_BcBaserHelper.phpなどとリネームして、本件エラーが出ないか確認してみてはどうでしょうか?
スライダーのレイアウトがおかしくなりますが、それは一旦置いておいて。
こちらであらためて環境を作って確認したところ、ご指摘の4.8.0バージョンでは、ブログ記事を表示させた時点で同様のエラーになることを確認できました。
ちなみに、baserマーケットにアップされている対応バージョン「 baserCMS 4.1.7, 4.2.1 」の記述通り、4.2.1バージョンで確認したところ記事は表示されることも確認できました。
ですが、4.2.1バージョンでもデバッグモードで確認したところ、エラーログは表示されておりました。
さておき、結論を申しますと、omotenashi2テーマのレイアウトファイルのhead内記述に多数のエラーがあり、それが原因で4.8.0バージョンでは、記事が表示さません。
修正箇所は多岐にわたっているため、該当のdefault.phpおよびtpl_news.phpのコードを全文でアップしますので、そのまま、お使いの該当ファイル(theme/omotenashi2/Layouts/default.phpおよびtpl_news.php)と差し替えてください。
変更箇所は、現状ご利用のファイルと付き合わせてご確認いただければと思います。
以下、theme/omotenashi2/Layouts/default.php
<!DOCTYPE html>
<html dir="ltr" lang="ja">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# website: http://ogp.me/ns/website#">
<?php $this->BcBaser->charset() ?>
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php
//OGP
//=====================================
$siteName = $siteConfig['name'];
$siteUrl = $siteConfig['name'];
$description = mb_substr( $siteConfig['description'] ,0, 297); //サイトの説明文297文字以内
$title = $this->BcBaser->getTitle(); //ページタイトル95文字以内
$type ="website"; //記事はarticle, それ以外(HOME、固定ページ)はwebsite
$url =$this->BcBaser->getUri($this->BcBaser->getHere());
$publisher = ""; //著者のFacebookページURLかID。FacebookページのFollowボタンを表示できるようになる。
$fb_id = ""; //FacebookのAPP ID
$author = "@mune_nori"; //Twitter Cardに表示されるアカウント名
$domain = "munerin.com"; //Twitter Cardに表示されるドメイン名
$eyeCatch = "/theme/omotenashi2/img/common/ogp_img.png"; //デフォルトの画像をフルパス指定(アイキャッチが無い場合)
//ブログ記事の場合はアイキャッチ画像を出力
if (!empty($post)) {
$type ="article";
$num = 297; //説明文の文字数制限(本文から抜き出し)
$str = strip_tags($post['BlogPost']['detail']); //タグ除去
$str = str_replace(["\r\n","\n","\r"], '', $str); //改行除去
if(mb_strlen($str) >= $num) {
$description = mb_substr($str, 0,$num-1) . "…";
} else {
$description = $str;
}
//タイトルにはサイトタイトルを含めない
$title = $this->Blog->getPostTitle($post,false)." – " . $siteConfig['formal_name']; //ページタイトル95文字以内
$baseCurrentID = $this->Blog->getcurrentBlogId(); //アイキャッチ画像の保存先Urlを構成するためにブログ実体IDを取得
$baseCurrentImgUrl = "/files/blog/" . $baseCurrentID . "/blog_posts/";
$eyeCatch = $this->BcBaser->getUri( $baseCurrentImgUrl . $post['BlogPost']['eye_catch']);
}
?>
<meta property="article:publisher" content="<?php echo $publisher; ?>">
<meta property="og:type" content="<?php echo $type; ?>">
<meta property="og:locale" content="ja_JP">
<meta property="og:site_name" content="<?php echo $siteName; ?>">
<meta property="og:title" content="<?php echo $title; ?>">
<meta property="og:description" content="<?php echo $this->BcBaser->getDescription() ?>">
<meta property="og:url" content="<?php echo $url; ?>">
<meta property="og:image" content="<?php echo $eyeCatch; ?>">
<meta property="fb:app_id" content="<?php echo $fb_id; ?>">
<?php // Twitter Cardsの種類指定 ?>
<meta name="twitter:card" content="summary_large_image">
<?php // 写真左上 :「アカウント名」の表記(無くてもOK) ?>
<meta name="twitter:site" content="<?php echo $author; ?>">
<?php // by (投稿者) :写真下の 「By アカウント名 @TwitterID 」(無くてもOK)?>
<meta name="twitter:creator" content="<?php echo $author; ?>">
<meta name="twitter:domain" content="<?php echo $domain; ?>">
<meta name="twitter:url" content="<?php echo $url; ?>">
<meta name="twitter:title" content="<?php echo $title; ?>">
<meta name="twitter:description" content="<?php echo $this->BcBaser->getDescription() ?>">
<meta name="twitter:image" content="<?php echo $eyeCatch; ?>">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<?php $this->BcBaser->icon() ?>
<?php $this->BcBaser->rss('ニュースリリース RSS 2.0', '/news/index.rss') ?>
<?php $this->BcBaser->css([
'style']); ?>
<?php $this->BcBaser->js([
'jquery-3.4.1.min.js',
'admin/functions',
'jquery.easing',
'common']); ?>
<?php $this->BcBaser->scripts() ?>
<?php if ($this->BcBaser->isHome()): ?>
<script src="<?php $this->BcBaser->themeUrl() ?>js/slick.min.js"></script>
<script src="<?php $this->BcBaser->themeUrl() ?>js/index.js"></script>
<?php endif ?>
<?php if (!$this->BcBaser->isHome()): ?>
<script src="<?php $this->BcBaser->themeUrl() ?>js/jquery.magnific-popup.min.js"></script>
<script>
$(function() {
//magnific-popup
$(".popup, .eyeCatch a, a[rel='colorbox']").magnificPopup({
type: 'image',
mainClass: 'mfp-with-zoom',
removalDelay: 160,
preloader: false,
fixedContentPos: false,
gallery:{enabled:true}
});
});
</script>
<?php endif ?>
<?php $this->BcBaser->googleAnalytics() ?>
</head>
<body<?php if ($this->BcBaser->isHome()): ?> class="index"<?php endif ?>>
<?php $this->BcBaser->header() ?>
<main>
<?php if (!$this->BcBaser->isHome()): ?>
<aside class="breadcrumb">
<nav class="container">
<?php $this->BcBaser->crumbsList(); ?>
</nav>
</aside>
<?php endif ?>
<?php if ($this->BcBaser->isHome()): ?>
<?php $this->BcBaser->flash() ?>
<div class="indexContents">
<div class="mainVisual">
<div class="mainVisual__inner">
<h2 class="mainVisual__hl fontNotoSerif">博多の味、幸せの味<br>美味しいと笑顔になれる</h2>
<?php $this->BcBaser->mainImage(['num' => 5, 'all' => true, 'class' => 'mainVisualList']) ?>
</div>
</div>
<div class="container">
<section class="topNews">
<div class="topNews__box">
<h2 class="topNews__hl fontNotoSerif">お知らせ</h2>
</div>
<div class="topNewsList">
<?php $this->BcBaser->blogPosts('news', 3) ?>
</div>
</section>
</div>
<?php $this->BcBaser->content() ?>
</div>
<?php else: ?>
<article class="contents">
<?php $this->BcBaser->content() ?>
</article>
<?php endif ?>
</main>
<?php $this->BcBaser->element('footer_contact'); ?>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
以下、theme/omotenashi2/Layouts/tpl_news.php
<!DOCTYPE html>
<html dir="ltr" lang="ja">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# website: http://ogp.me/ns/website#">
<?php $this->BcBaser->charset() ?>
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php
//OGP
//=====================================
$siteName = $siteConfig['name'];
$siteUrl = $siteConfig['name'];
$description = mb_substr( $siteConfig['description'] ,0, 297); //サイトの説明文297文字以内
$title = $this->BcBaser->getTitle(); //ページタイトル95文字以内
$type ="website"; //記事はarticle, それ以外(HOME、固定ページ)はwebsite
$url =$this->BcBaser->getUri($this->BcBaser->getHere());
$publisher = ""; //著者のFacebookページURLかID。FacebookページのFollowボタンを表示できるようになる。
$fb_id = ""; //FacebookのAPP ID
$author = "@mune_nori"; //Twitter Cardに表示されるアカウント名
$domain = "munerin.com"; //Twitter Cardに表示されるドメイン名
$eyeCatch = "/theme/omotenashi2/img/common/ogp_img.png"; //デフォルトの画像をフルパス指定(アイキャッチが無い場合)
//ブログ記事の場合はアイキャッチ画像を出力
if (!empty($post)) {
$type ="article";
$num = 297; //説明文の文字数制限(本文から抜き出し)
$str = strip_tags($post['BlogPost']['detail']); //タグ除去
$str = str_replace(["\r\n","\n","\r"], '', $str); //改行除去
if(mb_strlen($str) >= $num) {
$description = mb_substr($str, 0,$num-1) . "…";
} else {
$description = $str;
}
//タイトルにはサイトタイトルを含めない
$title = $this->Blog->getPostTitle($post,false) . " – " . $siteConfig["formal_name"]; //ページタイトル95文字以内
$baseCurrentID = $this->Blog->getcurrentBlogId(); //アイキャッチ画像の保存先Urlを構成するためにブログ実体IDを取得
$baseCurrentImgUrl = "/files/blog/" . $baseCurrentID . "/blog_posts/";
$eyeCatch = $this->BcBaser->getUri( $baseCurrentImgUrl . $post["BlogPost"]["eye_catch"]);
}
?>
<meta property="article:publisher" content="<?php echo $publisher; ?>">
<meta property="og:type" content="<?php echo $type; ?>">
<meta property="og:locale" content="ja_JP">
<meta property="og:site_name" content="<?php echo $siteName; ?>">
<meta property="og:title" content="<?php echo $title; ?>">
<meta property="og:description" content="<?php echo $this->BcBaser->getDescription() ?>">
<meta property="og:url" content="<?php echo $url; ?>">
<meta property="og:image" content="<?php echo $eyeCatch; ?>">
<meta property="fb:app_id" content="<?php echo $fb_id; ?>">
<?php // Twitter Cardsの種類指定 ?>
<meta name="twitter:card" content="summary_large_image">
<?php // 写真左上 :「アカウント名」の表記(無くてもOK) ?>
<meta name="twitter:site" content="<?php echo $author; ?>">
<?php // by (投稿者) :写真下の 「By アカウント名 @TwitterID 」(無くてもOK)?>
<meta name="twitter:creator" content="<?php echo $author; ?>">
<meta name="twitter:domain" content="<?php echo $domain; ?>">
<meta name="twitter:url" content="<?php echo $url; ?>">
<meta name="twitter:title" content="<?php echo $title; ?>">
<meta name="twitter:description" content="<?php echo $this->BcBaser->getDescription() ?>">
<meta name="twitter:image" content="<?php echo $eyeCatch; ?>">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<?php $this->BcBaser->icon() ?>
<?php $this->BcBaser->rss('ニュースリリース RSS 2.0', '/news/index.rss') ?>
<?php $this->BcBaser->css([
'style']); ?>
<?php $this->BcBaser->js([
'jquery-3.4.1.min.js',
'admin/functions',
'jquery.easing',
'common']); ?>
<?php $this->BcBaser->scripts() ?>
<?php if (!$this->BcBaser->isHome()): ?>
<script src="<?php $this->BcBaser->themeUrl() ?>js/jquery.magnific-popup.min.js"></script>
<script>
$(function() {
//magnific-popup
$(".popup, .eyeCatch a, a[rel='colorbox']").magnificPopup({
type: 'image',
mainClass: 'mfp-with-zoom',
removalDelay: 160,
preloader: false,
fixedContentPos: false,
gallery:{enabled:true}
});
});
</script>
<?php endif ?>
<?php $this->BcBaser->googleAnalytics() ?>
</head>
<body>
<!-- facebook script -->
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v3.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<?php $this->BcBaser->header() ?>
<main>
<aside class="breadcrumb">
<nav class="container">
<?php $this->BcBaser->crumbsList(); ?>
</nav>
</aside>
<article class="contents">
<?php $this->BcBaser->content() ?>
</article>
</main>
<?php $this->BcBaser->element('footer_contact'); ?>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
回答ありがとうございます!
ご丁寧にコードを書いてくださり、大変助かりました!
無事にnews欄を表示することができました!
丁寧な回答をしていただいたのに申し訳ないのですが、以下の画像のようなコードの一部が表示されるようになっているのですが、これは仕様でしょうか…?
もし隠す方法がある場合は教えていただけると助かります
勉強不足でお手数をおかけしてすみません
おそらくですが、ご指摘のエラーは、PHP8系をお使いの場合に出ているのではないかと思います。
というのも、本テーマは、トップページのスライダー用のHTML出力を変更する目的で、BcBaserHelper.phpをコアファイルからテーマフォルダ内にコピーした上で改修、利用されているようです。
そのため、テーマフォルダ内にコピーしたBcBaserHelper.phpが古いまま(おそらくbaser4.2の頃のもの)更新されない状況になっているとおもいます。
解消するためには、
①新たにコアファイルのBcBaserHelper.phpをテーマフォルダ内にコピーし、その上で、トップページのスライダー用のHTML出力を変更する目的で改修された部分を同様に改修するか、
②テーマヘルパーの形で書き直すか、
③テーマフォルダ内にコピーしたBcBaserHelper.phpを削除し、cssでなんとかトップページのスライダー部分のレイアウトを調整するか、
のいずれかだと思います。
後々のことを考えると、②か③が良いような気がします。
参考までに②のヘルパー案を記事にしてみましたので、よかったら参考にしてください。
作成したテーマヘルパー(Omotenashi2Helper.php)は、正しくtheme/omotenashi2/Helper/Omotenashi2Helper.phpに配置されているでしょうか?
拡張子.phpがついていないので、txt扱いになっていますね。
エラーを見る限り、正しいファイル名になっているようには見えないのですが。。。
難しいようなら、テーマヘルパーを使わない方がいいかもですね。
お手数おかけしました…
保存時にテキストファイルのままでphpで正しく保存されていないみたいでした…
保存しなおして無事にきれいに表示されました!!
本当に無知な私にご丁寧に教えていただきありがとうございました!