PDA

View Full Version : شخصی ساری دکمه های cgridview



jionelmessi
سه شنبه 07 بهمن 1393, 17:56 عصر
باسلام

1مهواستم بدونم پطور حالت پیشفرض ارسال فرمان delete را ب ajax تبدیل کنم؟
2 پطوری id سطر جاری را وقتی روی دکمه update همون سطر کلیک کردیم بگیرم و به یک تابعغ js بفرستم؟

jionelmessi
چهارشنبه 08 بهمن 1393, 16:44 عصر
کسی نیس واقعا کمک کنه؟
من حتی تحقیقم کردم ولی روشاش جوتب نداد مثلا امدم اینکارو کنم id سطذ جاری رو توی یک attribute htmبریزم نشد


rowHtmlOptionsExpression=> arrray('id'=> $fata->id)


l

MMSHFE
پنج شنبه 09 بهمن 1393, 09:36 صبح
راستش فرصت نکردم تحقیق کنم ولی این راه قطعاً جواب میده: با Firebug بیاین ببینید برای GridView چه المنتهایی ساخته شده و بعد با jQuery و Selectorهاش بیاین عنصر موردنظر رو پیدا کنید و برای رویدادهای کلیک اونها کد بنویسید. میتونید با روش زیر هم جلوی اجرای کد Delete اصلی رو بگیرین (کد صرفاً یه مثاله) :
$(".delete").click(function(e) { e.stopPropagation(); ... });

qartalonline
پنج شنبه 09 بهمن 1393, 11:06 صبح
برای شخص سازی ابتدا ستون مربوط به دکمه ها رو پاک کنید. سپس دکمه مورد نظرتون رو با کلاس .delete قرار بدید، سپس کد زیر رو به صفحه اضافه کنید.
var token = 'YiiToken';
$(document).on('click', '.grid-view a.delete', function () {
if (!confirm('آیا از حذف این آیتم اطمینان دارید؟'))
return false;
var th = this, afterAction = function () {
};
var grid = $(this).closest('.grid-view');
grid.yiiGridView('update', {
type: 'POST',
url: $(this).attr('href'),
data: {token: token},
success: function (data) {
grid.yiiGridView('update');
afterAction(th, true, data);
},
error: function (XHR) {
return afterAction(th, false, XHR);
}
});
return false;
});

یادتون نره توکن رو ست کنید.

کد cgridview چیزی شبیه کد زیر میشه (نمونه ای که من استفاده کردم):

$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'ads-grid',
'dataProvider' => $model->search(),
'cssFile' => false,
'itemsCssClass' => 'table table-2 bordered band-row-even form m-t-5 m-b-5 font--x11',
'htmlOptions' => array(
'class' => 'grid-view p-tb-5'
),
'columns' => array(
array(
'name' => 'id',
'headerHtmlOptions' => array('class' => 'col-1'),
),
array(
'name' => 'title',
'value' => function($data){
return CHtml::link($data->title, Yii::app()->createUrl('ads/view', array('id' => $data->id)), array('target' => '_blank'));
},
'headerHtmlOptions' => array('class' => 'col-8'),
'type' => 'raw',
),
array(
'name' => 'status',
'value' => function($data)
{
return '<span class="color-' . ($data->isActive ? 'success' : 'danger') . '">' . $data->fullStatusName . '</span>';
},
'htmlOptions' => array('class' => 'font--x10 tac'),
'headerHtmlOptions' => array('class' => 'col-2'),
'type' => 'raw',
),
array(
'name' => 'create_time',
'value' => 'Q::getTime($data->create_time)',
'htmlOptions' => array('class' => 'font--x10 tac'),
'headerHtmlOptions' => array('class' => 'col-3 tac'),
),
array(
'name' => 'expiry_time',
'value' => function($data)
{
return $data->expiry_time > time() ? JDF::jdate('j F Y', $data->expiry_time) : 'منقضی شده';
},
'htmlOptions' => array('class' => 'font--x10 tac'),
'headerHtmlOptions' => array('class' => 'col-3 tac'),
),
array(
'name' => 'views',
'htmlOptions' => array('class' => 'font--x10 tac'),
'headerHtmlOptions' => array('class' => 'col-2 tac'),
),
array(
'name' => 'type',
'value' => '$data->typeName',
'htmlOptions' => array('class' => 'font--x10 tac'),
'headerHtmlOptions' => array('class' => 'col-2 tac'),
),
array(
'name' => 'عمليات',
'value' => function($data){
if (Yii::app()->user->checkAccess('admin'))
{
return '<a class="icon--x12 ion-eye" title="مشاهده" href="' . Yii::app()->createUrl('admin/ads/view', array('id' => $data->id)) . '"></a>'
. '<a class="icon--x12 ion-edit color-info" title="ویرایش" href="' . Yii::app()->createUrl('admin/ads/update', array('id' => $data->id)) . '"></a>'
. ($data->isActive ? '<a class="inactivate icon--x12 ion-eye-disabled color-warning" title="غیرفعال سازی" href="' . Yii::app()->createUrl('admin/ads/inactivate', array('id' => $data->id)) . '"></a>' : '<a class="approve icon--x12 ion-checkmark color-success" title="تایید" href="' . Yii::app()->createUrl('admin/ads/approve', array('id' => $data->id)) . '"></a>')
. '<a class="delete icon--x12 ion-close color-danger" title="حذف" href="' . Yii::app()->createUrl('admin/ads/delete', array('id' => $data->id)) . '"></a>';
}
else
{
return $data->isActive ? '<a class="inactivate icon--x12 ion-eye-disabled color-warning" title="غیرفعال سازی" href="' . Yii::app()->createUrl('admin/ads/inactivate', array('id' => $data->id)) . '"></a>' : '<a class="approve icon--x12 ion-checkmark color-success" title="تایید" href="' . Yii::app()->createUrl('admin/ads/approve', array('id' => $data->id)) . '"></a>';
}
},
'headerHtmlOptions' => array('class' => 'col-3 tac'),
'htmlOptions' => array('class' => 'tac'),
'type' => 'raw',
),
),
));



حالت نمایشش هم چیزی شبیه این:

128008

jionelmessi
پنج شنبه 09 بهمن 1393, 17:44 عصر
ککن.ن از پاسختون ولی پیزی سر در نیاوردم دیشب خودم فهمیدم میتونیم از این راه استفاده کنیم:



rowHtmlOptions => 'array('attrName'=>'$data->id))'


بعد با jquery بیایم وقتی رو دکمه های آپدیت یا دیلیت کلیک کرد اینجور بنویسیمو عملیاتو بع دست بگیریم


$('.delete').c;lick(function(e){e.preventDefault()
var id = $(this).parent().parent().attr('attrName');

بعدم عملیات ajax
});