extension = $extension; $this->tag = $tag; $this->callback = $callback; if ($extension->isEnabled()) { bff::tagAdd($tag, $callback); } } /** * Получаем ID тега * @param bool $htmlView * @return string */ public function getTag(bool $htmlView = false): string { if ($htmlView) { $params = ''; if (! empty($this->params)) { $params = json_encode($this->params, JSON_FORCE_OBJECT); } return ''; } return $this->tag; } /** * Добавляем параметр тега, например значение которое необходимо передать из шаблона в который будет вставлен блок: * key='id', value='echo (isset($v[\'id\']) ? $v[\'id\'] : 0);' * @param string $key ключ параметра * @param string|array $value значение параметра * @param mixed $wrap тип обвертки: * 'php' - php код * @return self */ public function param(string $key, $value, $wrap = 'php') { if (is_string($value) && $wrap === 'php') { if (mb_strlen($value) >= 2) { if ($value[0] === '$') { $value = ''; } elseif ($value[0] === '?' && $value[1] === '$' && isset($value[2])) { $value = mb_substr($value, 1); $value = ''; } else { $value = ''; } } else { return $this; } } $this->params[$key] = $value; return $this; } /** * Устанавливаем название блока * @param string $title * @return self */ public function title(string $title) { $this->title = $title; return $this; } /** * Получаем название блока * @return string */ public function getTitle(): string { return $this->title; } /** * Устанавливаем описание блока * @param string $text * @return self */ public function description(string $text) { $this->description = $text; return $this; } /** * Получаем описание блока * @return string */ public function getDescription(): string { return $this->description; } /** * Устанавливаем текст рекомендации по интеграции блока * @param string $text (markdown support) * @return self */ public function integration(string $text) { $this->integration = $text; return $this; } /** * Получаем текст рекомендации по интеграции блока * @return string */ public function getIntegration(): string { return $this->integration; } /** * Устанавливаем шаблон в котором рекомендуется выполнить вставку блока * @param string $path путь к файлу шаблона * @param array $options доп. параметры * @return self */ public function template(string $path, array $options = []) { $options['path'] = $path; $this->templates[] = $options; return $this; } /** * Получаем список шаблонов * @return array */ public function getTemplates(): array { return $this->templates; } /** * Устанавливаем используется ли блок * @param bool|Closure $enabled * @return void */ public function enabled($enabled = true): void { $this->enabled = $enabled; } /** * Используется ли блок * @return bool */ public function isEnabled(): bool { if ($this->enabled instanceof Closure) { $callback = $this->enabled; $this->enabled = $callback(); } return !empty($this->enabled); } /** * Удаление блока * @return bool */ public function remove(): bool { return bff::tagRemove($this->tag); } }