Как сделать кастомный виджет

Обновлено: 05.07.2024

Не самый тривиальный способ применения плагина Advanced Custom Fields (ACF) для создания сложных виджетов в Вордпресс.

Плагин ACF — мой любимчик! ACF один из немногих плагинов, который просто перевернул мои взгляды на Вордпресс разработку. Без него не обходится уже ни один проект. Практически 100% задач, связанных с произвольными полями Вордпресс, решаются с помощью ACF. Я сейчас уже не вспомню, когда писал для полей какой-то код. Причем, для решения повседневных задач вполне хватает стандартной бесплатной версии ACF.

Сегодня я покажу, как с помощью ACF сделать свой кастомный виджет. Конечно, для решения задачи можно обойтись и без плагинов: дописать пару сотен кода, а потом копаться в нем при каждом внесении изменений. Так было раньше, но сейчас почти на всех моих сайтах есть ACF, и я не ищу сложных путей.

Открываем functions.php активной темы или функциональный плагин и регистрируем новый виджет.

Назову его для примера danilin_testwidget.

Теперь переходим непосредственно к виджету и создаем его с помощью стандартного класса WP_Widget.

Выглядит это так

Если виджет выводится, значит все работает и можно переходить к следующему шагу.

В качестве примера возьмет три поля: текст, изображение и цвет, которым зальем фон виджета.

Как сделать свой виджет в Вордпресс с помощью плагина ACF

Условия отображения

Дальше как обычно добавляем поля:

  1. Текстовое поле — danilin_testwidget_text
  2. Изображение — danilin_testwidget_image
  3. Цвет — danilin_testwidget_color

В итоге должна получиться вот такая группа полей:

Как сделать свой виджет в Вордпресс с помощью плагина ACF

Группа полей тестового виджета

Настройка вывода произвольных полей виджета

Как сделать свой виджет в Вордпресс с помощью плагина ACF

Тестовый виджет с произвольными полями

Теперь нам нужно заполнить эти поля и вывести их на фронте.

Заполняем текстовое поле, загружаем изображение и задаем цвет:

Как сделать свой виджет в Вордпресс с помощью плагина ACF

Текстовое поле можно вывести так:

Цвет можно получить, как текст, сохранить в переменную $color и задействовать ее в качестве фона блока.

Окончательный код

В итоге должен получиться примерно такой код:

На фронте должна получиться вот такая красота:

Как сделать свой виджет в Вордпресс с помощью плагина ACF

Виджет

Отступы, размеры можно скорректировать с помощью CSS.

В заключение

Начинающим девелоперам я бы рекомендовал не тупо копипастить код, а немного вникнуть и разобраться. ACF — очень мощный плагин и открывает просто необъятные горизонты использования Вордпресс. В примере показаны всего три независимые друг от друга поля. На практике их обычно намного больше, они часто зависят друг от друга, выводят разный сложный динамический контент и реально выручают. При этом реализация всей этой магии занимает считанные минуты.

Делаю сайты на Вордпресс с 2008 года. Не просто сайты, а уникальные инструменты для решения сложных бизнес‑задач с оптимизацией и поддержкой.


Россия

  • размер шрифта уменьшить размер шрифтаувеличить размер шрифта
  • Печать
  • Эл. почта
  • Станьте первым комментатором!

Пишем простой виджет - Виджеты (компоненты) в Qt5.

Сегодня мы напишем простой виджет – лампочку (круг), которая будет у нас загораться выбранным цветом.

Создаем простой виджет

Создадим проект Qt Widgets Application – LampWidget

Добавим новый класс для нашего виджета – QLampWidget

Теперь нам нужно добавить виджет на на главную форму, а также добавить компоновку или разметку ( layout ), далее я буду использовать термин Разметка. Что такое компоновка и зачем она нужна мы поговорим в другой статье.

Добавим в конструктор главной формы следующий код:

Вот мы и создали простой виджет.

Задаем размеры виджета

У каждого виджета есть своя ширина и высота. У виджета, который мы создали нет четких размеров, давайте в этом убедимся.

В метод paintEvent() добавим строку:

2020-12-26_11-02-40.jpg

Как видите, рамка заняла всё окно. Это происходит потому что созданная нами Разметка занимает всю форму и всё помещенные в нее виджеты автоматически стремятся занять всё доступное пространство, давайте добавим еще один виджет:

