Итак, в этой статье мы расскажем о 7 скрытых возможностях DevelNext.
Вы когда-нибудь пробовали скопировать компонент в DevelNext и вставить его в текстовый файл или в сообщение на форуме? Если нет, то попробуйте. Перед вами возникнет XML код (похожий на HTML), внутри которого будет вся информация о скопированном компоненте и даже код его событий. Но это еще не все, если вы сохраните этот код в txt файл, а потом, когда-нибудь скопируете текст из этого файла, то легко сможете вставить этот текст как компонент в среде DevelNext.
Когда запускается DevelNext, то он приветствует какой-то фразой, цитатой или шуткой. В базе есть около 100 таких приветствий, но если вам хочется чего-то новенького, вы можете легко добавить свои, делается это просто. Открываете файл /languages/ru/tips в директории DevelNext с помощью любого текстового редактора и добавляете в конец свою фразу-приветствие. Учтите, что пустые строки игнорируются.
В опциях к проекту вы можете добавить свою splash заставку в виде картинки, которая будет запускаться при старте проекта, еще до полной загрузки приложения. Однако, если вам необходимо показывать заставку вплоть до ваших каких-то условий, а не закрывать сразу, вы делаете следующее:
1 | app()->hideSplash(); |
Вот здесь, возможно не все поймут, для чего это нужно. Все дело в том, что в 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(); |
Мы о поведениях для компонентов, о конкретных вещах. Многие и не догадываются, что есть такие поведения, которые недоступны в стандартном наборе, а появляются только для специальных типов компонентов. Иными словами, если поведение поддерживается только определенным типом компонентов, то только у них оно будет отображаться. Среди таких поведений есть, например, Ограничение ввода символов – у текстовых полей для ввода. Не забывайте также, что после добавления пакета расширений 2D Game, появляется целый набор новых поведений во вкладке “Игра”. Тоже самое может происходить и при добавлении сторонних пакетов, если они реализуют новые поведения.
Иногда возникает необходимость хранить внутри компонента какие-то дополнительные данные, для какой-то дополнительной логики. Если вы начинающий, то поверьте на слово, возможность хранить данные связанные с конкретным компонентом – это очень удобно для многих случаев. Программисты на 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"); |
В 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; |
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in…
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in…
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in…
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in…
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in…
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in…
View Comments
Пользователям нужно больше информации , и подробнее с примерами .
А так только много вопросов и нет ответов.
Хотелось бы подробнее про копирование объекта в текст.
Слушайте круто. Но теперь жду доки по dffi.