複数のメニュー

show_menu2、バージョン4.9x

Show_Menu2は、CMS WebsiteBakerのコードスニペットです。 WebsiteBaker2.7以来、それはCMSに含まれています。
以前のshow_menu関数は完全に置換され、show_menu2に拡張されます。 メニューの作成に必要なすべてのデータは、単一のデータベースクエリによって生成されます。 生成されたHTMLコードの広範な調整の可能性により、すべての可能なメニュータイプ(リスト、ブレッドクラム、サイトマップなど)。 が生成される。

  • インストール
  • Show_Menu2を使用して
  • FAQ
  • 関数
  • HTML出力
  • パラメータ
  • 詳細オプション
  • 書式文字列
  • 条件付き書式設定
  • フォーマッタ

installationup

show_menu2は通常websitebakerに存在するため、インストールは必要ありません。 期待に反して、それが存在しない場合は、ここでダウンロードできます。

Show_Menu2Upの使用

show_menu2を使用するには、メニューを表示するテンプレートを変更する必要があります。 注意:古いメニュー呼び出しを置き換える場合は、show_menu2が必要とする対応する新しいパラメータも使用する必要があります。

ほとんどの場合、show_menu2の少なくとも4つのパラメータを持つ標準呼び出しで十分です。 この場合、デフォルト値が使用され、現在のページと現在のページのサブページを表示するメニューが作成されます:

show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);

注意:show_menu2の呼び出しはPHPであり、通常はPHPコード文字で囲む必要があります(呼び出しがすでにPHPコード内にある場合を除きます)。:

 <?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>

このデフォルトのメニューは、CSSを使用して簡単に書式設定できるいくつかのクラスを持つリストベースの完全なメニューを既に作成しています。 例えば、クラス”menu-current”は、現在のメニュー項目の<li>タグに追加されます。 さらに、サブ項目の各メニュー項目には、クラス”menu-expand”が含まれています。 これにより、メニュー項目ごとに非常に差別化されたCSSルールを作成できます。
例えば:

li.menu-expand { font-weight: bold; }li.menu-current { background: red; }

“HTML出力”セクションには、どのクラスがどの要素に割り当てられているかの詳細な説明が含まれています。 Show_menu2関数呼び出しで異なるパラメータを使用することにより、非常に広範で異なるメニュー構造を作成することもできます。 たとえば、メニュー構造の最上位レベルのメニュー項目のみを表示するには、次の呼び出しを使用できます:

show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);

または、たとえば、現在のページの2つのサブレベルまでを表示するには、次のようにします:

show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);

さまざまなメニュー構造を作成するには、多くの可能性があります。 Klick

FAQup

Q:私はプログラマーではありません。 簡単な文書はありませんか?
: いいえ、これはすでに簡単なドキュメントです。

Q:ドロップダウンメニューを作成するにはどうすればよいですか?
A:これはshow_menu2とは関係ありません。 ドロップダウンメニューを作成するには、それぞれのテンプレートのCSSコードを調整するだけです。 必要な調整は、例えばWebsiteBakerアドオンリポジトリの”allcss2″テンプレートにあります-> https://addon.websitebaker.org/

Q:多言語サイトのページで検索機能を使用した後にメニューが表示されなくなるのはなぜですか?
A:使用されているテンプレートに必要な行がありません:

1. WB管理バックエンドで: オプション->詳細オプションの表示->検索オプション->ヘッダー-<フォーム>タグの直後に次の行を挿入します:

<input type="hidden" name="referrer" value="" />

2. インデックスに次の行を挿入します。検索の開始<フォーム>タグの直後に使用されるテンプレートのphp:

<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />

Q:多言語か。 それは素晴らしいですね。 どのようにそれを行うのですか?
: https://help.websitebaker.org/en/designerguide/multilingual-websites.php

