Установка значения по умолчанию в форме настроек возвращает ноль в октябре.

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

Я использовал хранилище базы данных для настроек своего плагина («Бэкенд» -> вкладка «Настройки» -> вкладка «Мой плагин»), который работает, довольно хорошо, за исключением того, что я не могу установить значения по умолчанию.

у меня есть fields.yaml с этим содержанием:

tabs:
fields:
reviews_border_color:
label: 'Field1'
span: left
tab: 'review_sticker'
required: 1
type: text
default: '#F2F2F2'
rating_star_size:
label: 'Field2'
span: left
tab: 'review_sticker'
required: 1
type: number
default: 14

Я получаю настройки в моих компонентах следующим образом:

<?php namespace Codedge\TestPlugin\Components;

use Cms\Classes\ComponentBase;
use Codedge\TestPlugin\Models\Settings;

class TestComponent extends ComponentBase
{
public $starSize;
public $borderColor;

public function componentDetails()
{
return [
'name'        => 'Test Component',
'description' => '...'
];
}

public function defineProperties()
{
return [];
}

public function init()
{
$this->starSize = Settings::get('rating_star_size'); // not giving a default value when empty, default is 14
$this->borderColor = Settings::get('reviews_border_color'); // not giving a default value when empty, default is '#F2F2F2'
}

}

Я также попытался установить значение по умолчанию, в качестве второго параметра в get() метод, как предлагается в OctoberCMS документы:

public function init()
{
$this->starSize = Settings::get('rating_star_size', 14); // returns null
$this->borderColor = Settings::get('reviews_border_color', '#F2F2F2'); // returns null
}

Таким образом, какие-либо предложения, как я могу надежно установить значение по умолчанию, если ничего не указано / введено в поле формы настроек?

Обновить:

После некоторых раскопок я нашел объяснение в методе getSettingsValue() в system/behaviors/SettingsModel.php

/**
* Get a single setting value, or return a default value
*/
public function getSettingsValue($key, $default = null)
{
if (array_key_exists($key, $this->fieldValues)) {
return $this->fieldValues[$key];
}

return $default;
}

Как мое поле существует в $this->fieldValues он возвращает его пустым для меня, а не возвращает $default значение.

Так что то, что я думал, возвращая значение по умолчанию, если значение поля пустое, не рассматривается.

Какие-либо предложения?

0

Решение

Почему ты не используешь initSettingsData функция, вы можете использовать это так:

class Settings extends Model
{
public $implement = ['System.Behaviors.SettingsModel'];

// A unique code
public $settingsCode = 'my-settings';

// Reference to field configuration
public $settingsFields = 'fields.yaml';

public function initSettingsData()
{
$this->admin_email = '[email protected]';
$this->admin_name = 'Walid Ammar';
$this->other_settings = 'other value';
}
}
1

Другие решения

После консультации с командой OctoberCMS на Github, текущее поведение не является ошибкой — смотрите https://github.com/octobercms/october/issues/2094 . Могут быть соображения, чтобы изменить это поведение, но это другая история.

0

По вопросам рекламы [email protected]