2011-02-16 11 views
-3

管理者ページにはリンクがあります。このリンクをクリックすると、同じページにダイアログボックスが開きます。ダイアログボックスには、ユーザーがフォームに記入してデータを保存できるようにフォームが含まれています。Yiiフレームワークダイアログボックス

Yiiを使用してこれを行うにはどうすればよいですか?

+0

を返信.plz場合は、あなたの質問には、はるかにコンテキストおよび詳細と実際のエラーメッセージの追加を開始する必要があります。 –

答えて

1

まず、このタイプの質問は本質的に非常に主観的です。しかし、まだ、私は答えようとします。

[管理者の管理]ページで、ユーザーが(1つの)リンクをクリックすると、連絡先フォームが表示されたダイアログボックスが開きます。これは多くの利用可能なjQuery Modal Box pluginsのいずれかを使用して行うことができます。任意のフォームに必要なマークアップタグHTMLINPUTをサポートする特定の種類のプラグインを検索してください。

次は、連絡先フォームのデータを保存する&というフォームを送信しています。したがって、methodという属性(値が "post" & "get"である必要があります)を持つFORMタグが必要になるため、フォームの送信は非常に簡単です。 "get"を使用すると、すべてのデータがクエリー文字列形式としてサーバーに渡され、データが開いた状態ですべて表示されます。代わりに "post"を使用すると、データは誰にも見えずに送信されます。また、このフォームは、jQueryの "submit()"の方法、または他の適切な方法(INPUTタグの使用のような)を使用して提出する必要があります。

で書かれたYii記事シリーズを読むことができれば、データベースにデータを保存することが最も効果的です。具体的に使用可能なシリーズの中で、以下の記事を必要とします: - Creating Models, Views, and Controllers in Yii

0

完全なソリューションは、モデルたちがadmin.hpページ上のリンクボタンを使用して新しいクライアントを追加する「クライアント」を持っている例はこちら

ある STEP 1:client.phpで 変更actioncreateこのコードをモデル化して置き換えます。

public function actionCreate() 
{ 
    $model=new client; 




    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['client'])) 
    { 
     $model->attributes=$_POST['client']; 


     if($model->save()) 
     { 
      if (Yii::app()->request->isAjaxRequest) 
      { 
       echo CJSON::encode(array(
        'status'=>'success', 
        'div'=>"Client successfully added" 
        )); 
       exit;    
      } 
      else 
       $this->redirect(array('view','id'=>$model->id)); 
     } 
    } 

    if (Yii::app()->request->isAjaxRequest) 
    { 
     echo CJSON::encode(array(
      'status'=>'failure', 
      'div'=>$this->renderPartial('_form', array('model'=>$model), true))); 

     exit;    
    } 
    else 
     $this->render('create',array('model'=>$model,)); 
} 

STEP 2:

以下とadmin.phpのすべてのコードを置き換えますが、私はclient..you独自のモデルを使用する必要があるモデルを使用しているように注意してください。 / /@var $モデルクライアント*/

/* 
$this->breadcrumbs=array(
'Clients'=>array('index'), 
'Manage', 
); 
*/ 
$this->menu=array(
array('label'=>'List client', 'url'=>array('index')), 
//array('label'=>'Create client', 'url'=>array('create')), 
); 
?> 
<h1>Manage Clients</h1> 
<div> 

<?php echo CHtml::link('Add Client ', "", // the link for open dialog 
array(
    'style'=>'cursor: pointer; font-size:20px; text-decoration: underline;', 
    'onclick'=>"{addclient(); $('#dialogclient').dialog('open');}")); 
    ?> 
    </div><!-- add-form --> 
    <?php 
    $this->beginWidget('zii.widgets.jui.CJuiDialog', array(// the dialog 
    'id'=>'dialogclient', 
    'options'=>array(
    'title'=>'Create Client ', 
    'autoOpen'=>false, 
    'modal'=>true, 
    'width'=>550, 
    'height'=>470, 
    ), 
    )); 
    ?> 
    <div class="divForForm"></div> 
    <?php $this->endWidget();?> 
    <?php $this->widget('zii.widgets.grid.CGridView', array(
     'id'=>'client-grid', 
     'dataProvider'=>$model->search(), 
     //'filter'=>$model, 
     'columns'=>array(
    'id', 
    'Client Name', 
    'first_name', 
    'last_name', 
    'email_address', 
    'created_date', 
    array(
     'class'=>'CButtonColumn', 
    ), 
    ), 
    )); 
    ?> 



    <script type="text/javascript"> 
    // here is the magic 
    function addclient() 
    { 
    <?php echo CHtml::ajax(array(
     'url'=>array('client/create'), 
     'data'=> "js:$(this).serialize()", 
     'type'=>'post', 
     'dataType'=>'json', 
     'success'=>"function(data) 
     { 
      if (data.status == 'failure') 
      { 
       $('#dialogclient div.divForForm').html(data.div); 
         // Here is the trick: on submit-> once again this function! 
       $('#dialogclient div.divForForm form').submit(addclient); 
      } 
      else 
      { 
       $('#dialogclient div.divForForm').html(data.div); 
       setTimeout(\"$('#dialogclient').dialog('close') \",3000); 
      } 

     } ", 
     )) 
    ?>; 
     return false; 

    } 

     </script> 

顔何らかの問題が