Q:ページが呼び出されるたびに、SM2は次の警告メッセージを生成します。
“show_menu2error:$aOptions is invalid. グループ1からのフラグが供給されていません!”
: 間違った値または間違った数の値が関数に渡されました。
PARAMETERS aOptionsパラメータに渡す正しいフラグ値については、PARAMETERSセクションを参照してください。

Q:メニューの各エントリに異なるクラス/画像/色/ウィジェットを使用するにはどうすればよいですか?
A:format aItemOpen文字列の書式文字列を使用します。 メニュー項目ごとに一意のクラスまたはidを作成し、CSSまたはJavascriptでその項目を参照して、必要なことを実行します。
メニュー項目ごとに一意のクラスを追加するには(または同様の)):

"<li><a href="" target="" class=" p"></a>"

… のようなメニュー項目を作成します。..

<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>

あなたのCSSのようにこれを参照してください:

a.p45 { color: red; }

各メニュー項目(または同様のもの)に一意のIDを追加するには、次の手順を実行します。):

"<li><a href="" target="" class=""></a>"

… のようなメニュー項目を作成します。..

<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>

あなたのCSSのようにこれを参照してください:

a#p45 { color: red; }

IDは、そのメニューが生成され、ページ上に1回だけ表示される場合にのみ使用できることに注意してください(HTML IDはページ内で一意でなければならない

FUNCTIONup

show_menu2の完全な呼び出しとデフォルトのパラメータ値は次のとおりです:

show_menu2( $aMenu = 0, $aStart = SM2_ROOT, $aMaxLevel = SM2_CURR+1, $aOptions = SM2_TRIM, $aItemOpen = '</a>', $aItemClose = '</li>', $aMenuOpen = '', $aMenuClose = '</ul>', $aTopItemOpen = false, $aTopMenuOpen = false);

“パラメータ”セクションには、個々のパラメータの詳細な説明が含まれています。
各パラメータは絶対に正しく使用する必要があります。 以下のルールが役立ちます:

$aMenu=0は、ほとんどの場合、最良の値です。
ast aStartは、ページIDまたは”SM2_”で始まる値のいずれかでなければなりません。
am aMaxLevelは”SM2_”で始まる値のみを取得できます。
$aOptionsいくつかの特殊なケースを除いて、”SM2_”で始まる値のみが許可されます。
他のすべてのパラメータには、メニューの出力を制御する(HTML)タグが含まれています。
$aItemOpenから始まる各パラメータには、それぞれのデフォルト値を取得するためにfalseの値を渡すことができます。

これは、たとえば、番号付きリストを作成するために使用することができますが、デフォルト値は個々のメニュー項目に使用されます:

show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');

注意:$aOptionsを含めて、すべてのパラメータを明示的に渡す必要があります!

HTML Outputup

HTML出力は、どのパラメータが関数に渡されるかによって大きく異なります。 これに関係なく、後続のクラスは常に各メニューに使用され、必要に応じて個々のメニュー項目にも複数のクラスを含めることができます。

クラス 割り当て
menu-top 最初のメニュー項目のみ。
menu-親 任意のメインメニュー項目。
menu-current 現在のページのメニュー項目のみ。
メニュー-兄弟 現在のページのすべての”兄弟”。
menu-child 現在のページの任意のサブメニュー。
menu-サブメニューがあるメニューを展開します。
menu-first 任意のメニューまたはサブメニューの最初の項目。
menu-last 任意のメニューまたはサブメニューの最後の項目。
次のクラスは、SM2_NUMCLASSフラグが設定されている場合にのみ追加されます:
menu-N 各メニュー項目で、Nはそれぞれのメニュー項目の0から始まる絶対メニューの深さを表します。
だから、トップレベルは常にmenu-0、次のレベルはmenu-1、というようになります。
menu-child-N 現在のページの各サブメニュー。Nはサブメニューの相対的な深さを表し、0から始まります。

HTML出力の例:

<ul class="menu-top menu-0"> <li class="menu-0 menu-first"> ... </li> <li class="menu-0 menu-expand menu-parent"> ... <ul class="menu-1"> <li class="menu-1 menu-expand menu-first"> ... <ul class="menu-2"> <li class="menu-2 menu-first"> ... <li class="menu-2 menu-last"> ... </ul> </li> <li class="menu-1 menu-expand menu-parent"> ... <ul class="menu-2"> <li class="menu-2 menu-expand menu-current menu-first"> ... ** CURRENT PAGE ** <ul class="menu-3"> <li class="menu-3 menu-child menu-child-0 menu-first"> ... <ul class="menu-4"> <li class="menu-4 menu-child menu-child-1 menu-first"> ... </li> <li class="menu-4 menu-child menu-child-1 menu-last"> ... </li> </ul> </li> <li class="menu-3 menu-child menu-child-0 menu-last"> ... </li> </ul> </li> <li class="menu-2 menu-sibling menu-last"> ... </li> </ul> </li> <li class="menu-1"> ... </li> <li class="menu-1 menu-expand menu-last"> ... <ul class="menu-2"> <li class="menu-2 menu-first menu-last"> ... </li> </ul> </li> </ul> </li> <li class="menu-0 menu-last"> ... </li> </ul> 

これは、一つのページに複数のメニューを使用するのに便利です。 メニュー番号0は現在のページのデフォルトメニューであり、SM2_ALLMENUはシステムで使用されているすべてのメニューを返します。

$aStart

は、メニューの作成を開始するレベルを指定します。 ほとんどの場合、これは表示されるメニューの最上位レベルになります。 次のいずれかの値を使用できます。

SM2_ROOT+N

は、トップレベルより下のNレベルを開始します。

SM2_ROOTはトップレベルから開始します
SM2_ROOT+1は、最上位層より下のレイヤーを開始します
SM2_ROOT+2は、トップレベルより下の2つのレベルを開始します

SM2_CURR+N

現在のレベルより下のnレベルを開始します。

SM2_Currは現在のレイヤーから開始します。 現在のレベル
SM2_CURR+1のすべての兄弟は、すべてのサブレベルで現在のレイヤーの下のレイヤーを開始します。

page_id

は、指定されたページidを持つページを親要素として使用します。
このページのすべてのサブメニューが表示されます。 (ページidは、管理者バックエンドでページを編集することによって決定することができ、ブラウザのアドレスバーに表示されます: http://SITE/admin/pages/modify.php?page_id=35

$aMaxLevel

表示できるレベルの最大数。 表示
は、$aStartで指定されたレベルから、ここで指定されたレベルまで開始されます。
SM2_ALL

制限なし、すべてのレベルが表示されます。

SM2_CURR+N

は常に現在のページ+Nレベルを表示します。

SM2_CURR現在のレイヤ(サブレイヤなし)
SM2_CURR+3すべての親+現在+3サブレベル

SM2_START+N

は常に開始レベル+Nレベルから開始します。
現在のページがどのレベルにあるかに関係なく、レベルが表示されます。

SM2_START開始レベルから1つのレベル。
SM2_START+1スタートレベル+1以下のレベル。

SM2_MAX+N

開始レベルから最大Nレベルを表示します。
現在のレベルより下のレイヤーは表示されません。

SM2_MAXスタートプレーンのみ(SM2_STARTと同じ効果)
SM2_MAX+1スタートレベルとその下の一つのレベル。

$aOptions

異なるメニュー生成オプションのための特別なフラグ。 ORリンク(|)を使用して相互に組み合わせることができます。
たとえば、TRIMとPRETTYの両方を定義するには、(SM2_TRIM|SM2_PRETTY)を使用します。

グループ1
——-
このグループから常に1つのフラグを指定する必要があります。 これらのフラグは、メニューツリー内の兄弟要素が出力でどのように抑制されるかを決定します。

SM2_ALL

メニューツリーのすべての分岐を表示

 A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2 -> B-3 -> B-4

SM2_TRIM

現在のパス内のページのすべての兄弟メニューを表示します。
パス内にない項目のすべてのサブメニュー。
は削除されます。

 A-1 -> B-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 A-2 

SM2_CRUMB

は、メニューの階層リンクパス、つまり現在の
メニュー項目とそれにつながるすべてのメニュー項目を表示します。

A-1 -> B-2 -> C-2 (CURRENT)

SM2_SIBLING

SM2_TRIMと同様ですが、現在のページの兄弟メニューのみが表示されます。 他のすべての項目は抑制されます。

 A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3 

グループ2
——-
これらのフラグは任意で、任意の数で組み合わせることができます。

SM2_NUMCLASS

は、番号付きのメニュークラス”menu-N”と”menu-child-N”を追加します。

SM2_ALLINFO

データベースのページテーブルからすべてのフィールドをロードします。
これはかなり高いメモリ消費を引き起こし、
する必要がありますので、注意して使用する必要があります。
これは、例えば、キーワード、ページの説明、および
通常は
ではない他のすべての利用可能な情報をロードすることができることを意味します。
ご注意ください: このフラグは、schow_menu2の最初の呼び出しで設定する必要があります
は、それぞれのメニュー IDのために、またはSM2_NOCACHEと
と一緒に使用することができます。

SM2_NOCACHE

データベースから読み取られたデータは、show_menu2が再度呼び出されたときには再利用されませんが、データベースから再度読み取られます。

SM2_PRETTY

は、空白と
改行を含むメニューのHTML出力を読みやすい形式にします。 これは、メニュー出力をデバッグするときに特に便利です。

SM2_BUFFER

はHTMLコードを直接出力しませんが、内部的に保存し、完全な文字列として出力します。

SM2_CURRTREE

は、他のすべてのトップレベルメニューを表示から除外します。
現在のメニューブランチのメニュー項目のみが表示されます。
必要に応じて、このフラグはグループ1の任意のフラグと組み合わせることができます。

SM2_ESCAPE

はhtmlspecialcharsをメニュー文字列に適用します。
これは古いWebsiteBakerのインストールに必要な場合があります。
有効なHTML出力を生成します。

SM2_SHOWHIDDEN

非表示ページは、通常、アクティブなとき(現在のページまたは親ページ)を含め、すべての時間を非表示にします。
アクティブな場合を除いてページを非表示にしたいときは、プライベートページを使用します。 ただし、リリース4.8との互換性のために、非表示のページがアクティブなときに表示されるようにするには、このフラグを指定します。

SM2_XHTML_STRICT

は、orでフォーマットされたリンクのターゲット指定を削除し、引数title=””を挿入することにより、リンクのXHTML互換性を保証します。 手動でコンパイルされたリンクの場合、設計者はXHTMLの適合を担当します。

SM2_NO_TITLE

は、Title属性または書式設定されたリンクのコンテンツの出力を抑制します。
このパラメータには、オプションが連想配列として渡される拡張モードもあります。 詳細については、”詳細オプション”セクションを参照してください。 ただし、ほとんどのアプリケーションでは、これは必須ではありません。

$aItemOpen

これは、個々のメニュー項目が開始される書式文字列を定義します。 $ATopItemOpenを使用して、最初のメニュー項目に対して別の書式文字列を定義できます。
このパラメータがfalseに設定されている場合、デフォルトの書式文字列
‘</a>’を使用して、WebsiteBaker標準関数show_menu()との互換性を確保します。
CSSクラスを使用した書式設定は、<a>タグに適用すると簡単になることが多いため、次の書式文字列を使用することをお勧めします。'<li></a>’。
このパラメータは、メニューの書式設定クラスのインスタンスとしても使用できます。 より詳細な説明は、フォーマッタのセクションで見つけることができます。 ここでフォーマッタが指定されている場合、after aItemOpenの後のすべての引数は無視されます。

$aItemClose

この文字列は、各メニュー項目を完了します。 ご注意:これはフォーマット文字列ではなく、キーワードは置き換えられません!
このパラメータがfalseに設定されている場合、デフォルトの'</li>’が使用されます。

$aMenuOpen

この書式文字列は、メニュー項目のリストを開きます。 At aTopMenuOpenを使用して、最初のメニューに対して別の書式文字列を定義できます。
このパラメータがfalseに設定されている場合、デフォルト値”が使用されます。

$aMenuClose

この文字列は各メニューを完了します。 ご注意:これはフォーマット文字列ではなく、キーワードは置き換えられません!
このパラメータがfalseに設定されている場合、デフォルトの'</ul>’が使用されます。

$aTopItemOpen

最初のメニュー項目の書式文字列。 このパラメーターがfalseに設定されている場合、$aItemOpenと同じ書式文字列が使用されます。

$aTopMenuOpen

最初のメニューの書式文字列。 このパラメータがfalseに設定されている場合は、amen aMenuOpenと同じ書式文字列が使用されます。

ADVANCED OPTIONSup

parameter aoptionsパラメータは二つの方法で使用できます。 まず、上記の”パラメータ”セクションで説明したように、このタイプは大部分のユースケースに十分でなければなりません。 ただし、特別な場合に特別なオプションに対処できるようにするには、必要な値を連想配列として指定する必要があります。
注意:ここではSM2_*フラグも必要であり、’flags’として渡さなければなりません。

‘flags’

**CONCELARY REQUIRED**これらはPARAMETERS aOptionsの下のパラメータセクションで上記で説明されているフラグです。

‘notrim’

これは、$aStartで定義されたメニューレベルに対して常に表示されるレベルの数を定義します。 これにより、これらのレベルでSM2_TRIMフラグが無視されます。

この配列を使用するには、最初に作成してから、作成した配列でa aOptionsパラメータを指定することをお勧めします:

$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);

書式文字列Sup

次のタグは、format aItemOpenおよびamen aMenuOpenの書式文字列で使用でき、対応するテキストに置き換える必要があります。

へのURL

<クラスのない>タグ:

'<a href="" target="">'
<クラスを持つ>タグ:

'<a href="" target="" class="">'
<クラスを持つli>タグ:

'<li class="">'
<クラスを持つul>タグ:

'<ul class="">'
このページのクラス一覧
メニュータイトル
のテキスト(SM2_NOESCAPEフラグが設定されていない限り、HTMLエンティティはエスケープされます)
通常表現の画像ファイルへのURL
アクティブ/ホバー表示の画像ファイルへのURL
ページタイトルテキスト
(SM2_NOESCAPEフラグが設定されていない限り、HTMLエンティティはエ)
ページ関連の画像ファイル
<a>タグのページのURL
<a>タグのページターゲット
現在のメニュー項目のページID。
親メニュー項目のページID。
ページレベルでは、これは”menu-N”CSSタグで使用されているのと同じ番号です。
現在のメニュー項目の兄弟の数。
このメニュー内のすべての兄弟の数。
条件(詳細については、”条件付き書式設定”の項を参照してください)

次のタグは、SM2_ALLINFOフラグが設定されている場合にのみ使用できます。

ページの説明
ページのキーワード

条件付き書式設定up

条件付き書式設定ステートメントは、次のいずれかの形式を取ることができます:


a

の条件。 詳細は以下をご覧ください。

B

条件が満たされたときに使用される式。
これは、文字’}’を含まない任意の文字列にすることができます。
が含まれている可能性があります。 セクション
書式文字列’から任意の書式文字列を含めることができますが、それ以上の条件テストはできません(文字’}’は許可されていないため)。

