2012-05-07 9 views
0

私は、項目が他の異なるモジュールにリンクされているレイアウトでメニューを作りたいと思います。Yii:別のモジュールのCMenuの項目

例: 商品モジュールのアクションにリンクされた商品 "商品"、サービスモジュールのアクションにリンクされたアイテム "サービス"。

私は'url'=>('product/<controllerID>/<actionID>')'url'=>('service/<controllerID>/<actionID>')を設定するとき、我々は製品のモジュールにしているし、メニューの「サービス」をクリックすると、URLが

index.php?r=product/service/<controllerID>/<actionID>

代わりの

index.php?r=service/<controllerID>/<actionID> 
になるので、それは動作しません

404エラーです。 (確かに、サービスモジュールは製品モジュール内にはないが、そのURLはそのように見えるからです)。

これにはどのような解決策がありますか?

+0

は、あなたがたCMenuウィジェットのためのあなたの線を表示することができますあなたのために行うための最善のことは、/を持つすべてのルートを開始しているのですか? –

+0

'url'関連配列のコードを示しました。私はこれがこの問題の最も重要なコード部分だと思います。 –

+0

私はちょうどタイプミスがないことを確かめたかったのですが、とにかく解決策があると思います。 –

答えて

3

チェックcreateUrl()ドキュメント:

URLルート。これは 'ControllerID/ActionID'の形式である必要があります。 ControllerIDが存在しない場合は、現在のコントローラIDの接頭辞がルートに付けられます。ルートが空の場合、現在のアクションとみなされます。コントローラーがモジュールに属している場合は、モジュールIDの接頭辞が付けられます。 (あなたは、モジュールIDの接頭辞をしたくない場合は、ルートが「/」スラッシュで開始する必要があります。

最後の行は、私たちのすべてを伝えること。

'url'=>array('/<moduleID>/<controllerID>/<actionID>') 
+0

解決策を確認しましたか?それは動作しませんでしたか?あなたは明確化をしたいですか? –

1

チェックこの

'url'=>$this->createUrl('/<moduleId>/<controllerID>/<actionID>') 
+2

いいえ、それは動作しませんでした..これまで私が知っている、CMenuの 'url'に関連するすべての値は、CController :: createUrl()に渡されたCHtml :: normalizeUrlに渡されます。したがって、二重ネストされたcreateUrl()は404エラーを意味します。 –

関連する問題