2017-12-29 21 views
1

内の$にhas_oneのデフォルトのドロップダウンを削除することはできません私が試してみました。私はSilverstripe

use SilverStripe\ORM\DataObject; 
use //..... 

class Product extends DataObject { 
    private static $db = [ 
     'ProductName'=>'Varchar', 
     'TagLine'=>'Text', 
     'GeneralDescription'=>'HTMLText' 

    ]; 
    private static $has_one = [ 
     'SplashImage'=>Image::Class, 
     'ProductCategory'=>ProductCategory::Class 
    ]; 
    private static $has_many = [ 
     'ProductImage'=>Image::Class, 
     'Features'=>'Feature' 
    ]; 
    private static $owns = [ 
     'SplashImage', 
     'ProductImage' 
    ]; 
    private static $summary_fields = array(
     'ProductName'=>'Product Name' 
    ); 
    private static $searchable_fields = [ 

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

     $categoryField = DropdownField::create('ProductCategory', 'Choose Product Category', ProductCategory::get()->map('ID', 'ProductCategoryTitle'));    

     $fields->replaceField('ProductCategory', $categoryField); 

     return $fields;  
    } 
} 

エラーは発生していませんが、idが#のデフォルトのドロップダウンフィールドが先頭にあります。

+0

:ドロップダウン、使用を作成します。 – ntd

+0

再注文する必要はありません。私はデフォルトのフィールドを削除し、自分自身を使用する必要があります。 –

答えて

5

has_oneとの関係では、フィールド名は<RelationName>IDである必要がありますので、ProductCategoryIDです。

SilverStripeがフィールドをCMSタブから名前で削除するには、追加名をリレーション名に参照する必要があります。あなたがhas_one関係のためにカスタムフィールドを作成した場合

$fields->removeByName('ProductCategoryID'); 

また、あなたはフィールドの名前として<RelationName>IDを使用してください。例えば。あなただけの[changeFieldOrder](http://api.silverstripe.org/4/SilverStripe/Forms/FieldList.html#method_changeFieldOrder)を使用することができます並べ替えのために

DropdownField::create(
    'ProductCategoryID', // Use RelationName + ID 
    'Choose Product Category', 
    ProductCategory::get()->map('ID', 'ProductCategoryTitle') 
); 
+0

これはドキュメントに含まれていないことです: '' ProductCategory '=>' ProductCategoryID''はエラーを投げます –

+0

別の答えから何を意味するのか分かりました。 removeByNameメソッドに "ProductCategoryID"が必要でした。あなたはあなたの答えを編集することができますので、私は正しい印をつけることができます。ありがとうございました。 –

関連する問題