Плагіни

    Що таке плагін

    Плагін - це фрагменти коду, які прив'язані до системних подій та виконуються, коли ця подія настає.

    Як працюють плагіни

    При виконані практично будь-яких дій система генерує події. Припустимо, при публикації ресурсу відбувається подія 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);",
                )
            );
        }
    }
    $modx->event->output(serialize($ph));

    Найчастіше доповнення віддають плагінам змінні для зміни. Як правило, ці змінні описані в документації до доповнення.