2011-08-03 3 views
0

私は、どのメニューレベルがページに表示されているかを返す関数を書こうとしています...テンプレート内の<%if%>ステートメントを使用している瞬間:メニューレベルを返すsilverstripe関数

ページ上の3メニューレベルがある場合は、私が欲しいもの <div class="navA navB navC">

を返し、

<div class="<% if Menu(1) %>navA<% end_if %> <% if Menu(2) %>navB<% end_if %> <% if Menu(3) %>navC<% end_if %>">...</div> 

はすなわち<div class="navC">

、おかげで現在のページだけで最下位レベルのメニューを返す関数である

+1

ご迷惑をおかけしますが、ご質問を放棄すると、今後の問題についてコミュニティが回答を得られなくなる可能性があります。 a)答えを受け入れるか、b)フィードバックがあなたの問題を解決しない理由を投稿するか、c)あなた自身が見つけた解決策を投稿して、問題が解決済みとマークされるようにしてください。ここで答えを見つけてください)。 – schellmax

答えて

0

(未テスト)次はどう:

<div class="<% if Menu(3) %>navC<% else_if Menu(2) %>navB<% else %>navA<% end_if %>">...</div>

+0

それはありがたいことですが、それは意味がありますが、ええと...私はテンプレートの代わりにコントローラにこれを期待していました。私はちょうどこの1つを助けるためにあらゆる文書を見つけることができません。 – JimmyJazz

+0

その場合、@ schellmaxのソリューションを使用してください - '$ this-> getMenu($ level)'は良いはずです。 IMHOこれは非常にフロントエンド固有のものなので、私はテンプレートアプローチに固執します。たとえば、情報の機械可読表現を提供する場合は、おそらくXMLまたはJSONを使用します。あなたはおそらくクラス(私はあなたがそれをスタイリングのために使用したいと思うと思う)を必要としません - それで、私はジェネリックコントローラーではなく、特定のテンプレートに入れておきます。少なくとも、私はこれらの問題にアプローチしています... – xeraa

1
...あなたは、ロジック・重いもののためにコントローラにいくつかのカスタムコードを使用して検討する必要がありますが、これはあなたが軌道に乗る必要があります

これは完全に可能です。

function LowestLevel() { 
    $i = 1; 
    while($this->getMenu($i)->count() > 0) $i++; 
    return 'level'.($i-1); 
} 

は、今あなたがそうのようなテンプレートでそれを呼び出すことができます: は自分Page_Controllerクラスに以下を追加し

<div>lowest level: $LowestLevel</div> 

$ LOWESTLEVELは 'LEVEL1'、 'レベル2' などが印刷されます

あなたのクラス名が 'navA'、 'navB'のようなものでなければならない場合は... 'level1' - > 'navA'のようなマッチングをする必要があります。あなたはこれに関する助けが必要です。

関連する問題