2016-07-26 7 views
0

私はPHP Phalconを使用しています。私は2つの異なるメニューを実装したいと思います。最初は通常のユーザー、2番目は管理者です。メニューを簡単に拡張するための2つのメニューテンプレートが必要です。PHP - mvcフレームワークの2種類のメニュー

は今、私はこのような何かを持っている:

//Main template: 

[...] 

if (session->role == 'admin') 
    include 'adminmenu.volt' 
elseif (session->role == 'user') 
    include 'usermenu.volt' 

{{ get_content() }} //from upper templates 

[...] 

(ログに記録されないユーザーがメニューを持っていません。)

私は、これは完全に間違いであると考えられます。まず第一に、私はアクティブなポジションをどのように強調すべきか考えていません。次に、私はコントローラからメニューをコントロールしたいと思います。たとえば、データベース内の何かを変更することによって特別なオプションを追加します。 これを行う適切な方法はありますか?私は、JavaScript、モジュール、またはマイクロサービスを使用せずに簡単なソリューションを取得したいと考えています。

+0

もちろん、このコードは擬似コードです。 – Robin71

+1

アレイやXMLファイルからメニューを読み込み、ユーザーが各メニュー項目を表示できる場合はACLルールで確認してください。 – Timothy

+0

@Timothyに同意します。あなたが作成したメニューを反復するテンプレートは1つだけですロジックコンポーネント、それはコントローラかaclか何か.. –

答えて

0

おそらく部分的に探しています。 、

//This is a path relative to your views directory. 
//The following is accurate if your partials directory is a child of your views directory. 
$this->view->setPartialsDir('partials'); 

あなたはそれをやった後は実行:あなたはあなたのビューであなたのパーシャルディレクトリのセットアップを設定する必要があります

{% if this.session->get('role') == 'admin' %} 
    {{ partial('adminmenu') }} 
{% else %} 
    {{ partial('usermenu') }} 
{% endif %} 

:お使いのベースのテンプレートでは、あなたのような何かをするつもりです{{partial( 'name')}}はpartialsディレクトリのname.voltファイルを参照します。

あなたの位置を強調表示します。あなたの部分は、ディスパッチャを呼び出し、コントローラとアクションが何であるかを尋ねることができます。

{{ this.dispatcher.getControllerName() }} and {{ this.dispatcher.getControllerName() }} 

あなたはhref属性に対するこれらの値をチェックし、それが本当であれば、アクティブフラグを設定することができます。