Перейти к основному содержимому

ConditionGenerator

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

ConditionInterface.php

Сейчас существует несколько групп-условий, каждая группа реализована с помощью класса имплементирующего интерфейс ConditionInterface.

interface ConditionInterface {
public function add_controls( Controls_Stack $widget, array $config ): void;

public function generate( array $condition_data ): string;
}

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

Метод generate генерирует строку с условием. Условие - это валидный js код, который можно вызвать и получить boolean значение: true - условие выполнено, false - нет

CommonCondition.php

Данный класс отвечает за проверки переменных в оболочке курса определенным значениям или другим переменным. Например можно проверить, что курс завершен (isCourseCompleted = true) с помощью таких настроек:

PageActiveCondition.php

Условие из этого класса проверяет, выполняется ли оно на текущей странице курса. Id текущей странице в курсе получается из переменной Elementor'a elementorFrontend.config.post.id То есть условие выполнится только если window.parent.courseController.data.getAll().activePageId==elementorFrontend.config.post.id - именно этот код можно увидеть в методе generate класса PageActiveCondition.php

SpecificDeviceCondition.php

Работает на основе checkBrowser. Проверяет, соответствует ли устройство пользователя указанным требованиям:

  • Тип устройства - тип устройства desktop, tablet или mobile
  • Операционная система - windows, mac, android или ios
  • Браузер - chrome, safari или firefox

Pasted image 20241024151940

ConditionManager

Данный класс позволяет удобно добавлять наборы условий в виджеты

class ConditionManager extends Singleton {
/**
* @param non-empty-array<class-string<ConditionInterface>, array> $controls
*/
public function add_controls( Controls_Stack $widget, array $controls ): void {/*...*/}

public function generate( array $condition_data ): string {/*...*/}
}
  • add_controls( Controls_Stack $widget, array $controls ): void - добавляет в заданное место в виджете ($widget) все поля управления заданные в ($controls). Массив $controls хранит в ключах класс имплементирующий ConditionInterface, а значение это массив-конфигурация. Пример добавления:
ConditionManager::get_instance()->add_controls(
$repeater,
[
CommonCondition::class => [
'enabled_by_default' => true,
],
PageActiveCondition::class => [],
SpecificDeviceCondition::class => [],
]
);
  • generate( array $condition_data ): string - вызывает у всех классов-условий, метод generate и объединяет их через &&