2020-12-26_11-07-07.jpg

Как видите виджеты равномерно заполнили всё доступное пространство формы.

Давайте зададим виджету размер. В нашем случаем наша лампочка будет размером 32х32 пикселя.

Изменим конструктор виджета:

Так же добавим объявление метода:

Этот метод необходим, для того, чтобы при масштабировании и прочих преобразованиях Qt5 точно знал размеры виджета. В данный момент они фиксированы.

2020-12-26_11-14-05.jpg

Как видите размер виджета уменьшился согласно заданным размерам.

Удалим из конструктора формы объявление второго виджета, он нам не понадобиться.

Рисуем лампочку

Нарисуем круг – основу нашей лампочки, так же уменьшим толщину линии границы виджета:

2020-12-26_11-20-51.jpg

Добавим фон для лампочки:

Добавляем градиент

Добавим градиент, чтобы лампочка не выглядела слушком плоской и скучной.

2020-12-26_11-47-56.jpg

Теперь наша лампочка выглядит лучше.

Изменяем состояние лампочки

Наша лампочка может быть в двух состояниях – включена или выключена. Во включенном состоянии она будет красной, в выключенной – серой.

Добавим поле отвечающее за хранение состояния виджета.

Добавим для него методы:

Внесем изменения в метод paintEvent() , для реализации функционала:

Добавим в конструктор виджета строку:

По умолчанию лампочка всегда будет включена.

Добавим константы для статуса лампочки:

Как видите ничего не изменилось.

Добавим в конструктор формы

2020-12-26_14-19-42.jpg

Давайте рассмотрим код:

В переменную onColor мы записываем базовый цвет кнопки.

Обратите внимание – цвет должен быть не очень ярким, даже наоборот - темным, но за счет градиента он будет ярче!

От основного цвета мы вычисляем цвет начала градиента, с помощью HSL увеличив яркость цвета, таким образом, для любого цвета внешний вид кнопки у нас не измениться!

Далее просто проверяем статус лампы и задаем соответствующий градиент.

Управляем лампой

Давайте добавим на форму кнопку и добавим слот, чтобы включать/выключать нашу лампу.

Добавим на форму кнопку QPushButton, установим у нее свойства checkable и flat и checked .

В заголовок главной формы, чтобы он был доступен из метода слота.

Запускаем и… Ничего, при нажатии на кнопку, статус лампочки не меняется.

Если мы добавим в слот отладку:

То в консоли увидим:

Так что слот отрабатывает, но наш виджет не обновляется. Но если вы нажмете на кнопку и свернете/развернете окно – цвет поменяется!

Метод update() уведомляет виджет, что нужно заново перерисовать свое содержимое, таким образом вызывается метод paintEvent() и цвет кнопки меняется.

Меняем цвет лампочки

Красная лампочка это хорошо, но нам может потребоваться лампочки разных цветов. Чтобы не плодить виджеты, давайте сделаем виджет более универсальным.

Добавим приватное поле для цвета лампы:

Добавим конструкторы для инициализации и обновим конструктор по умолчанию:

В методе paintEvent() исправим первую строку на

Добавим еще 2 лампочки в конструкторе формы

2020-12-26_15-00-04.jpg

Уберем границу вокруг виджета, удалив или закомментировав, в методе paintEvent() строки:

В заключение я приведу более сложный пример - добавлю еще кнопок и лампочек, этот пример мы отдельно рассмотрим в одной из будущих статей.

2020-12-27_19-30-02.jpg

Исходный код доступен на Github .

Заключение

Сегодня мы создали простой виджет – лампочку.

Мы добавили возможность задавать цвет включенной лампочки.

А также возможность переключать её состояние с помощью метода.

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

Я пытаюсь создать виджет, почти такой же, как существующий виджет. Это означает, что если я хочу использовать свойства существующего, мне придется передать их ему из моего пользовательского виджета. В этом примере я создам виджет, содержащий TextField. Мой подход был бы примерно таким:

Но у меня есть одна проблема: не всегда я хочу передать значение свойству TextField, например функции onTap. В настоящее время я не решил, как условно передать аргумент вложенному виджету, так сказать. Если я создам такой виджет:

Я всегда получаю исключения, если не использую все свойства, потому что да, они пустые.