c

条件が満たされていないときに使用される式。
これは、文字’}’を含まない任意の文字列にすることができます。
が含まれている可能性があります。 セクション
書式文字列’から任意の書式文字列を含めることができますが、それ以上の条件テストはできません(文字’}’は許可されていないため)。

条件は、1つ以上のブール比較の組み合わせです。
複数の比較が必要な場合は、他の比較と組み合わせる必要があります
は、||(boolean or-OR)または&&(boolean and-AND)を使用してリンクできます。

単一の比較は、左のオペランド、演算子、および右のオペランドで構成されます。
例X==Y-ここで、Xは左のオペランド、==演算子、Yは右のオペランドです。

左オペランド。 次のいずれかのキーワードを指定する必要があります:
クラス このクラスが存在するかどうかを確認します。 “==”と”!=”演算子は許可されています。 この場合、演算子は、「等しい」または「等しくない」の代わりに、「含む」または「含まない」という意味を持ちます。
レベル ページレベルをチェックします。
sib 現在のページの兄弟の数を確認します。
sibCount 現在のメニューで兄弟の総数を確認します。
id ページidを確認します。
ターゲット ターゲット仕様の検証。
オペレーター。 次のいずれかである必要があります:
< より少し
<= 以下に等しいか、以下に等しいか
== イコール
!= 等しくない
>= に等しいかそれ以上の場合は、次のように
> より大きい
右オペランド。 このオペランドの型は、左オペランドに使用されるキーワードによって異なります。
クラス “出力”セクションで指定されている”menu-*”クラス名のいずれか。
レベル 次の値に対してページレベルをチェックします:

  • <番号>絶対ページレベル
  • ルートはページのトップレベルです
  • グラニー親ページレベルより上のページレベル
  • 親親ページレベル
  • 現在現在のページレベル
  • 子下位ページレベル
