2

Yii でメニューをまとめました (Yii を使用した最初のプロジェクト) は、次のようになります。

$this->widget('zii.widgets.CMenu',array(
    'items'=>array(
        array('label'=>'Home', 'url'=>array('/')),
        array('label'=>'Examples', 'url'=>array('/examples')),
        array('label'=>'Contact', 'url'=>array('/contact')),
        array('label'=>'FAQ', 'url'=>array('/faq')),
        array('label'=>'Blog', 'url'=>array('/blog')),
        array('label'=>'Order', 'url'=>array('/order')),
    ),
));

/examplesなどのこれらの各 URL パスは、 config で定義されたルートであるため、 site/examplesのようには見えません。

ホーム リンクについては、サイトのルート レベルにリンクするようにしています。どうやら、CMenu ウィジェットは最初にCHtml::normalizeUrl()を介して URL を渡し、最終的に現在のページを指すようにします。したがって、例のページにいる場合、ホーム リンクは/examplesを指しています。

これは、 normalizeUrl() が行うことを示しています。

入力パラメーターが空の文字列の場合、現在要求されている URL が返されます。

入力パラメーターが空でない文字列の場合、有効な URL として扱われ、変更なしで返されます。

入力パラメーターが配列の場合は、コントローラー ルートおよび GET パラメーターのリストとして扱われ、CController::createUrl メソッドが呼び出されて URL が作成されます。

空の文字列を渡そうとしましたが、期待どおりに現在のリクエスト URL を指しています。空でない文字列である「/」を渡そうとしましたが、現在のリクエスト URL を指しています。また、配列を渡そうとしましtrim() expects parameter 1 to be string, array givenたが、CMenu が文字列を期待しているため、終了します。

私は Yii のやり方で物事を行おうとしていますが、ホームページに戻るのと同じくらい簡単なことに対処できない場合は、メニューを静的のままにしておくことを真剣に考えています。

TL;DR Yii の CMenu ウィジェットで "/" またはベース ドメインへのリンクを作成するにはどうすればよいですか?

4

4 に答える 4

4

配列を使用するurlと、ルーターの設定に基づいて URL を作成しようとしますが、文字列をパラメーターとして渡すと、文字どおりに渡されます。つまり、次のようになります。

$this->widget('zii.widgets.CMenu',array(
    'items'=>array(
        // Root hardcoded
        array('label'=>'Home', 'url'=>'/'),
        // Root dynamic (works also if not in domain root)
        array('label'=>'Home', 'url'=>Yii::app()->baseUrl),
        // External url
        array('label'=>'Examples', 'url'=> 'http://example.com/'),
        // current url
        array('label'=>'Contact', 'url'=> ''),
        array('label'=>'FAQ', 'url'=>array('/faq')),
        array('label'=>'Blog', 'url'=>array('/blog')),
        array('label'=>'Order', 'url'=>array('/order')),
    ),
));

ああ、これは URL を使用できるすべての場所のルールです。

于 2013-04-12T12:28:48.733 に答える
2
array('label'=>'Home', 'url'=>Yii::app() -> request -> baseUrl)
于 2013-04-12T12:30:00.063 に答える
2

別のオプション

array('label'=>'Home', 'url'=>Yii::app()->homeUrl)

baseUrlこれは、あなたがあなたのものでない場合に役立ちますhomeUrl

于 2013-04-12T12:44:43.310 に答える