maru
1
こんにちは。
テンプレートのカスタマイズを行なっています。
フォルダ(library)を作成、フォルダの下に固定ページを作成しています。
サイトツリーとして
https://example.jp/folder/index
|—child01
|—child02
|—child02
上記構成で「index」にて「child01」「child02」「child03」のページタイトル及び URL を取得したいと思いますが、関数はあるのでしょうか?
追記:公開すると「child01」「child02」「child03」の位置がずれてしまっていますが「index」下の階層になるペーじです。
リファレンスを確認しました。
https://wiki.basercms.net/ver4/関数リファレンス#.E5.9B.BA.E5.AE.9A.E3.83.9A.E3.83.BC.E3.82.B8.EF.BC.88.24this-.3EBcPage.EF.BC.89
子のページのタイトル及びURLを取得できる関数はないでしょうか。
ちなみに index を非公開にした場合はページタイトルが取得されており何から方法があるのかと思っていますが自分のスキルでは理解できませんでした。
アドバイス頂ける嬉しく思います。
【環境情報】
・baserCMSのバージョン:4.4.7
・レンタルサーバー名:さくらインターネット スタンダード
・使用テーマ:bootstrap4-skelton
・PHPスキル: E
同一階層上のタイトルやURLを取得する場合は、ウィジェットのローカルナビゲーションを使うのが、最も簡単な方法です。
ある程度、PHPが書けるようなら、
$this->BcBaser->getContentsMenu(「親フォルダのID」, 1, $this->request->params['Content']['id'], ['element' => '「出力するエレメントファイル名」']);
を使ってエレメントに出力する方法もあります。
これで、出力するエレメントファイル内に$treeという変数の中に配列で格納されます。
エレメント内で$treeをforeachで回すことで、
各ページのURLやタイトルが取得できます。
まとめるとこんな感じです。
■ 出力したいページ
<?php
$parent = $this->BcContents->getParent($this->request->params['Content']['id']);
$parentId = $parent['Content']['id'];
echo $this->BcBaser->getContentsMenu($parentId, 1, $this->request->params['Content']['id'], ['element' => 'local_menu']);
?>
■エレメント(仮に「local_menu」としています)
<?php
if (!isset($currentId)) {
$currentId = null;
}
if (isset($tree)) {
echo '<ul>';
foreach($tree as $content) {
if ($content['Content']['title']) {
// indexや、管理画面にて、「公開ページのメニューより除外する」するページを除外
if(!empty($content['Content']['exclude_menu']) || $content['Content']['name'] == 'index') {
continue;
}
$liClass = '';
if ($content['Content']['id'] == $currentId) {
$liClass = ' class="current"'; // カレントクラス
}
$options = ['escape' => true];
// 管理画面にて、「メニューのリンクを別ウィンドウ開く」をターゲットブランクにする
if (!empty($content['Content']['blank_link'])) {
$options['target'] = '_blank';
}
echo '<li'. $liClass. '>';
$this->BcBaser->link($content['Content']['title'], $content['Content']['url'], $options);
// 子階層があれば、もう一度ループを回す
if (!empty($content['children'])) {
$this->BcBaser->element('local_menu', ['tree' => $content['children']]);
}
echo '</li>';
}
}
echo '</ul>';
}
?>
「いいね!」 1
maru
3
katokaisya 様
アドバイスをありがとうございます。
関数は用意されていないですね。
PHP のスキルはないですがコードを教えて頂いたので試してみます。
maru
4
katokaisya 様
アドバイスをありがとうございます。
教えて頂いたソースをエレメント化し読み込ませることで、希望することが出来ました。
エレメント化する際に少しカスタマイズさせていただきました。
リストタグのは表示させるページに記載し、クラス等を入れたいため
echo '<ul>';
echo '</ul>';
上記は削除させていただきました。
またソースには除外ページの対処、カレントを示すクラスの挿入、ターゲットブランクの対応等、細かい所まで気を使っていただき誠にありがとうございました。
今回は書籍を紹介するサイトを作成しており、書籍紹介ページで巡回性をよくするため、同じジャンルの書籍はページ下部にタイトルとリンクを設けたいと思いました。
手書きで掲載しても良かったのですが今後、書籍をも増えるため手書きでは限界を感じていた次第です。
是非とも開発者にお願いしたいです。
今回のソース相当を関数化して頂けると嬉しく思います。今後ご検討いただければ幸いです。
「いいね!」 1
ogo
5
関数化について、issue立てておきました。(他の件と比較しながら対応されると思うので、実現されるかわからないですが…!)