2016-05-30 16 views
1

SilverStripe CMSのWebサイトでは、拡張するカスタムフッタのアドオンコードがありますので、CMSに背景画像をアップロードできます。コードは問題ないようですが、追加されたフィールドはCMS内のどこにもありません。予想通り[コンテンツ]タブショーとして 背景画像UploadFieldがCMSに表示されない

class CustomFooter extends DataExtension { 

    static $db = array(
     'FooterContent' => 'HTMLText' 
    ); 

    public static $has_one = array(
     'Logo' => 'Image', 
     'BGImage' => 'Background Image' 
    ); 

    public function getCMSFields() { 
     $this->extend('updateCMSFields', $fields); 
     return $fields; 
    } 

    public function updateCMSFields(FieldList $fields) { 
     $fields->addFieldToTab('Root.Footer', new HTMLEditorField('FooterContent', 'Footer Content')); 
     $fields->addFieldToTab('Root.Main', new UploadField('Logo', 'Company Logo')); 
     $fields->addFieldToTab('Root.Main', new UploadField('BGImage', 'Background image')); 
    } 
} 

が変なふうなことに、両方の画像アップロードフィールドが表示されないと機能:

は、これは私のコードです。

UploadFieldが表示されないのはなぜですか?

答えて

3

あなた

public static $has_one = array(
"Logo"=>"Image", 
"BGImage"=>"Background Image" 
); 

はかなり奇妙に見えます。 $has_one配列にはキーとしてのリレーション名とリレーションのクラス名が値として含まれていますが、名前にスペースを含むクラス名は許可されていません。だから私は

public static $has_one = array(
"Logo"=>"Image", 
"BGImage"=>"Image" 
); 

のようなものを試してみた後、dev/build?flushを実行して、表がLogoID列と1体の関係を持っているためBGImageID列を持っている場合、データベースに確認してください。

フィールドの生成は正常に行われていますが、そのまま動作するはずです。

+0

最大の問題は、コードが、私が何をしたか、動作しますが、私は $ fields-> ....男ではなく、私のフッター]タブにUploadFieldを指摘 .....私UploadFieldに設定されたルートでしたaddFieldToTab( 'Root.Main'、新しいUploadField( 'BGImage'、 '背景画像')); 私はこう言っていました: $ fields-> addFieldToTab( 'Root.Footer'、新しいUploadField( 'BGImage'、 '背景画像')); –

関連する問題