Топ 7. Скрытые возможности DevelNext
Итак, в этой статье мы расскажем о 7 скрытых возможностях DevelNext.
1. Копирование компонентов в txt
Вы когда-нибудь пробовали скопировать компонент в DevelNext и вставить его в текстовый файл или в сообщение на форуме? Если нет, то попробуйте. Перед вами возникнет XML код (похожий на HTML), внутри которого будет вся информация о скопированном компоненте и даже код его событий. Но это еще не все, если вы сохраните этот код в txt файл, а потом, когда-нибудь скопируете текст из этого файла, то легко сможете вставить этот текст как компонент в среде DevelNext.
2. Свой текст приветствия
Когда запускается DevelNext, то он приветствует какой-то фразой, цитатой или шуткой. В базе есть около 100 таких приветствий, но если вам хочется чего-то новенького, вы можете легко добавить свои, делается это просто. Открываете файл /languages/ru/tips в директории DevelNext с помощью любого текстового редактора и добавляете в конец свою фразу-приветствие. Учтите, что пустые строки игнорируются.
3. Закрытие Splash заставки
В опциях к проекту вы можете добавить свою splash заставку в виде картинки, которая будет запускаться при старте проекта, еще до полной загрузки приложения. Однако, если вам необходимо показывать заставку вплоть до ваших каких-то условий, а не закрывать сразу, вы делаете следующее:
- Отключаете опцию “Автоматически скрывать заставку после старта”.
- В коде своего условия, пишите закрытие 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; |
Слушайте круто. Но теперь жду доки по dffi.
Хотелось бы подробнее про копирование объекта в текст.
Пользователям нужно больше информации , и подробнее с примерами .
А так только много вопросов и нет ответов.