パンくずの階層について

【環境情報】
・baserCMSのバージョン:4.0.8
・レンタルサーバー名:XSERVER
・使用テーマ:オリジナル
・PHPスキル(自己評価):D

現状、パンくずをテーマ内の Elements ディレクトリのcrumbs.phpで表示しているのですが、
(※crumbs.phpの中身はコアファイルと同じものです。構造化出力のために

<?php $this->BcBaser->crumbsList(['onSchema' => true]); ?>にて出力しています。)

例えば新着情報の一覧の際、パンくずは
ホーム > 新着情報
となりますが、記事の詳細にいくと
ホーム > 記事のタイトル
となります。
理想としては
ホーム > 新着情報 > 記事のタイトル
となって欲しいのですが、これはどこか管理画面等で階層を調整する設定があるのでしょうか?
それともcrumbs.phpをカスタマイズするしかないのでしょうか?

後者の場合、自分はマークアップエンジニアなのでcrumbs.phpをカスタマイズするほどPHPスキルがないのですが、カスタマイズ方法をご教授いただけないでしょうか?

Gentarou_Nakamura さん

管理画面の「コンテンツ一覧」にて、サイト内コンテンツはどのようなツリー構造で配置されてますでしょうか?

例えば、下記のようなツリー構造となっていた場合、

:file_folder: 「Webサイトタイトル」で設定したサイト名
:page_facing_up: ホーム(index) … 固定ページ
:page_facing_up: 新着情報(news) … ブログ

