1

別のビューを表示するのに役立つメニューを備えたメインビューがあります。これに似ています:

<div id="page">
    <div id="menu">
            <a href="controller/page1">Page1</a>
            <a href="controller/page2">Page2</a>
    </div>
    <div id="content">
            <!-- Page1 or Page2 are displayed here -->
    </div>
</div>

私はphpのYiiフレームワークを使用しています。それは私が使用しないようにします<?php include("menuview.php"); ?>。だから私は別の解決策を探しています。これはAjaxで実行できますが、リンクをmypage / controller/Page2に変更したいと思います。Ajaxを使用すると、これにしか到達できません:mypage / controller / index#Page2

4

1 に答える 1

0

メインビューでは、インクルードする代わりに

<?php echo $this->renderPartial('_page1', array('model'=>$model)); ?>

アップデート:

好みに応じて、protected / views / controller/page1.phpおよびprotected/views / controller/page2.phpコンテンツ

protected / views / layouts / custom.php:

<?php $this->beginContent('//layouts/main'); ?>
<div id="page">
    <div id="menu">
        <?php echo CHtml::ajaxLink('Page1', array('controller/page1'), array('update' => '#content')); ?>
        <?php echo CHtml::ajaxLink('Page2', array('controller/page2'), array('update' => '#content')); ?>
    </div>
    <div id="content">
        <?php echo $content; ?>
    </div>
</div>
<?php $this->endContent(); ?>

protected / controllers / ControllerController.php:

class ControllerController extends Controller {

    /**
     * @var string the default layout for the views.
     */
    public $layout = '//layouts/custom';

    public function actionPage1() {
        if (Yii::app()->request->isAjaxRequest)
            $this->renderPartial('page1');
        else
            $this->render('page1');
    }

    public function actionPage2() {
        if (Yii::app()->request->isAjaxRequest)
            $this->renderPartial('page2');
        else
            $this->render('page2');
    }

}

UPDATE2:

アドレスバーのリンクも変更する必要がある場合は、ajaxではなく通常のリンクを使用するしかありません。<?php echo CHtml::link('Page1', array('controller/page1')); ?>

ajaxを使用するのが好ましい方法は、あなたが述べたようにハッシュを使用することです。

于 2012-04-19T15:53:06.060 に答える