Всем привет!
Создал контроллер в котором выполняется код (для примера):
<?phpclass www extends ControllerBase{
public function dbk() {
$response = new AjaxResponse ();
$response->addCommand(new AlertCommand('Hello World'));
return $response;
}
}?>
Создал маршрут для контроллера а также ссылку с классом "use-ajax".
При клике по ссылке выводиться модальное окно, все работает нормально.
При вставке ссылки в окно браузера и переходе напрямую на страницу контроллера получаю просто белое окно (см. картинку).
Как выводить сообщение при переходе по ссылке напрямую?
Заранее благодарю!
Вложение | Размер |
---|---|
sshot-1.png | 16.7 КБ |
Комментарии
Обычно, создается 2 роута - для js (ajax), и для обычного (nojs).
Вот пример: http://befused.com/drupal/modal-nojs
Тут не два роута, а один с аргументом. Спасибо за ссылку, как раз начну с этого следующую неделю))
Ну, да - 1 роут динамический, 2* маршрута. Не правильно выразился.
*В 8ке это круче реализовано.
В 7ке делали так (по тем же спасибкам):
https://github.com/DrupalRu/drupal.ru/blob/dev/profiles/drupalru/modules...
https://github.com/DrupalRu/drupal.ru/blob/dev/profiles/drupalru/modules...
В итоге, роута два, или один?
В примере из ссылки один.
Большое спасибо за пример, пригодится для других целей.
Для моей задачи не подходит, т.к. ссылки у меня уже сформированы.
Хочу добиться схожей реализации как на этом форуме.
Здесь при нажатии на кнопку "Спасибо" из темы форума, выполняется определенная функция и добавляется "спасибо" автору комментария.
При прямом переходе по ссылке (вставке в окно браузера), например
https://drupal.ru/tnx/comment/nojs/703912/vUSDw9EmCK16woNJol_p-RoPHS7_Xt...
выполняется та же функция и происходит редирект назад в тему и выводиться сообщение.
Как такое реализовать в контроллере drupal 8?
Такой вариант (например) не подходит:
<?php $response = new AjaxResponse ();
$selector = '.profile';
$response->addCommand(new RemoveCommand($selector));
$response = new \Symfony\Component\HttpFoundation\RedirectResponse($url);
return $response; ?>
так как выполниться только одна функция, в зависимости от порядка выполнения.
Добавление к ссылкам "?destination=node/___" и использования кода:
<?php $response = new AjaxResponse ();
$selector = '.profile';
$response->addCommand(new RemoveCommand($selector));
return $response; ?>
выполнит код по клику на ссылке, но при переходе напрямую редиректа не осуществит.
Долго что ли ссылки переделать? Если долго, то можно намутить скрипт, который будет блокировать правый и средний клик по этим ссылкам.
Спасибо за совет!
Получается реализовать на 8-ке такую фичу как тут с кнопкой "спасибо" не получиться?
Может все-таки можно, использовать роут с двумя аргументами, один из которых будет использоваться в "?destination=node/___" и при переходе напрямую делать редирект как здесь?
P.S. Информации по "?destination=..." для 8-ки - ноль. Вообще непонятно как им пользоваться?
Аргументов может бытт любое количество. Вам надо два - айдишник ноды и nojs. Типа /thanks/45/nojs по клику на такую ссылку с классом use-ajax nojs преобразуется в ajax и ваш контроллер поймёт, что ответ надо отсылать аякс-респонсом. Ну и айдишник, думаю, по нему и так всё ясно.
Gun_dose, спасибо воспользовался вашим советом.
Bumble, спасибо за решение вопроса!