Плагины - фрагменты кода, которые привязаны к системными событиям и выполняются, когда это событие наступает.
При выполнении практически любых действий система генерирует события. Допустим, при публикации ресурса происходит событие 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));Зачастую дополнения отдают плагинам переменные для изменения. Как правило, эти переменные описаны в документации к дополнению.