2016-06-05 5 views
0

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

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

У меня есть 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 docs:

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

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

Update:

После некоторого копания aroung я нашел объяснение в методе 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

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

1

Почему бы вам не использовать 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'; 
    } 
}