2016-06-05 16 views
0

Ich erstellen ein kleines Plugin für die OctoberCMS, aber jetzt beschäftigt sich mit einem Problem, einen Standardwert für ein Formular Einstellungen festzulegen.Festlegen eines Standardwerts für Einstellungen Formular zurück Null in Oktobercms

Ich verwendet Datenbankspeicher für meine Plugin-Einstellungen (Backend -> Einstellungen Registerkarte -> Mein Plugin Registerkarte), die funktioniert, ziemlich gut, außer ich kann keine Standardwerte festlegen.

Ich habe ein fields.yaml mit diesem Inhalt:

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 

ich die Einstellungen in meinen Komponenten wie folgt abrufen:

<?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' 
    } 

} 

Ich habe auch versucht, den Standardwert zu setzen, als zweiten param in der get() Methode wie in der OctoberCMS docs vorgeschlagen:

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

Also irgendwelche Vorschläge, wie ich zuverlässig einen Standardwert einstellen kann, wenn keiner in das Einstellungsformularfeld eingegeben/eingegeben wird?

Update:

Nach einigem Graben aroung ich die Erklärung in der Methode getSettingsValue() in 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; 
} 

Als mein Feld existiert in $this->fieldValues fand es gibt sie leer zu mir stattdessen die $default der Rückkehr Wert.

Also was ich dachte, den Standardwert zurückgeben, wenn der Feldwert leer ist, wird nicht abgedeckt.

Irgendwelche Vorschläge?

Antwort

1

Warum nicht initSettingsData Funktion verwenden, können Sie es wie folgt verwendet werden:

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'; 
    } 
} 
Verwandte Themen