Недавно столкнулся с нетривиальной задачей. Необходимо было из условного компонента «А» отправить пользователя в форму редактирования контента компонента «Б». При этом сделать так, чтобы при нажатии кнопки «Закрыть» в компоненте «Б», пользователь возвращался в компонент «А». Всё вышеописанное происходило в в административной панели сайта.
По условиям задачи я не мог вносить изменения в компонент «Б», поскольку он поставлялся в пакете с Joomla и любые изменения исчезли бы в момент обновления системы.
Переменная RETURN
Как всегда в таких случаях, пришло озарение и я вспомнил про переменную «return», которая время от времени используется в «родных» компонентах Joomla.
В частности, её можно наблюдать в адресной строке браузера при переходе в раздел «Настройки» любого из стандартных компонентов Joomla.
Однако, если мы скопируем её значение и внимательно изучим, то увидим нечто невообразимое. Непонятный набор символов.
https://условный сайт.ru/administrator/index.php
?option=com_config&view=component&component=com_content&path=
&return=aHR0cHM6Ly9zaXRvZ29uLnJ1L2FkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWFydGljbGVz
На самом деле , всё просто.
URL, куда необходимо вернуть пользователя кодируется двумя функциями.
Сначала это base64_encode.
Затем это urlencode.
Сделано это в целях исключения ошибок при передачи адреса страницы.
Поставим задачу и напишем код
Предположим, нам нужно сделать так, чтобы на странице редактирования материала компонента «com_content», при нажатии на кнопку «Закрыть», пользователь возвращался в компонент «Контакты».
Итоговый код будет выглядеть так:
$url = 'https://условный сайт.ru/administrator/index.php?option=com_contact&view=contacts'; $return = urlencode(base64_encode($url)); $component_url = 'https://условный сайт.ru/administrator/index.php?option=com_content&task=article.edit&id=1&return='.$return;
В переменную $component_url запишем итоговый URL. Далее остается прописать эту переменную в атрибуте HREF тега ссылки.
Далее, если пользователь откроет такую ссылку, он увидит форму редактирования материала, ID которого равен 1.
Однако, если он в этой форме нажмёт кнопку "Закрыть", он будет перенаправлен не в «com_content», а на страницу компонента "Контакты".
Задача решена!
Заключение
Как всегда надеюсь, что данная заметка помогла кому нибудь сэкономить время, деньги и нервы.
Напоминаю!
Если у вас остались вопросы и предложения, их всегда можно озвучить в группе VK по ссылке ниже:
А также в недавно созданной группе Telegram. Ссылка:
С уважением, Владимир Егоров