Доброго времени суток.
У меня появился вопрос по вашему расширению. Хотел сделать две колонки с переключателями, но не нашел как изменить класс ссылки.
Получается при клике на переключатель происходит два запроса.
Вот в гриде эти колонки
Код: Выделить всё
array(
'class'=>'DToggleColumn',
'name' => 'status',
// иконка для значения 1 или true
'onImageUrl' => Yii::app()->request->baseUrl . '/images/admin/ok.png',
// иконка для значения 0 или false
'offImageUrl' => Yii::app()->request->baseUrl . '/images/admin/no.png',
// убираем генерацию ссылки по умолчанию
//'linkUrl'=>'/admin/categoriesKupon/toggle/id/12/attribute/status',
// запрос подтвердждения (если нужен)
'confirmation'=>'Изменить статус публикации?',
// фильтр
'filter'=>array(1=>'Опубликованные', 0=>'Не опубликованные'),
// alt для иконок (так как отличается от стандартного)
'titles'=>array(1=>'Опубликовано', 0=>'Не опубликовано'),
//'actionUrl' => array('setStatus'),
'htmlOptions'=>array(
'width'=>'50px',
'align'=>'center',
),
),
array(
'class'=>'DToggleColumn',
'name' => 'IsFeatured',
// иконка для значения 1 или true
'onImageUrl' => Yii::app()->request->baseUrl . '/images/slide-on.png',
// иконка для значения 0 или false
'offImageUrl' => Yii::app()->request->baseUrl . '/images/slide-off.png',
// своя ссылка для переключения состояния
//'linkUrl'=>'Yii::app()->controller->createUrl("featured", array("id"=>$data->id_news, "attribute"=>"IsFeatured"))',
// запрос подтвердждения (если нужен)
//'confirmation'=>'Изменить статус публикации в слайдере?',
// фильтр
'filter'=>array(1=>'В слайдере', 0=>'Не в слайдере'),
// alt для иконок (так как отличается от стандартного)
'titles'=>array(1=>'В слайдере', 0=>'Не в слайдере'),
//'actionUrl' => array('setStatus'),
'htmlOptions'=>array(
'width'=>'50px',
'align'=>'center',
'class'=>'f',
),
),
В контроллере вообще все просто
Код: Выделить всё
public function actionToggle($id, $attribute) {
if (!in_array($attribute, array('status','IsFeatured')))
throw new CHttpException(400, 'Некорректный запрос');
$model = $this->loadModel($id);
$model->$attribute = $model->$attribute ? 0 : 1;
if (!$model->save()) {
echo CVarDumper::dump($model->getErrors(), 10, true);
exit;
}
if (!Yii::app()->request->isAjaxRequest)
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
Понимаю, что контроллер в моем случае не играет роли. Обработка запроса происходит правильно. Затем второй запрос еще раз переключет состояние.
Вот такая разметка генерируется
для статуса
Код: Выделить всё
<a class="toggle-link toggle-property-p toggle-true" href="/admin/news/toggle/id/47/attribute/status">
и для популярных
Код: Выделить всё
<a class="toggle-link toggle-property-p" href="/admin/news/toggle/id/47/attribute/IsFeatured">
В файрбаге видно что уходит по два запоса
Код: Выделить всё
jquery.js (строка 8434)
POST http://kupon.loc/admin/news/toggle/id/47/attribute/IsFeatured
200 OK
329ms
jquery.js (строка 8434)
POST http://kupon.loc/admin/news/toggle/id/47/attribute/IsFeatured
200 OK
378ms
jquery.js (строка 8434)
POST http://kupon.loc/admin/news/toggle/id/47/attribute/status
200 OK
312ms
jquery.js (строка 8434)
POST http://kupon.loc/admin/news/toggle/id/47/attribute/status
200 OK
347ms
В принципе ничего нет невозможного.
— Вы думаете?
— Для человека. С интеллектом.