bon
1
【環境情報】
・baserCMSのバージョン: 5.1.7
・レンタルサーバー名:
・使用テーマ: オリジナル作成中
・PHPスキル(自己評価): 少しはコードをかける
現在、テーマを作成中で、オリジナルJSメニューからcontentsMenuの利用に移行したいと思っています。
フォルダと定義したコンテンツについては
plugins/テーマ/templates/ContentFolders 配下のひな形を呼び出すことまではわかったのですが、私の実現したいのは、
「フォルダ」タイプのリンクをクリックしたときは「何も起こらない」としたいのです。何か方法はありますか?
bon
2
contentsMenu3.txt (5.7 KB)
スタイルシートは3階層まで限定でこのようなモノを利用しています。
#詳細は詰め切れていません。
GUSSAN
3
contents_menuか、あるいは、global_menuのエレメントファイルをplugins/テーマ/templates/elementフォルダ内に作成(plugins/bc-front/templates/elementフォルダからコピーし、改修ですかね)し、当該エレメントファイル内で$treeをforeach内に親フォルダに該当する条件分岐を加えた状態で回せば、ご希望の感じになるのではないかと思います。
想定していないイレギュラーなケースが出そうですが。。。
例えば、
<?php if ($content['Content']['type'] == "ContentFolder"): ?>
<?php else: ?>
<?php endif ?>
なお、参考に貼っていただいたcss(テキスト)は、Shift-JISエンコードだったので、こちらの環境では文字化けしたため、特に拝見していません。。。
GUSSAN
4
すいません、5系だと、
<?php if ($content->type == "ContentFolder"): ?>
ですかね。
GUSSAN
5
五月雨式ですいません。
contents_menu.phpは、ウィジェットエリアでも利用されているため、改修すると影響が出るかもしれませんので、できれば、global_menu.phpを利用されることをお勧めします。
bon
6
ご教示ありがとうございます。
今、「contents_menu」で作りかけたので一旦contents_menuでテストしてみました。
\vendor\baserproject\bc-frontt\templates\element\contents_menu.php
を以下の自作テーマにコピー
\plugins\テーマ\templates\element
<?php $this->BcBaser->link($content->title, $content->url, $options) ?>
を
<?php if ($content->type == "ContentFolder"): ?>
<a href="javascript:void(0);"><?php echo $content->title . " ▼" ?></a>
<?php else: ?>
<?php $this->BcBaser->link($content->title, $content->url, $options) ?>
<?php endif ?>
のように変更することで目的を達成できました。
global_menu.phpについては、初期の段階でうまく動作しなかったので、contents_menuで実装を始めた次第です。
少し、仕組みが分かってきたので、もう一度チャレンジしてみます。
bon
7
contentsMenu3.txt (8.0 KB)
#スタイルシートをutf-8にしたものです。
GUSSAN
8
おそらく、呼び出し側で、表示させたい階層のパラメータを指定していないからではないですか?
<?php $this->BcBaser->globalMenu([$level],[$options]); ?>
bon
9
header.phpで以下のように実装したのですが、うまくいかなかった次第です。
・スタイルシートが、うまく適用されない。←これは私の理解不足
・2階層目以降が表示されない(ソースに出てこない)←ここが課題
<header>
<div class="item_caution">
<font class=normal_b id=red>※当ページより知り得た情報を他に漏らしたり不正に使用する事は、禁じられています。</font>
</div>
<nav class="bs-header__nav use-mega-menu" id="BsMenuContent">
<?php $this->BcBaser->globalMenu() ?>
</nav>
</header>
GUSSAN
10
ですから、
<?php $this->BcBaser->globalMenu([$level],[$options]); ?>
2階層目まで出したいなら、
です。
GUSSAN
11
すでにcontentsMenuにて作業を進めておられると思うので、必要ないかもしれませんが念の為。
先ほど、改めてcssをざっと拝見したのですが、3階層目までの出力を予定されているようなので、まずは、
<?php $this->BcBaser->globalMenu(3) ?>
ということのなります。
その上で、[$options]
のパラメータは、必用に応じて、旧4系の関数リファレンスを参考にされるか、直接core内のBcBaserHelper.phpの該当箇所を読んでもらうのが良いかと思います。
実装においては、5系で3階層目のメニューを出力させたことはないので、なんとも心もとないコメントなのですが、もし、globalMenuで3階層目以降が出力されないのであれば、それ以降の再帰処理についてのコードがうまく作成できていないということになるかと思います。
念の為、5.1.5付属のBcThemeSampleで確認したところ、以下のように問題なく3階層目は出力されました。
話は戻りますが、contentsMenuをグローバルメニューとして利用する上での注意点は、先にコメントさせていただいた通りですので、contentsMenuの方が作成済みのcssとの関係で扱いやすい、あるいは、うまくいくのであればそのまますすめられても問題ないかと思います。
bon
12
ご教示ありがとうございます。
私は以下のファイルを見落としてました。おっしゃる通りの記述でした。お手数をおかけしました。
vendor\baserproject\bc-front\templates\element\header.php
<?php $this->BcBaser->globalMenu(2) ?>
\vendor\baserproject\bc-front\templates\element\global_menu.php
を
\plugins\テーマ\templates\element 配下にコピーして、以下のように修正
<?php if ($content->type == "ContentFolder"): ?>
<a href="javascript:void(0);"><?php echo $content->title . " ▼" ?></a>
<?php else: ?>
<?php $this->BcBaser->link($content->title, $this->BcBaser->getContentsUrl($content->url, false, null, false), $options) ?>
<?php endif ?>
同様にパンくずもフォルダをリンクとしないようチャレンジしたいと思います。
#分からない時は別のスレッドで質問させて頂きます。
globalMenu3.txt (7.2 KB)