2011-09-09 23 views
3

[最終更新日時]Zend Frameworkでメニューアイテムを表示/非表示する方法

私はZendフレームワークとPHPで作業していますが、Zend Navigationでいくつかの問題があります。ここに私の最初の質問です。何か問題があったら、教えてください。私はそれを修正します。

私は私のメニューを含むナビゲーションxmlファイルを持っている私のアプリケーション

Home 
Login 
Logout 
Member's Page 

でこのように見えるメニューを持っています。

<nav> 
<home> 
    <label>Home</label> 
    <uri>/</uri> 
</home> 
<login> 
    <label>Login</label> 
    <uri>/index/login</uri> 
</login> 
<logout> 
    <label>Logout</label> 
    <uri>/index/logout</uri> 
</logout> 
<member> 
    <label>Member's Page</label> 
    <uri>/index/member</uri> 
</member> 
</nav> 

また、この

<div class="top-level"> 
<?php 
foreach ($this->container as $page) { 
    if ($page->isVisible()) { 
     if ($page->isActive(true)) { 
      if ($page->isActive(false) 
       )$page->setClass("active"); 
      else 
       $page->setClass("open"); 
      echo $this->navigation()->menu()->htmlify($page); 
//... the same continue for the 3 menu level 

を含むmenu.phtmlは最後に、私のlayout.phtmlで、私はメニューに今の

<?php 
     $partial = array('menu.phtml', 'default'); 
     $this->navigation()->menu()->setPartial($partial); 
     echo $this->navigation()->menu()->render(); 
?> 

をレンダリングするためにこれを持って、私のメニューが良い作品私のメニューには常にログインとログアウトが表示されません。それで、私がする必要があるのは、ログインしているときにログインを非表示にし、ログアウトしたときにログアウトを非表示にすることです。私が始めたとき、それはかなりシンプルに見えましたが、それはまだありますが、私はそれを働かせることはできません。私はどのようにして、ログインしたユーザーに応じて項目を表示して非表示にすることができないのか分かりません。私は実際にそれを機能させる必要があります。なぜなら、将来他のアイテムを隠す/表示する必要があるからです。

これを行う方法はありますか?

ありがとうございます!

EDIT:

私は現在、役割や権限付与のためのZend ::認証やZend_Aclではを使用していませんよ。ユーザーがログインしているかどうかを知りたい場合は、ユーザーがログインしているときにのみ有効なトークンがセッション内にあります。可能であれば、メニューを変更せずにメニューを使用したいと考えています。

UPDATE:

は、私はそれが示唆されたものよりも、別の方法で作業していました。私は本当にそれがきれいな方法であるかどうかは分かりませんが、今のところ仕事をしています。だから、私のXMLナビゲーションファイルは次のようになります

<menuAnonymous> 
    <home> 
    <label>Login</label> 
     <uri>/login</uri> 
    </home> 
    </menuAnonymous> 
    <menuLogged> 
    <home> 
     <label>Logout</label> 
     <uri>/Logout</uri> 
    </home> 
    </menuLogged> 

私はこのような私のブートストラップで両方を初期化します。

$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'menuNotLogged');  
$container = new Zend_Navigation($config); 
Zend_Registry::set('main',$container); 

私のレイアウトでは、自分のトークンを見て、それに応じてメニューを表示します。私が今欲しいよう

if ($tokenValid) { 
    echo $this->navigation()->menu()->render(Zend_Registry::get('main')); 
} else { 
    echo $this->navigation()->menu()->render(Zend_Registry::get('logged')); 
} 

だから、それは働いているが、私はまだクリーナーそれをやりたいので、あなたは私を助けるために何か提案がある場合は...ありがとうございました!

答えて

1

私が使用したソリューションで質問を更新しましたが、後でもっと良い方法を見つけるかもしれませんが、今のところそれがあります。私はここで解決策を見つけられなかったので、私は自分自身の質問に答えています。ご協力いただきありがとうございます !

1

http://www.zend.com/en/resources/webinars/frameworkの「Leveraging Zend_Navigator」ウェビナーをご覧ください。特定のロール/ ACLにナビゲーションを結び付ける方法について説明します。

+0

しかし、私はACLを使用していないので、私はこれらの詳細で私の質問を編集します、ありがとう! – Fanny

+0

ウェブセミナーをご覧ください。 XMLにいくつかの追加情報を保存し、ナビゲーションに情報を渡して関連する項目のセットを取得するだけです。したがって、2つの偽のロール(匿名ユーザーとログインユーザー)を簡単に作成し、これらを使用してユースケースの正しいメニュー項目を表示できます。 – wimvds

+0

私の遅い答えに申し訳ありません、通知されていないと何かに取り組んでいた。私はそれを見て、私は何が働いているかに応じて答えを受け入れるために戻ってきます。ありがとうございました – Fanny

関連する問題