При построении MyTextFieldWithPadding возникла следующая ошибка NoSuchMethodError: метод '> =' был вызван для null. Получатель: null Пробный вызов:> = (0.0)

Возможно, есть другие подходы к созданию виджета, и я был бы очень благодарен, если бы вы дали мне отзыв об этом!

Программы Kustom Maker (KLWP, KWGT, KLCK и другие)
Версия: 3.55b112309
Последнее обновление программы в шапке: 12.05.2021

Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Краткое описание:
В теме обсуждают программы Kustom Industries Kustom Maker (KLWP, KWGT, KLCK и другие)

Сделайте свой Android Launcher уникальным с помощью Kustom - самого мощного инструмента по созданию живых обоев! Используйте потрясающий редактор WYSIWYG (What You See Is What You Get - что ты видишь, то и получишь), чтобы создать собственный дизайн с прекрасной анимацией и отображением любых необходимых данных! Если вы искали Rainmeter или Conky для Android, то Kustom как раз то что нужно! Необходим просто виджет, но такой же функциональный? Ознакомьтесь с KWGT
С помощью Kustom можно создавать уникальные цифровые или аналоговые часы (с секундной стрелкой), анимированные шаблоны, виджет с погодой, обои в стиле Material, обои с текстом, сложные счетчики процессора/памяти, случайно сменяемые изображения, изображения с прокруткой, астрономические данные и многое другое. Вы ограничены лишь воображением.

Pro-версии позволит:
- Убрать рекламу;
- Поддержать разработчика!
- Разблокировать импорт с SD-карты и загрузку всех сторонних скинов;
- Разрешить создание APK с предустановками;
- Спасти мир от инопланетного вторжения.

Сделайте свой Android Launcher или экран блокировки уникальным с помощью Kustom - самого мощного инструмента по созданию виджетов! Используйте потрясающий редактор WYSIWYG (What You See Is What You Get - что ты видишь, то и получишь), чтобы создать собственный дизайн с отображением любых необходимых данных и, в отличии от многих других инструментов, без разряда батареи! Хотите анимацию? Тогда попробуйте KLWM , младшего брата KWGT!
С помощью Kustom можно создавать уникальные цифровые или аналоговые часы, виджет с погодой, виджет с текстом, сложные счетчики батареи или памяти, случайно сменяемые изображения, музыкальные плееры, часы с мировым временем, виджеты с астрономическими данным и многое другое. Вы ограничены лишь воображением.

Pro-версии позволит:
- Убрать рекламу;
- Поддержать разработчика!
- Разблокировать импорт с SD-карты и загрузку всех сторонних скинов;
- Восстановить предустановку;
- Спасти мир от инопланетного вторжения.

Создайте собственный экран блокировки с вашим стилем и безграничными возможностями

Make your Android Lockscreen look unique with Kustom the most powerful Lock Screen creator ever! Use its awesome WYSIWYG (What You See Is What You Get) editor to create you own designs and display any data you need, at once, and with wonderful animations too! If you were looking for Rainmeter or Conky on Android Lockscreen, this is it!

*This is NOT a secure Lock, if you need security then use this app together with your standard system lockscreen app which is the ONLY way to secure your device*

Not looking for a Lock Screen? Check out THE Widget Maker KWGT and best Live Wallpaper Maker KLWP

With Kustom you can createi almost everything, from watches like Digital and Analog Clocks (with seconds hand) to Animated Patterns, Live Map background, Weather Widgets, Material Lockscreens, sophisticated CPU/Memory meters, randomly changing images, scrolling images, gyroscopic effects, astronomical data and much much more. Imagination is the limit.

PLEASE do not use reviews for support/refund questions, use email or G+/Reddit linked below

Опубликовать ваши замечательные проекты Kustom в APK за считанные секунды!

Ok so you created some wonderful design with Kustom Live Wallpaper Maker or Kustom Widget Maker and now you want to share it with your friends or on Play Store? No worries! KAPK is here to help!

Kustom APK Maker allows you to compile in a few click wonderful Skin Packs that can be installed directly on Android devices or shared via the Play Store, features include:

- Support for official Kustom micro dashboard panel
- Theming of the app to match your colors and style
- Custom icons, name and easy selection of exported presets
- Automatic versioning, if you need to update your pack just rebuild and upload!

Check it out now, its free!

Icon made by Aadi Bajpai(The Clashster) based on great design by Bill Surowiecki

Читайте также: