0

ajaxリクエスト後にYIIフレームワークでフラッシュメッセージを表示する方法を知っている人はいますか?標準のGiiで生成されたCRUD操作を使用しています。CGridViewでデータを作成または更新すると、Flashメッセージが表示されます。しかし、データが削除されるとフラッシュが表示されますが、Yii :: app()-> user-> setFlash('success'、'My message')はメッセージをセッションに入れます。

私のactionDeleteコンテンツは

$result = $this->loadModel($id)->delete();
        if ($result)
            Yii::app()->user->setFlash('success', 'Data was deleted');
        else
            Yii::app()->user->setFlash('error', 'Error was occurred');

        if (Yii::app()->request->getIsAjaxRequest())
        {
            echo Yii::app()->user->getFlash('success');
        } else {
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array(index));
        }
4

2 に答える 2

2

ajax 経由でフラッシュ メッセージを取得する際に問題が発生していますか? コントローラーは問題ないように見えます。getIsAjaxRequestメソッドは起動されますが、問題は DOM にフラッシュ メッセージを表示することです。

まず、フラッシュ メッセージを保持する div を作成します。

<div id="myflashwrapper" style=""display: none;"></div>

次に、ajax メソッドを呼び出すスクリプトで、次のようなものを追加する必要があります。

$('#myflashwrapper').html(message).fadeIn().delay(3000).fadeOut();

これは単に、ID「 myflashwrapper 」を持つエレメントの HTML コンテンツを、返されるフラッシュ メッセージに変更するだけです。ご覧のとおり、この関数は「message」という名前の変数が入力されることを期待しています。echo Yii::app()->user->getFlash('success');削除関数getIsAjaxRequestからこの値として返されるようにします。

これは、デフォルトの Yii CRUD ビューから削除リンクをクリックしたときに実行される JavaScript を変更する必要があることを意味します。

CGridViewを使用していると仮定すると、これを行うことができますscriptMap

Yii::app()->getClientScript()->scriptMap = array(
    'jquery.yiigridview.js' => Yii::app()->baseUrl . '/js/custom.gridview.js',
    ...
);

ここで参照するスクリプト ファイルは、グリッドビューのデフォルトの Yii スクリプトの代わりに使用されます。明らかに、その中の 1 つの関数だけを変更したいので、元の js ファイルをここで取得できます。framework/zii/widgets/assets/gridview/jquery.yiigridview.js

そのファイルからすべてをコピーし、custom.gridview.jsファイルに貼り付け、削除時に呼び出される ajax 関数を変更するだけで機能します。

于 2012-12-09T13:50:15.310 に答える
0

フラッシュ メッセージを取得する必要があります。このコードを protected/layouts/main.php に入れてみてください

<?php foreach(Yii::app()->user->getFlashes() as $key => $message) : ?>
    <div class="flash-<?php echo $key; ?>"><?php echo $message; ?></div>
<?php endforeach; ?>
于 2012-12-10T10:34:34.463 に答える