0

私は Yii と php の初心者です。Yii チュートリアル Web サイトによって生成されたデフォルトのインデックス ページ (CListView を使用) に基づいてページを作成しようとしています。gii は私のモデルを生成し、CRUD にはコントローラーとインデックス ページがあり、ほぼ 100 ページあります。やりたいことは次のとおりです。

「コントローラー/インデックス」ビューで結果にテキストフィールドと条件を指定するボタンを追加します。

たとえば、フィルター「年」を追加したいので、CListView のすぐ上にフォームを追加しました。

<?php $this->beginWidget('CActiveForm', array('id'=>'fromid')); ?>
   <?php echo CHtml::textField('year');?>
   <?php echo CHtml::submitButton('search',array('submit'=>'index.php?r=mycontroller/index')); ?>
<?php $this->endWidget(); ?>

ボタンをクリックすると、ID「年」からのテキストフィールド値を含む送信アクションが投稿されます。そして、私は次のようにコントローラーでアクションをキャッチします: (in mycontroller)

public function actionIndex()
{
    if(isset($_POST['year']))
    {
        $y = (int)$_POST['year'];
        $dataProvider=new CActiveDataProvider('Model',array('criteria'=>array('condition'=>'date='.$y);
        $this->render('index',array('dataProvider'=>$dataProvider));
    }
    else
    {
        $dataProvider=new CActiveDataProvider('Model');
        $this->render('index',array('dataProvider'=>$dataProvider));
    }

}

上記のコードは問題なく動作します。年を入力してボタンをクリックすると、年齢が更新され、結果がフィルタリングされました。しかし問題は、結果が複数のページ (2 ページなど) に分割されている場合に、[次のページ] ボタンをクリックすると、フィルター処理された結果が消えてしまうことです! 、結果は再び100ページに戻りました。私はこれがどのように起こっているのか本当に分かりません。

ここでは、Clistview は非常に単純です。追加のプロパティは追加しませんでした。

<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>

では、私のコードの何が問題なのですか?

4

1 に答える 1

1

$_POST を使用して$_POST['year']います。ページ 2、3 などに投稿していないため、次のページに移動するとデータが失われます。

次の 2 つのことを行うことができます。

  • をセッション$_POST['year']に保存して、次のページが何年を使用する必要があるかを「認識」します
  • $_GET パラメータとして URL に保存するので、代わり$_POST['year']$_GET['year']. ページ 2 に移動すると$_GET['year']、次のページの URL で使用できます。

最後の 1 つは、私が考える最も簡単なものであり、それが私が通常使用する方法です。

get メソッドを使用する場合は、CActiveForm 行を次のように変更します。

<?php $this->beginWidget('CActiveForm', array(
         'id'=>'fromid',
         'method' => 'get'
)); ?>
于 2013-11-01T12:42:23.723 に答える