Plugins

    Что такое плагин

    Плагины - фрагменты кода, которые привязаны к системными событиям и выполняются, когда это событие наступает.

    Как работают плагины

    При выполнении практически любых действий система генерирует события. Допустим, при публикации ресурса происходит событие OnDocPublished, при авторизации происходит OnManagerLogin и т.д.

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

    Важно: плагины работают как для событий внутри панели администрирования, так и для событий на фронте сайта. Полный список событий вы можете посмотреть при создании плагина на вкладке "СИСТЕМНЫЕ СОБЫТИЯ".

    Примеры плагинов

    Плагин для замены слов

    Этот плагин сработает перед тем, как содержимое ресурса будет показано посетителю (OnWebPagePrerender) и заменит слова из массива на заглушку.

    $words = array("плохое слово", "ещё одно"); // слова для фильтации
    $e = &$modx->Event;
    if($e->name == 'OnWebPagePrerender') {//проверяем, то ли это событие, которое нам нужно
        $out = &$modx->documentOutput; // получаем ссылку на содержимое ресурса
        $out = str_replace($words,"<b>цензура</b>",$out); // заменяем слова из массива на "заглушку".
    }

    Плагин для изменения дерева ресурсов

    Предыдущий пример работал на пользовательской части сайта. А этот плагин сработает на событие формирования левого меню в панели администрирования. Он заменит иконку у ресурса с id=3 и создаст для него своё контекстное меню.

    $e = &$modx->Event;
    if($e->name = 'OnManagerNodePrerender'){
        if($ph['id'] == '3'){
            $ph['icon'] = "<i class='fa fa-copy'></i>";
            $ph['icon_folder_open'] = "<i class='fa fa-copy'></i>";
            $ph['icon_folder_close'] = "<i class='fa fa-copy'></i>";    
            $ph['contextmenu'] = array(
                'header1' => array(
                    'innerText' => "Это каталог"
                ),
                'item3' => array(
                    'innerHTML' => '<i class="fa fa-file-o fa-fw fa-lg"></i> Добавить товар',
                    'title' => 'Дочерний ресурс',
                    'id' => 'item3',
                    'onclick' => "modx.tree.menuHandler(3);"
                ),
                'item2' => array(
                    'innerHTML' => '<i class="fa fa-pencil-square-o fa-fw fa-lg"></i> Редактировать',
                    'title' => ' Редактировать',
                    'id' => 'item2',
                    'onclick' => "modx.tree.menuHandler(2);"
                ),
                'item12' => array(
                    'innerHTML' => '<i class="fa fa-eye fa-fw fa-lg"></i> Просмотр',
                    'title' => 'Просмотр',
                    'id' => 'item12',
                    'onclick' => "modx.tree.menuHandler(12);",
                )
            );
        }
    }
    $e->output(serialize($ph));

    Зачастую дополнения отдают плагинам переменные для изменения. Как правило, эти переменные описаны в документации к дополнению.