Делаем плагин для Bludit. Отправка ссылки на новую страницу в телеграмм.

Делаем простой плагин для Bludit, что бы отправлять ссылки на статьи в телеграмм канал.

Cover Image

Я думаю многие заметили, а кто не заметил, то узнают сейчас, что я использую для сайта CMS Bludit. Предлагаю загуглить. Это простая система управления контентом, не использует базу данных, всё храниться в тектовых файлах, что и плюс и минус одновременно. Работает довольно шустро и имеет возможность расширения функционала - это то, о чем сейчас и поговорим.

Будем делать плагин для автоматической отправки ссылки на страницу в телеграмм канал, личный чат или групповой чат.

И так, что нам понадобиться:

Что меня радует вот уже долгое время, так это документация, наличие форума и хорошо структурированный код.

Для начала предлагаю ознакомиться с документацией по первой ссылке, где описывается то, как строиться плагин и какие обязательные файлы он должен иметь.

/bl-plugins/{PLUGIN_NAME}/
    languages/en.php
    metadata.json
    plugin.php

В принципе всё просто. Пожалуй я приведу код своего плагина, а уже потом будем разбираться что и как происходит - файл plugin.php:

<?php
class pluginTelegrammSend extends Plugin {

    public function init()  {       
        $this->dbFields = array(
            'botToken'=>'', 
            'chat2post'=>''
        ); 
    }

    public function form()
    {
        global $Language;
        $html = '<div>';        
        $html .= '<label>'.$Language->get('lbl token').'</label>';      
        $html .= '<input name="botToken" id="botToken" type="text" value="'.$this->getValue('botToken').'">'; 
        $html .= '</div>';
        $html .= '<div>';       
        $html .= '<label>'.$Language->get('lbl chatid').'</label>';         
        $html .= '<input name="chat2post" id="chat2post" type="text" value="'.$this->getValue('chat2post').'">';    
        $html .= '</div>';
        $html .= '<div>';       
        $html .= '<a target="_blank" href="https://api.telegram.org/bot'. $this->getValue('botToken').'/getUpdates">'.$Language->get('lbl link').'</a>';        
        $html .= '</div>';
        return $html;
    }

    public function afterPageCreate()
    {
        global $dbPages;
        $pageNumber = 1;        
        $amountOfItems = 1;         
        $onlyPublished = true;      
        $pages = $dbPages->getList($pageNumber, $amountOfItems, $onlyPublished);        
        foreach($pages as $pageKey) {       
            $page = buildPage($pageKey);    
        }
        $txt = $page->permalink();
        $sendToTelegram = fopen("https://api.telegram.org/bot{$this->getValue('botToken')}/sendMessage?chat_id={$this->getValue('chat2post')}&parse_mode=html&text={$txt}","r");
    }
}

Здесь всё просто. Функции init() и form() являются обязательными, одна инициализирует плагин, в ней описывается массив параметров, которые будут храниться вбазе данных, другая - выводит форму настроек, здесь тоже всё просто.

Основная магия кроется в функции afterPageCreate() - это хук. Эта функция вызывается сразу после создания новой страницы. Об остальных можно почитать по второй ссылке из нашего списка необходимых вещей. Для начала здесь получаем ссылку на последнюю запись, к сожалению я не очень разобрался с API Bludit, наверно можно получить ссылку на созданную страницу менее изощренным способом. Затем имея ID чата и токер бота отправляем ссылку. Если нужно узнать результат отправки, то нужно обработать переменную $sendToTelegram, я этим не стал заморачиваться.

Теперь поговорим о языках. Чтобы наш плагин мог общаться с пользователем на выбранном им языке необходимо описать и добавить файлы в папку languages/. Мои выглядят следующим образом:

{
    "plugin-data":
    {
        "name": "Telegramm",
        "description": "Auto sent link to telegramm chat"
    },
    "lbltoken": "Insert bot token",
    "lblchatid": "Insert chat ID",
    "lbllink": "Link bot data"
}
{
    "plugin-data":
    {
        "name": "Автопостинг в телеграмм",
        "description": "Автоматически отправляет ссылку в канал или чат телеграмм"
    },
    "lbl-token": "Введите token бота telegramm",
    "lbl-chatid": "Введите ID чата куда отправлять ссылку",
    "lbl-link": "Ссылка для получения ID чата"
}

Не сложно догадаться какой из них для какого языка предназначен. Второй назван ru_RU.json.

Скачать плагин можно по ссылке - telegramm-send-chat.zip

Или зайти на Gitlab