【環境情報】
・baserCMSのバージョン:4.1.5
・レンタルサーバー名:KDDI ACE01
・使用テーマ:独自のもの
・PHPスキル(自己評価):E
PHPについては全くの初心者です。
不足している情報等ございましたら、ご指摘ください。
さて、本題ですが、
ローカルナビゲーションの表示について、ご教示いただけないかと思い、トピックを作成させていただきました。
一定以上の階層からサイドナビゲーションでメニューとして表示されないという状況です。
/html/theme/(テーマ名)/Helperの「ThemeHelper.php」の下記コードにおいて、もう一つ深い階層まで表示をさせたいと考えております。
以下、現行本番環境でのソースです。
========以下、ソース(ThemeHelper.phpにおけるサイドナビ該当部分)========
public function localNavi($contents, $currentLevel, $current = false){
if ($contents){
if ($contents[0]['Content']['id'] == '3'){
foreach ($contents as $key => $content){
if (preg_match('/^' . str_replace('/', '\/', $content['Content']['url']) . '(.*?)/', $this->request->here)){
$contents = $content['children'];
echo "<h2><a href=\"{$content['Content']['url']}\">" . $content['Content']['title'] . "</a></h2>\n";
}
}
echo "<ul class=\"c-nav-local__list\">\n";
} else {
echo "<ul>";
}
foreach ($contents as $key => $content){
if ($content['Content']['name'] == 'index'){
continue;
}
$dataParent = '';
if ($content['Content']['level'] == '2' && count($content['children']) > 1 && preg_match('/^' . str_replace('/', '\/', $content['Content']['url']) . '(.*?)/', $this->request->here)){
$dataParent = ' data-parent="true"';
$current = true;
}
$dataCurrent = '';
if (preg_match('/^' . str_replace('/', '\/', $content['Content']['url']) . '(.*?)/', $this->request->here)){
$dataCurrent = ' data-current="true"';
}
echo "<li{$dataParent}{$dataCurrent}>\n";
echo "<a href=\"{$content['Content']['url']}\">{$content['Content']['title']}</a>\n";
if ($current && $content['children'] && count($content['children']) > 1 && $content['Content']['level'] < 3){
$this->localNavi($content['children'], $currentLevel, $current);
}
$current = false;
echo "</li>\n";
}
echo "</ul>\n";
}
}
}
========以上、ソース(ThemeHelper.phpにおけるサイドナビ該当部分)========
上記ソースの中で、
$dataParent = ''; if ($content['Content']['level'] == '2' && count($content['children']) > 1 && preg_match('/^' . str_replace('/', '\/', $content['Content']['url']) . '(.*?)/', $this->request->here)){ $dataParent = ' data-parent="true"'; $current = true; }
この部分の$content[‘Content’][‘level’] == '2’を「$content[‘Content’][‘level’] == ‘2’||’3’」とし、
echo "<li{$dataParent}{$dataCurrent}>\n"; echo "<a href=\"{$content['Content']['url']}\">{$content['Content']['title']}</a>\n"; if ($current && $content['children'] && count($content['children']) > 1 && $content['Content']['level'] < 3){ $this->localNavi($content['children'], $currentLevel, $current); } $current = false;
この部分の$content[‘Content’][‘level’] < 3を「$content[‘Content’][‘level’] < 4」とし、
表示する階層を増やしたところ、ほぼすべてのメニュー項目が表示されてしまいました。
本来やりたい表示としては
<h2>(親カテゴリ名)</h2>
<ul>
<li>子カテゴリ名①</li>
(孫カテゴリはあるが、ほかの子カテゴリを表示中は表示しない)
<li>子カテゴリ名②
<ul>孫カテゴリ名②-1</ul>
<ul>孫カテゴリ名②-2</ul>
<ul>孫カテゴリ名②-3</ul>
<li>ひ孫カテゴリ②-3-(1)</li>
</li>
</ul>
としたいのですが、表示させたくない子カテゴリ①の孫カテゴリまで表示されている状況です。
分かりにくい説明で申し訳ございませんが、どなたかお力を貸していただけたら幸いです。