t-alexashka
@t-alexashka
Сразу пишу legacy код

Как правильно сделать Ajax-блокировку пользователя?

Это снова я с новой пачкой вопросов :)

Есть таблица (gridview), там в actionColumns сделал кнопку block для блокировки пользователя. Она ведет на урл
/index.php?r=users%2Fblock&id={ID}
я решил добавить класс к этой кнопке .btn-user-ban и аттрибут data-user-id={ID}, и обработать на ajax-post запросе смену статуса юзеру.

Вопроса 2:
1. как обращатся к урлу из ajax ?
$.post('URL', {user_id: {ID}}) если сейчас у меня роутинг как index.php?r=controller/action а в будущем может смениться на prettyUrl. Есть ли общий варинт обращения который и так и так будет работать.
2. Может есть более элегантный способ сменить статус юзеру по клику, который предлгалает сама yii?
  • Вопрос задан
  • 67 просмотров
Решения вопроса 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
В yii для этого уже есть хелпер, посмотрите как delete сделана.
<?= Html::a('Text', 
    ['/controller-name/action-name'], [
    'data-method' => 'POST',
    'data-params' => [
        'value1' => 'value 1',
        'value2' => 2,
    ],
]) ?>

Там как раз post запрос улетает. Обверните gridview в pjax и будет то что вы хотите
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Url лучше сразу делать в виде http://site.ru/user/update/1, то есть - настроить UrlManager. Запрос будет идти на контролер user в действие update и с id выбранного пользователя.
Для ajax запросов, я лично, делаю отдельный AjaxController, где обрабатываю все ajax запросы. Так же можно сделать отдельное действие для обновления статуса, что-то вроде actionUpdateStatus($id). В действии проверять, пришёл ajax запрос или какой-то другой. После этой проверки обновлять в таблице поле "статус" у выбранного пользователя.
В yii2 есть виджет Pjax, как раз для работы c ajax.
Можно самостоятельно повесить на ячейку таблицы событие "click" и по этому событию отправлять ajax запрос.
2. Может есть более элегантный способ сменить статус юзеру по клику, который предлгалает сама yii?

О Pjax я написал, а всё остальное, насколько я знаю, надо делать самостоятельно.
Так же можно добавить дополнительную кнопку в ActionColumn, рядом с "просмотр", "редактировать", "удалить". И по принципу работы остальных кнопок из блока. При клике отправлять ajax запрос.
Ответ написан
Комментировать
1.Отслеживаете клик по ссылке из js. Далее палите атрибут href, и используете в качестве урла для отправки запроса. Не забудьте указать e.preventDefault() чтобы не случился переход по ссылке.
Если использовать при генерации хелпер Url::to то переход на prettyUrl не на что не повлиялет, урл нормально сгенерируется для ссылки, аякс запрос уйдет на валидный урл.
2. Посмотрите расширения на эту тему на гитхабе, гуглится по тегам Toogle Column
p.s. https://github.com/phemellc/yii2-toggle-column
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы