Используем новый функционал модуля Charts для экспорта графиков в файл с последующей отправкой в Telegram.
Как известно, библиотека Highcharts, используемая в модуле Charts, отрисовывает графики не на серверной стороне, а в браузере клиента (пк, планшет, телефон и т.п.), передавая только конфигурацию графика и собственно сами данные в текстовом виде. А чтобы использовать изображения графиков в своих сценариях, необходимо формировать их именно на стороне сервера.
С недавнего времени в модуль Charts добавлен функционал экспорта графиков в файл с изображением в формате PNG. Данный функционал основывается на использовании облачного сервиса экспорта Highcharts - https://export.highcharts.com Если по каким-то причинам сторонний внешний сервер не подходит, то есть возможность развернуть локальный сервис экспорта (подробнее здесь).
Известные ограничения:
Чтобы получить изображение графика в своих сценариях, потребуется три строчки кода.
include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(4);
При успешном выполнении в переменной $chartPNG
будет содержаться путь к изображению графика.
Как видно из примера, используется функция getImage()
, которая в качестве обязательного параметра принимает уникальный идентификатор (ID) конкретного графика. Опционально можно указать высоту и ширину изображения (в пикселях) и путь сохранения файла (включая имя и расширение файла).
Описание функции getImage()
getImage($chart_id, $chart_height, $chart_width, $path)
Список параметров
Возвращаемые значения
Для проверки функции экспорта создадим простейший сценарий, который после ручного запуска выводит в браузер картинку с графиком и путь к файлу.
Для начала узнаем ID графика в модуле Charts (область с подсказкой на вкладке Общее).
Пишем и сохраняем сценарий.
include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(3, 350, 1000);
print('Путь к файлу: ' . $chartPNG . '<br><br>');
print('<img src="' . $chartPNG . '">');
Затем запускаем сценарий по ссылке и получаем результат.
Рассмотрим отправку графика в Telegram по запросу (команде) пользователя.
Сначала определяемся с идентификатором нужного графика в модуле Charts (см. выше).
Затем в модуле Telegram создаем и настраиваем команду.
include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(7);
$this->sendImageToUser($chat_id, ROOT.$chartPNG);
После сохранения проверяем работу, отправив название только что созданной команды, нашему Telegram-боту.
В ответ бот пришлет изображение запрошенного графика.