2017-12-21 4 views
0

Ich habe ein Array $ many_many für $ slideImages auf meiner Homepage erstellt. Nach vielem Lesen und Versuchen kann ich dem CMS immer noch nicht die Reihenfolge mitteilen, in der die Bilder in der Vorlage erscheinen sollen. Standardmäßig sind sie nach Upload-Datum sortiert, glaube ich.Wie sortiert man Bilder als Teil einer many_many in silverstripe?

Ich kann das Rasterfeld erstellen, aber ich kann nicht scheinen, ein Textfeld in einer Sortiernummer einzugeben. Gerade habe ich gerade einen Hasen-Trail beendet, der mich zu gridFieldComponent geführt hat, aber ich bekomme einen Fehler und die Dokumente helfen mir nicht.

use SilverStripe\Assets\Image; 
use SilverStripe\AssetAdmin\Forms\UploadField; 
use SilverStripe\Forms\TextField; 
use SilverStripe\Forms\GridField\GridFieldComponent; 
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor; 
use SilverStripe\Forms\GridField\GridField; 

class HomePage extends Page 
{ 
    private static $db = []; 

    private static $has_one = []; 

    private static $many_many = [ 
     'SliderImage'=>Image::Class 
    ]; 

    private static $owns = [ 
     'SliderImage' 
    ]; 
    private static $many_many_extraFields= [ 
     'SliderImage'=>array(   
      'Sort'=>'Int' 
     )   
    ]; 

    public function getCMSFields(){ 
     $fields = parent::getCMSFields(); 

     $fields->addFieldToTab('Root.Attachments', UploadField::create('SliderImage', 'Sllider Images')->setFolderName('HomePageSlides')); 

     $gridFieldConfig = GridFieldConfig_RelationEditor::create()->addComponents(

      new GridFieldComponent(TextField('Sort')) 
    ); 

     $gridField = new GridField("SliderImage", "Slider Image", $this->SliderImage()->sort('Sort'), $gridFieldConfig); 

     $fields->addFieldToTab("Root.Attachments", $gridField); 

     return $fields; 
    } 
} 

Der Fehler ich erhalte, ist:

"Uncaught Error: Cannot instantiate interface SilverStripe\Forms\GridField\GridFieldComponent"

+2

ich verpassen neu in 'neuen GridFieldComponent (TextField- ('Sort'))'; BTW: Ich würde die ':: create()' Syntax verwenden; z.B. 'GridFieldComponent :: create (TextField :: create ('Sort'))' – wmk

+3

BTW2: Installiere xdebug in deiner Entwicklungsumgebung, du bekommst ein nettes Backtrace mit jeder Fehlermeldung; Dann können Sie sehen, wo der Fehler in Ihrem Code auftritt. Sehr praktisch, wenn Ihr Code in einer Framework-Klasse einen Fehler verursacht ... – wmk

Antwort

1

Per wmk Kommentar, Sie sind ein new oder ::create auf der TextField Initialisierung für Ihr Sort Feld fehlen.

Sollte sein:

new GridFieldComponent(new TextField('Sort')) 

Oder noch besser:

GridFieldComponent::create(TextField::create('Sort')) 
Verwandte Themen