Yii Framework Forum: Edit Form - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Edit Form

#1 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 04 October 2011 - 04:19 AM

سلام
views/post/create.php


<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>



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

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


<?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;
	}



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

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

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

ممنون میشم راهنمایی کنید

0

#2 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 04 October 2011 - 04:34 AM



سلام
اول

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




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



نحوه درست استفاده از
ajaxSubmitButton
به شکل زیر

 <?php echo CHtml::ajaxSubmitButton (
        Yii::t('forms','Create'), 
        CController::createUrl('ActivityActionComments/create'), 
                                  array(
                         'type' =>'POST',
                         'success' => 'function() updateFileName()', ) ); ?>




0

#3 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 04 October 2011 - 05:00 AM


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




    <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>


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

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;
	}

0

#4 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 04 October 2011 - 05:01 AM

البته اینو بگم که اکشن addPost جواب میده

0

#5 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 04 October 2011 - 05:10 AM

'enableAjaxValidation'=>false,
اینو تغییر دادید؟


0

#6 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 04 October 2011 - 05:27 AM

بله
به این شکل

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

0

#7 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 09 October 2011 - 02:40 AM

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

#8 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 09 October 2011 - 02:52 AM

View Postabedi98, on 09 October 2011 - 02:40 AM, said:

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



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


**** 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

0

#9 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 09 October 2011 - 03:53 AM


جناب برجیان من تمام پست های فروم رو خوندم و تست کردم اما متوجه نمیشم چرا وقتی صفحه آپدیت باز میشه دیگه کلید save جواب نمیده
یعنی وقتی صفحه update&id=23 باز میشه
این کدها صفحه ادیت رو رندر میکنه :

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

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

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

0

#10 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 10 October 2011 - 12:40 PM


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

مثلا

array("post/updatePost"),

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

مثلاً


function updatePost()
{
echo $_GET['id'];
}


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

0

#11 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 10 October 2011 - 02:46 PM


سلام
شما برای کار با AJAX نمی تونی به این شکل به مقادیرتون دسترسی پیدا کنی بلکه باید به صورت پارامتر مقدار رو ارسال کنی
یعنی توی رشته تقاضا که به سمت اسکریپت backend اینجا updatePost هستش ارسال می شه پارامترهای ارسالی رو هم قرار بدی
اگه بخواید همزمان چند پارامتر ارسال و دریافت داشته باشید مثل یک آرایه باید از JSON استفاده کنید.



0

#12 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 11 October 2011 - 04:10 AM

http://www.yiiframew...endent-dropdown


مثالی رو در نظر بگیریم که قراره 2 تا dropdown کنترلر داشته باشه وقتی یکی رو انتخاب کردیم دومی خودکار refresh بشه
توی این مثال یکی نام کشور رو انتخاب می کنه و دومی نام شهرهای اون کشور رو مشخص می کنه
مثلا اگر USA انتخاب شد در dropdpwn دومی باید نام شهرهای آمریکا نشون داده بشه
اینجا مثالی رو با Ajax داریم که یک پارامتر یعنی نام کشور رو ارسال می کنه

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



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());  // این کنترل دومی است که بر اساس مقادیر اولی تغییر می کند



0

#13 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 11 October 2011 - 04:19 AM


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


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);
  }
}




0

#14 User is offline   Ali Borjian 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 367
  • Joined: 19-January 11

Posted 11 October 2011 - 04:28 AM


حالا با jQuery مشابه این مثال رو انجام می دیم
نحوه ارسال پارامتر
distributor_id رو ببینید

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



<?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
 );
 }',
 )
 )
 );
 ?>


0

#15 User is offline   abedi98 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 29-August 11

Posted 12 October 2011 - 09:58 AM

سلام

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

امیدوارم کاری که الان انجام دادم استاندارد و صحیح باشه :D


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>




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


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 !";
				}
			}
		}

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users