2013-07-25 28 views
1

大家如何添加與silverstripe uploadfield許多文件

我試圖超過1文件添加到我的uploadfield與此代碼 - >

class FileDo extends File { 

    static $has_one = array(
     'DocumentsFile' => 'DocumentsFile', 

    ); 
} 


class DocumentsFile extends DataObject { 


    static $has_one = array(
     'DocumentPageAcces1' => 'DocumentPageAcces1' 
    ); 
    static $has_many = array(
     'Files' => 'FileDo' 
    ); 


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

     $fields->removeByName('DocumentPageAcces1ID'); 


     return $fields; 
    } 

    public function onBeforeWrite() { 
     parent::onBeforeWrite(); 
     $page = DataObject::get_one('DocumentPageAcces1'); 
     if($page) { 
      $this->DocumentPageAcces1ID = $page->ID; 
     } 
    } 

} 




class DocumentPageAcces1 extends Page { 


    static $has_many = array(
     'DocumentsFiles' => 'DocumentsFile', 
    ); 

    public function getCMSFields() { 

     $fields = parent::getCMSFields(); 


    $fields->addFieldToTab('Root.Main', new TextareaField('DocumentsIntro_en', "Document Introduction")); 
    $fields->addFieldToTab('Root.Main', new TextareaField('PublicationsIntro_en', "Publication Introduction")); 


    $fields->addFieldToTab('Root.FR', new TextareaField('DocumentsIntro_fr', "Document Introduction")); 
    $fields->addFieldToTab('Root.FR', new TextareaField('PublicationsIntro_fr', "Publication Introduction")); 


    $fields->addFieldToTab('Root.NL', new TextareaField('DocumentsIntro_nl', "Document Introduction")); 
    $fields->addFieldToTab('Root.NL', new TextareaField('PublicationsIntro_nl', "Publication Introduction")); 


    $upload = new UploadField(
     'DocumentsFile', 
     'Document', 
     $this->DocumentsFiles() 
    ); 

    $fields->addFieldToTab('Root.DocumentsFile', $upload); 

    $fields->removeByName('Content'); 
    $fields->removeByName('Metadata'); 



    return $fields; 
} 

} 
class DocumentPageAcces1_Controller extends Page_Controller { 

} 

所以要清楚:我試圖在DocumentPageAcces1中添加一些DocumentFile。當我執行此代碼時,我在DocumentPageAcces1中有選項卡DocumentsFiles,並在此選項卡中有uploadfield。

問題是,uploadfield不想保留我的文件,所以當我選擇一些文件,我點擊確定在我的finder中,什麼也沒有發生......任何人都可以幫助我嗎?

謝謝托馬斯。

回答

0

幾個小時我找到了解決辦法之後,也許它不是最好的,但它爲我的作品 - >

我創建的擴展文件類每種文檔類型,我需要讓我有例如

class DocumentFileDo extends File { 
    static $has_one = array(
     'DocumentPageAcces1' => 'DocumentPageAcces1' 
    ); 
} 

在我DocumentPageAcces1.php我有這樣的關係的has_many:

static $has_many = array(
    'DocumentFileDos' => 'DocumentFileDo', 
); 

我的getCMSFields功能我:

$fields->addFieldToTab('Root.Document', new UploadField('DocumentFileDos')); 

它工作的很好,你可以用has_many關係和一個UploadField來添加很多文件。但它不是我認爲最好的,如果你有一百種不同的文件類型..

PS:使用UploadField你可以拖放文件,但這個功能在Chrome上運行良好,不在Firefox上!

0

UploadField不能與DataObjects一起使用,但像您在File或它的子類中找到的一樣。

雖然你的情況,我不認爲你需要一個子類,所以你可以只刪除您DocumentFileDo類擴展File並在DocumentPageAcces1.php

static $has_many = array(
    'DocumentFiles' => 'File', 
); 

使用在這種情況下你希望對你上傳的文件有更多的控制/細節(例如添加描述,標題等),在這種情況下,你可以創建一個DataObject,它與File具有$ has_one關係,然後在關係中使用該DataObject在您的網頁上加上GridField

DocumentFile.php

class DocumentFile extend DataObject 
{ 
    static $db = array(
     'Description' => 'HTMLText' 
    ); 

    static $has_one = array(
     'File' => 'File' 
    ); 
} 

DocumentPageAcces1.php

static $has_many = array(
    'DocumentFiles' => 'DocumentFile' 
); 

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

    $c = new GridFieldConfig_RelationEditor(); 
    $f = new GridField('Documents', 'DocumentFiles', $this->DocumentFiles(), $c); 
    $fields->addFieldToTab('Root.Documents', $f); 

    return $fields; 
} 
+0

感謝您的答覆,其實你的解決方案是好的,如果我只有一種類型的文件。但是如果我需要添加一些其他的,我需要創建DataObject,否則Silverstripe鏈接這兩個文件。 – tomzi

+0

不知道我真的明白你的意思嗎?你想將許多文件鏈接到一個頁面嗎?所有的類File或子類? – colymba

相關問題