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

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

Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Итак, в этой статье мы расскажем о 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 Responses

  1. Максим says:

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

  2. Максим says:

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

Leave a Reply