Edit Form

[font="Tahoma"][rtl][right]سلام

views/post/create.php

[/right][/rtl]


<h2> Create Post View </h2>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm'); ?>

 

    <?php //echo $form->errorSummary($model); ?>

 

    <div class="row">

        <?php echo $form->label($model,'title'); ?>

        <?php echo $form->textField($model,'title') ?>

    </div>

	

	<div class="row">

        <?php echo $form->label($model,'content'); ?>

        <?php

		$this->widget('application.extensions.cleditor.ECLEditor', array(

        'model'=>$model,

        'attribute'=>'content', //Model attribute name. Nome do atributo do modelo.

        'options'=>array(

            'width'=>'600',

            'height'=>250,

            'useCSS'=>true,

        ),

        'value'=>$model->content, //If you want pass a value for the widget. I think you will. Se você precisar passar um valor para o gadget. Eu acho ir?.

    ));

	?>

    </div>

	

	<div class="row">

        <?php echo $form->label($model,'permission'); ?>

        <?php echo $form->textField($model,'permission') ?>

    </div>


    <div class="row buttons">

                <?php

					echo CHtml::ajaxSubmitButton(

						($model->isNewRecord ? 'Create' : 'Save'),

						($model->isNewRecord ? array('post/addPost') : array('post/update') ),

						//array('post/addPost'),

						array(

							'update'=>'#req_res02',

						)

					);

				?>

	</div>

 

<?php $this->endWidget(); ?>

<div id="req_res02">...</div>

</div>

[rtl][right]

خوب من تو این صفحه برای ajaxSubmitButtom تعریف کردم که اگر isNewRecord بود post/addPost را اجرا کن در غیر این صورت post/update

خوب حالا من یک صفحه update.php ساختم و کد زیر رو داخلش گذاشتم

[/right][/rtl]


<?php

$this->breadcrumbs=array(

	$this->module->id,

);

?>

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

و این هم actionUpdate


public function actionUpdate()

	{

		$model=$this->loadModel();

		if(isset($_POST['post']))

		{

			$model->attributes=$_POST['post'];

			if($model->save())

			{

				echo "<h2> Post is Updated ! </h2>";

			}

		}

		$this->render('update',array('model'=>$model));

	}

		

	public function loadModel()

	{

		if($model===null)

		{

			if(isset($_GET['id']))

			{

				if(Yii::app()->user->isGuest)

					$condition='status='.Post::STATUS_PUBLISHED.' OR status='.Post::STATUS_ARCHIVED;

				else

					$condition='';

				$model=Post::model()->findByPk($_GET['id'], $condition);

			}

			if($model===null)

				throw new CHttpException(404,'The requested page does not exist.');

		}

		return $model;

	}

[rtl][right]

ولی کد update کردن اون پستی که انتخاب شده انجام نمیشه

یعنی وقتی رو save کلیک میکنیم تا اکشن update رو اجرا کنه هیچ خروجی نمیگیرم

حتی من print_r($_POST) گرفتم اما جواب نداد

ممنون میشم راهنمایی کنید[/right][/font][/rtl]

[rtl]

سلام

اول

[/rtl]




