Базовый виджет

Создайте виджет, который будет отображать “Hello, World!” и, опционально, любой текст по желанию пользователя.

В Elgg виджеты — это компоненты, которые можно перетаскивать на ваш профиль или панель администратора.

Этот урок предполагает, что вы знакомы с базовыми концепциями Elgg, такими как:

Вам следует пересмотреть их, если вы запутаетесь в процессе.

Добавление кода представления виджета

Elgg автоматически сканирует определенные каталоги в папках плагинов в поисках определенных файлов. Представления позволяет легко добавить код отображения или выполнить другие действия, например, переопределить поведение Elgg по умолчанию. Сейчас мы просто добавим код представления для вашего виджета. Создайте файл по адресу /views/default/widgets/helloworld/content.php. “helloworld” — это имя вашего виджета в плагине hello. В этот файл добавьте следующий код:

<?php

echo "Hello, world!";

Это добавит эти слова на холст виджета при его отображении. Elgg берёт на себя загрузку виджета.

Регистрация вашего виджета

Elgg нужно явно сообщить, что плагин содержит виджет, чтобы он сканировал директорию представлений виджетов. Это делается путём регистрации виджета в вашем elgg-plugin.php:

<?php
    return [
                'widgets' => [
                            'helloworld' => [
                                    'name' => 'Hello, world!',
                                    'description' => 'The "Hello, world!" widget',
                            ],
                    ],
            ];

Теперь перейдите на страницу своего профиля в веб-браузере и добавьте виджет “hello, world”. Он должен отобразить “Hello, world!”.

Примечание

Для реальных виджетов всегда хорошая идея поддерживать Интернационализация.

Разрешить пользовательскую настройку

Нажмите на ссылку редактирования на панели инструментов созданного вами виджета. Вы заметите, что по умолчанию он даёт вам контроль только над доступом (над тем, кто может видеть виджет).

Предположим, вы хотите разрешить пользователю управлять тем, какое приветствие отображается в виджете. Так же, как Elgg автоматически загружает content.php при просмотре виджета, он загружает edit.php, когда пользователь пытается отредактировать виджет. Поместите следующий код в /views/default/widgets/helloworld/edit.php:

<div>
    <label>Message:</label>
    <?php
        //This is an instance of the ElggWidget class that represents our widget.
        $widget = $vars['entity'];

        // Give the user a plain text box to input a message
        echo elgg_view('input/text', array(
            'name' => 'params[message]',
            'value' => $widget->message,
            'class' => 'hello-input-text',
        ));
    ?>
</div>

Обратите внимание на связь между значениями, передаваемыми в поля „name“ и „value“ input/text. Имя поля ввода текста — params[message], потому что Elgg будет автоматически обрабатывать переменные виджета, помещённые в массив params. Фактическое имя переменной PHP будет message. Если бы мы хотели использовать поле greeting вместо message, мы бы передали значения params[greeting] и $widget->greeting соответственно.

Причина, по которой мы устанавливаем опцию „value“ массива, заключается в том, чтобы представление редактирования запоминало, что пользователь ввёл в прошлый раз, когда изменял значение текста своего сообщения.

Теперь, чтобы отобразить сообщение пользователя, нам нужно изменить content.php для использования этой переменной message. Отредактируйте /views/default/widgets/helloworld/content.php и измените его следующим образом:

<?php

$widget = $vars['entity'];

// Always use the corresponding output/* view for security!
echo elgg_view('output/text', array('value' => $widget->message));

Теперь вы должны иметь возможность вводить сообщение в текстовое поле и видеть его в виджете.