ブログのトップページ( https://example.com/news/ )でのパンくずは

ホーム > 新着情報

個別記事( https://example.com/news/archives/{記事No.} )でのパンくずは

ホーム > 新着情報 > {個別記事が属するカテゴリ名} > 個別記事タイトル
(記事にカテゴリを設定してなければ {個別記事が属するカテゴリ名} は非表示)

と表示されるはずなのですが、いかがでしょうか?

「コンテンツ一覧」のスクリーンショットを投稿いただけると、解決のヒントになるかもしれませんね(差し支えある箇所は、ぼかし処理などしていただいた上で)。

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

URL的には
新着情報一覧が
https://narita-bitte.com/news/
で、詳細が
https://narita-bitte.com/news/archives/25
と仰ってあるような、本来階層が出るはずのようなURLなんですが、
パンくずは
ホーム> 記事タイトル
となってしまいます。

コンテンツ管理も仰ってある形かと思うんですが…
image

crumbs.phpもそのままだと思います。

<?php
/**
 * baserCMS :  Based Website Development Project <http://basercms.net>
 * Copyright (c) baserCMS Users Community <http://basercms.net/community/>
 *
 * @copyright		Copyright (c) baserCMS Users Community
 * @link			http://basercms.net baserCMS Project
 * @package			Baser.View
 * @since			baserCMS v 0.1.0
 * @license			http://basercms.net/license/index.html
 */

/**
 * [PUBLISH] ナビゲーション
 *
 * ページタイトルが直属のカテゴリ名と同じ場合は、直属のカテゴリ名を省略する
 */
if(!isset($separator)) {
	$separator = '&nbsp;&gt;&nbsp;';
}
if(!isset($home)) {
	$home = 'ホーム';
}
$crumbs = $this->BcBaser->getCrumbs();
if (!empty($crumbs)) {
	foreach ($crumbs as $key => $crumb) {
		if ($this->BcArray->last($crumbs, $key)) {
			if ($this->viewPath != 'home' && $crumb['name']) {
				$this->BcBaser->addCrumb($crumb['name']);
			}
		} else {
			$this->BcBaser->addCrumb($crumb['name'], $crumb['url']);
		}
	}
} elseif (empty($crumbs)) {
	if ($this->name == 'CakeError') {
		$this->BcBaser->addCrumb('404 NOT FOUND');
	}
}
?>


<?php if(empty($onSchema)): ?>
<?php 
	if ($this->BcBaser->isHome()) {
		echo $home;
	} else {
		$this->BcBaser->crumbs($separator, $home);	
	}
	?>
<?php else: ?>
<ul itemscope itemtype="http://schema.org/BreadcrumbList">
	<?php if ($this->BcBaser->isHome()): ?>
	<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
		<span itemprop="name"><?php echo $home ?></span>
		<meta itemprop="position" content="1" />
	</li>
	<?php else: ?>
	<?php $this->BcBaser->crumbs($separator, $home, true) ?>
	<?php endif ?>
</ul>
<?php endif ?>

うーん…謎ですね…

パンくずリストの出力には /lib/Baser/View/Helper/BcBaserHelper.php ファイル内の

/**
 * パンくずリストを出力する
 * 
 * 事前に BcBaserHelper::addCrumb() にて、パンくず情報を追加しておく必要がある。
 * また、アクセス制限がかかっているリンクはテキストのみ表示する
 *
 * @param string $separator パンくずの区切り文字(初期値 : &raquo;)
 * @param string|bool $startText トップページを先頭に追加する場合にはトップページのテキストを指定する(初期値 : false)
 * @return void
 */

に続く

	public function crumbs($separator = '&raquo;', $startText = false, $onSchema = false) {
《中略》
		echo $out;
	}

の箇所も関係しているので(この箇所で構造化属性を加えたパンくずリストを生成している)、お使いの baserCMS(バージョン 4.0.8 ですよね?)の当該箇所と

https://raw.githubusercontent.com/baserproject/basercms/basercms-4.0.8/lib/Baser/View/Helper/BcBaserHelper.php 内の当該箇所を比較されてはいかがでしょうか?

ありがとうございます!m(_ _)m
確認してみます!

確認してみましたが、/lib/Baser/View/Helper/BcBaserHelper.php
にあるコアファイルは
教えていただいた
https://raw.githubusercontent.com/baserproject/basercms/basercms-4.0.8/lib/Baser/View/Helper/BcBaserHelper.php
こちらと全く同じものでした。
:cry:

人が作成したサイトなのでどこに何を仕込んであるかが分からないので
僕の知識ではこういう確認すべき勘所がなかったので大変助かります。

今まで他のサイトでbaserCMSを使っていた時は普通にパンくずは表示できていた気がするんですが…
:sob:

引用されているサイトのHTMLソースを拝見したところ、パンくずは、schema.orgのようなのですが、このサイトとは違うサイトのことなのでしょうか?

追記:
すいません、まったくのお門違いな話でした。
ちらっと見ただけで安易にコメントしてしまいました。無視してください。

ちなみにapp/View/Helper/内に別のBcBaserHelper.phpがコピーされて適用されているなんてことありませんかね?

ご返信ありがとうございます!
確認してみます。 :blush:

確認しましたが
app/View/Helper内には
AppHelper.phpというファイルしかありませんでした。 :cry:

<?php
    /**
     * Application level View Helper
     *
     * This file is application-wide helper file. You can put all
     * application-wide helper-related methods here.
     *
     * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
     * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
     *
     * Licensed under The MIT License
     * For full copyright and license information, please see the LICENSE.txt
     * Redistributions of files must retain the above copyright notice.
     *
     * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
     * @link          http://cakephp.org CakePHP(tm) Project
     * @package       app.View.Helper
     * @since         CakePHP(tm) v 0.2.9
     * @license       http://www.opensource.org/licenses/mit-license.php MIT License
     */

    App::uses('BcAppHelper', 'View/Helper');

    /**
     * Application helper
     *
     * Add your application-wide methods in the class below, your helpers
     * will inherit them.
     *
     * @package       app.View.Helper
     */
    class AppHelper extends BcAppHelper {
    }

そうでしたか。。。残念。

「いいね!」 1

@Gentarou_Nakamura コードを確認したんですが、 onSchematrue にしようがしまいが、$crumbs という変数に親の情報が入っているかどうかにかかっているようでした。

crumbs.php において、次のコードを記載し、親情報が入っているかどうか確認いただけますか?

var_dump($crumbs);

正常な状態であれば、親の情報(ブログの情報と、カテゴリの情報)が表示されます。
そうでなければ、テンプレートやヘルパの問題でない可能性が高いです。

「いいね!」 1

念の為ですが、bc_sampeテーマが構造化出力に対応してなかったので対応しておきました。

「いいね!」 1

ありがとうございます。確認いたします。

array(1) { [0]=> array(2) { [“name”]=> string(49) “ベトナム人研修生3人の雇用開始の件” [“url”]=> string(0) “” } }
入っていないようです。

baserCMSのバージョンをあげれば直るかもしれないとのアドバイスをいただいたので上げてみようと思います。

「いいね!」 1