<?php $form = $this->beginWidget('CActiveForm', array(     'id'=>'user-form',     'enableAjaxValidation'=>false,




[rtl]

دستور شرطی رو به نظرم بیاری بیرون با if بنویسی بهتر باشه

[/rtl]

[rtl]

نحوه درست استفاده از

ajaxSubmitButton

به شکل زیر

[/rtl]




 <?php echo CHtml::ajaxSubmitButton (

        Yii::t('forms','Create'), 

        CController::createUrl('ActivityActionComments/create'), 

                                  array(

                         'type' =>'POST',

                         'success' => 'function() updateFileName()', ) ); ?>




[rtl][right]

منون جناب برجیان اما باز جواب نداد با تغییراتی که انجام دادم

[/right][/rtl]


    <div class="row buttons">

		

		<?php 

		echo CHtml::ajaxSubmitButton (

        Yii::t('user-form','Create'),

		($model->isNewRecord ? CController::createUrl('post/addPost') : CController::createUrl('post/update')),

                         array(

                         'type' =>'POST',

                         'success' => 'function() updateFileName()',

						 'update' => '#req_res02', ) ); 

						 

						 ?>


	</div>

[rtl][right]

به این شکل تغییر دادم اما جواب نداد

[/right][/rtl]

actionUpdate & loadModule


public function actionUpdate()

	{

		$model=$this->loadModel();

		if(isset($_POST['post']))

		{

			$model->attributes=$_POST['post'];

			if($model->save())

			{

				echo "<h2> Post is Updated ! </h2>";

			}

		}

		$this->render('update',array('model'=>$model));

	}

	

	

		

	public function loadModel()

	{

		if($model===null)

		{

			if(isset($_GET['id']))

			{

				if(Yii::app()->user->isGuest)

					$condition='status='.Post::STATUS_PUBLISHED.' OR status='.Post::STATUS_ARCHIVED;

				else

					$condition='';

				$model=Post::model()->findByPk($_GET['id'], $condition);

			}

			if($model===null)

				throw new CHttpException(404,'The requested page does not exist.');

		}

		return $model;

	}

[rtl][right]البته اینو بگم که اکشن addPost جواب میده[/right][/rtl]

‘enableAjaxValidation’=>false,

اینو تغییر دادید؟

بله

به این شکل


<?php $form = $this->beginWidget('CActiveForm', array('id'=>'user-form','enableAjaxValidation'=>false,)) ?>

هنوز نیتونستم برای فرم ادیت رو به صورت آیجکس اوکی کنم ! یعنی تا حالا کسی اینکارو نکرده :rolleyes:

[rtl]

جناب عابدی پست های زیر در رابطه با این کنترل منتشر شده. شما باید این موارد رو مطالعه کنید و اشکال کار رو خودتون پیدا کنید. اگر مطمئن هستید اشکال کار کجاست جوابش هم مشخصه وگرنه کسی نمی تونه بدون داشتن اطلاعات کمک کنه. ;)

[/rtl]

**** http://translate.google.com/

http://www.yiiframew…tton#entry84760

http://www.yiiframew…tton#entry83572

http://www.yiiframew…tton#entry58914

http://www.yiiframew…tton#entry37215

http://www.yiiframew…tton#entry36394

http://www.yiiframew…ton#entry100448

http://www.yiiframew…tton#entry89607

[font="Tahoma"][right][rtl]

جناب برجیان من تمام پست های فروم رو خوندم و تست کردم اما متوجه نمیشم چرا وقتی صفحه آپدیت باز میشه دیگه کلید save جواب نمیده

یعنی وقتی صفحه update&id=23 باز میشه

این کدها صفحه ادیت رو رندر میکنه :

$model=$this->loadModel($id);

$this->render(‘update’,array(‘model’=>$model));

حالا من اومدم بین اینا دارم مقادیر $_POST یا $_GET چک میکنم ولی متاسفانه در صفحه update من رو دکمه save هر چی کلیک میکنم هیچ خروجی ندارم

انگار نه امگار که دارم کلیک میکنم

اما برای اضافه کردن یک مطلب هیچ مشکلی پیش نمیاد

[/right][/font][/rtl]

[rtl][right][font="Tahoma"]

جناب برجیان من اومدم تو فایل create.php ، ajaxSubmitButtom رو برای آپدیت کردن پست به یک Action دیگه فرستادم[/font]

مثلا

[/right][/rtl]

array("post/updatePost"),

[rtl][right][font="Tahoma"]

و هر چیزی تو این اکشن بنویسم به صورت ایجکس نمایش میده ولی نمیتونم ID اون مطلب رو در این اکشن نمایش بدم

مثلاً

[/right][/rtl]

function updatePost()

{

echo $_GET[‘id’];

}

[rtl][right]

الان باید چی کار کنم تا حداقل بتونم به صورت دستی و با command خود yii پست رو آپدیت کنم

[/right][/rtl][/font]

[rtl]

سلام

شما برای کار با AJAX نمی تونی به این شکل به مقادیرتون دسترسی پیدا کنی بلکه باید به صورت پارامتر مقدار رو ارسال کنی

یعنی توی رشته تقاضا که به سمت اسکریپت backend اینجا updatePost هستش ارسال می شه پارامترهای ارسالی رو هم قرار بدی

اگه بخواید همزمان چند پارامتر ارسال و دریافت داشته باشید مثل یک آرایه باید از JSON استفاده کنید.

[/rtl]

http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown

[rtl]

مثالی رو در نظر بگیریم که قراره 2 تا dropdown کنترلر داشته باشه وقتی یکی رو انتخاب کردیم دومی خودکار refresh بشه

توی این مثال یکی نام کشور رو انتخاب می کنه و دومی نام شهرهای اون کشور رو مشخص می کنه

مثلا اگر USA انتخاب شد در dropdpwn دومی باید نام شهرهای آمریکا نشون داده بشه

اینجا مثالی رو با Ajax داریم که یک پارامتر یعنی نام کشور رو ارسال می کنه

اول فرم رو ببینیم :

[/rtl]




echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3=>'Japan'), array( 'ajax' => array( 'type'=>'POST',

 // رشته تقاضا


'url'=>CController::createUrl('currentController/dynamiccities'), 


//آدرس فراخوانی شونده


'update'=>'#city_id',   // مشخص کننده آی دی کنترلر دوم است


 CHtml::dropDownList('city_id','', array());  // این کنترل دومی است که بر اساس مقادیر اولی تغییر می کند




[rtl]

حالا در اکشن مورد نظر پارامتر ارسالی دریافت می شه و بر اساس اون جدول بانک اطلاعاتی فیلتر می شه و مقادیر شهر برگردونده می شه.

نحوه ارسال پارامتر country_id

و نحوه برگرداندن مقادیر به فرم رو نگاه کنید

[/rtl]




public function actionDynamiccities()

 {

 $data=Location::model()->findAll('parent_id=:parent_id', 

                  array(':parent_id'=>(int) $_POST['country_id']));

                  $data=CHtml::listData($data,'id','name');


 foreach($data as $value=>$name)

 {

     echo CHtml::tag('option',

      array('value'=>$value),CHtml::encode($name),true);

  }

}






[rtl]

حالا با jQuery مشابه این مثال رو انجام می دیم

نحوه ارسال پارامتر

distributor_id رو ببینید

‘data’ جاییه که پارامتر ارسال می شه

[/rtl]




<?php echo $form->dropDownList($model,'distributor_id' ,

 Distributor::getDistributors(),

 array(

 'empty'=>'Select Distributor',

 'ajax' =>

 array(

 'type'=>'GET', //request type

 'url'=>CController::createUrl('quote/getDistributorReps'), //url to call.

 'update'=>'#Quote_rep_id', //selector to update

 'data'   => 'js:"distributor_id="+jQuery(this).val()',

 'success'=>'js:function(data){

 jQuery("#Quote_rep_id").removeAttr("disabled");

 jQuery("#Quote_rep_id").append(

 data

 );

 }',

 )

 )

 );

 ?>



[rtl][right][font="Tahoma"]سلام

ممنون جناب برجیان

امیدوارم کاری که الان انجام دادم استاندارد و صحیح باشه :D[/font][/right][/rtl]

views/post/create.php


<div class="row">

        <?php echo $form->hiddenField($model,'id',array('type'=>"hidden",'size'=>2,'maxlength'=>2)); ?>

</div>


<div class="row buttons">


       <?php

            echo CHtml::ajaxSubmitButton(

					($model->isNewRecord ? 'Create' : 'Save'),

                    ($model->isNewRecord ? array('post/create') : array('post/updatePost')),

					

                    //array('post/addPost'),

                    array(

						'update'=>'#req_res02',

                        )

                    );

        

		

		?>

    </div>




[rtl][right][font="Tahoma"]

در این فایل اومدم مقدار ID مطلبی مکه میخواد آپدیت بشه در یک input hidden ریختم تا در کنترولر اکشن بتونم مطلب رو آپدیت کنم

[/font][/right][/rtl]

ActionUpdatePost


public function actionUpdatePost()

		{

			

			if(isset($_POST['post']))

			{

				$_id = $_POST['post']['id'];

				$_title = $_POST['post']['title'];

				$_content = $_POST['post']['content'];

				$_perm = $_POST['post']['permission'];

				$command = Yii::app()->db->createCommand(); 

				$command->update('abedi', array('title'=>$_title, 'content'=>$_content, 'permission'=>$_perm), 'id=:id', array(':id'=>$_id));

				if($command)

				{

					echo "<b> Post Updated </b>";

				}

				else

				{

					echo "Problem !";

				}

			}

		}