Почитать другие заметки или статьи

Недавно столкнулся с нетривиальной задачей. Необходимо было из условного компонента «А» отправить пользователя в форму редактирования контента компонента «Б». При этом сделать так, чтобы при нажатии кнопки «Закрыть» в компоненте «Б», пользователь возвращался в компонент «А». Всё вышеописанное происходило в в административной панели сайта.

По условиям задачи я не мог вносить изменения в компонент «Б», поскольку он поставлялся в пакете с 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 по ссылке ниже:

https://vk.com/sitogon

А также в недавно созданной группе Telegram. Ссылка:

https://t.me/sitogonGroup

С уважением, Владимир Егоров