Топ 7. Скрытые возможности DevelNext

Share on VKShare on FacebookShare on Google+Tweet about this on TwitterPrint this page

Итак, в этой статье мы расскажем о 7 скрытых возможностях DevelNext.

1. Копирование компонентов в txt

Вы когда-нибудь пробовали скопировать компонент в DevelNext и вставить его в текстовый файл или в сообщение на форуме? Если нет, то попробуйте. Перед вами возникнет XML код (похожий на HTML), внутри которого будет вся информация о скопированном компоненте и даже код его событий. Но это еще не все, если вы сохраните этот код в txt файл, а потом, когда-нибудь скопируете текст из этого файла, то легко сможете вставить этот текст как компонент в среде DevelNext.


2. Свой текст приветствия

Когда запускается DevelNext, то он приветствует какой-то фразой, цитатой или шуткой. В базе есть около 100 таких приветствий, но если вам хочется чего-то новенького, вы можете легко добавить свои, делается это просто. Открываете файл /languages/ru/tips  в директории DevelNext с помощью любого текстового редактора и добавляете в конец свою фразу-приветствие. Учтите, что пустые строки игнорируются.


3. Закрытие Splash заставки

В опциях к проекту вы можете добавить свою splash заставку в виде картинки, которая будет запускаться при старте проекта, еще до полной загрузки приложения. Однако, если вам необходимо показывать заставку вплоть до ваших каких-то условий, а не закрывать сразу, вы делаете следующее:

  1. Отключаете опцию «Автоматически скрывать заставку после старта».
  2. В коде своего условия, пишите закрытие splash заставки:
1
app()->hideSplash();

4. Песочница для кода

Вот здесь, возможно не все поймут, для чего это нужно. Все дело в том, что в JPHP есть возможность выполнять код в песочнице, в изолированном режиме. В этом режиме из кода нет доступа к классам и функциям, которые были объявлены программистом ранее, а код выполняется как бы в чистом окружении, все с чистого листа. Это похоже на расширение runkit из оригинального php, только все работает из коробки и отлично поддерживается. А теперь, покажем — как это делать в коде:

1
2
3
4
5
6
// создаем конкурентное окружение, для поддержки многопоточности
$env = new Environment(null, Environment::CONCURRENT);
$env->execute(function () {
// код выполняется в изолированной системе, классы объявленные ранее - недоступны.
// все с чистого листа.
});

Такой режим выполнения может пригодиться, если вы хотите добавить скриптовую систему в свою программу или игру. Для безопасности, скриптовая система должна быть изолирована от кода приложения и выполняться отдельно. Вот вам и пригодится волшебный класс Environment. Кроме того, он многое умеет — импортировать и экспортировать классы/константы/функции из других окружений или в текущее окружение. И да, кстати, ваш код тоже выполняется в каком-то окружении Environment, его легко получить через специальный метод current():

1
2
// текущее окружение.
$env = Environment::current();

5. Скрытые поведения

Мы о поведениях для компонентов, о конкретных вещах. Многие и не догадываются, что есть такие поведения, которые недоступны в стандартном наборе, а появляются только для специальных типов компонентов. Иными словами, если поведение поддерживается только определенным типом компонентов, то только у них оно будет отображаться. Среди таких поведений есть, например,  Ограничение ввода символов — у текстовых полей для ввода. Не забывайте также, что после добавления пакета расширений 2D Game, появляется целый набор новых поведений во вкладке «Игра». Тоже самое может происходить и при добавлении сторонних пакетов, если они реализуют новые поведения.


6. Хранение данных в компонентах

Иногда возникает необходимость хранить внутри компонента какие-то дополнительные данные, для какой-то дополнительной логики. Если вы начинающий, то поверьте на слово, возможность хранить данные связанные с конкретным компонентом — это очень удобно для многих случаев. Программисты на JS очень хорошо знают про data-атрибуты или метод data() из jQuery, все это применяется там для тех же целей.

В DevelNext у абсолютно всех компонентов, даже модульных, есть метод data(), он универсален, может как записывать данные, так и читать, похож на метод data() из jQuery:

1
2
3
4
5
// записываем данные.
$this->button->data("my-super-secret-data", "123456");

// читаем данные компонента в переменную.
$mySuperSecretData = $this->button->data("my-super-secret-data");

7. Скрытый HTML редактор


В DevelNext есть один интересный компонент, визуальный редактор html, однако, его нет на палитре компонентов в редакторе форм. Не добавлен он по одной причине — плохая поддержка кастомизации, т.е. авторы компонента совсем не предусмотрели гибкую настройку компонента, то какие кнопки показывать/скрывать, нет возможности добавить новый функционал. В итоге проще было бы написать свой компонент, нежели использовать этот. Но он все равно присутствует в ядре и его можно использовать, если вас все устраивает. Создать его можно с помощью кода, например, в событии появления формы:

1
2
3
4
5
6
7
8
9
10
11
/**
* @event show
*/

function doShow(UXWindowEvent $e = null)
{
$editor = new UXHtmlEditor();
$editor->id = 'htmlEditor';
$editor->size = $this->layout->size;
$editor->anchors = ['left' => true, 'top' => true, 'right' => true, 'bottom' => true];
$this->add($editor);
}

Получить итоговый html текст, того что пользователь наредактировал в компоненте, можно через свойство htmlText:

1
$htmlText = $editor->htmlText;

комментария 2

  1. Слушайте круто. Но теперь жду доки по dffi.

  2. Хотелось бы подробнее про копирование объекта в текст.

Добавить комментарий