id 次の値に対してページidをチェックします:

  • <番号>絶対ページid
  • 親親ページid
  • 現在現在のページid
sib 正の整数、またはこのメニューの兄弟の数をチェックするための”sibCount”。
sibCount 正の整数
target 可能なターゲット指定を表す文字列。
次の例では、”true”になり、trueの場合は式{exp}が実行されます:
サブメニューがあります
メニューの最初のエントリが次の場合
メニューの最初の項目ではありません
メニューの最後のエントリが次の場合
一番上のレベルに位置しています
トップレベルではありません
メニュー内の2番目のエントリが次の場合には、次のようになる
複数のエントリを持つメニューにある場合
メニューにあります それは正確に2つの項目を持っていません
兄弟メニューまたは兄弟メニューのサブメニューにあります
現在のidの親ポイントです
文字列’_self’がtarget属性に含まれています。

else句が追加された場合、それ以外のすべての場合に実行されます。
たとえば、ifチェックが間違っている場合、”foo”は常に実行されます。:

メニューの第二の項目ではありません
二つ以上のエントリを持つメニューにはありません
多重比較では、式”exp”は次の場合にのみ実行されます:
メニューの最初のエントリまたは4番目以上のエントリです
現在のエントリがサブメニューであり、サブメニューがある場合

ご注意ください:
すべてのチェックは、それらが指摘されている順序で実行されます。:

  • 可能なループのチェックはありません(すべてのチェックは常に実行されます)。
  • チェックはグループ化されていません(チェックの括弧はサポートされていません)
  • これらのものは両方とも同じ値を持っています。

FORMATTERup

注意:これは高度でめったに使用されない機能です!

PHPプログラミングの豊富な知識を持つことで、show_menu2の定義済みの
フォーマットを独自のもので使用することができます。
に含まれます。phpのshow_menu2フォーマッタの書き方を見ることができます。
使用する必要があるAPIは次のようになります:

class SM2_Formatter{ // called once before any menu is processed to allow object initialization function initialize() { } // called to open the menu list function startList($aPage, $aUrl) { } // called to open the menu item function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { } // called to close the menu item function finishItem() { } // called to close the menu list function finishList() { } // called once after all menu has been processed to allow object finalization function finalize() { } // called once after finalize() if the SM2_NOOUTPUT flag is used function getOutput() { }};

WebsiteBakerisはGNU General Public License

の下でリリースされています

コメントを残す

メールアドレスが公開されることはありません。