1

皆さん、こんにちは。

このコードを使用して、アップロード フィールドに複数のファイルを追加しようとしています ->

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 があります。

問題は、アップロードフィールドがファイルを保持したくないため、ファイルを選択したときにファインダーで [OK] をクリックしても何も起こらないことです...誰か助けてもらえますか?

ありがとうトーマス。

4

3 に答える 3

0

数時間後、解決策を見つけました。おそらくそれは最善の解決策ではありませんが、私にとってはうまくいきます->

必要なドキュメントタイプごとに File クラスを拡張するクラスを作成したので、たとえば

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 だけで多くのファイルを追加できます。しかし、100種類の異なるドキュメントタイプがある場合、それは最善ではないと思います..

PS: UploadField を使用すると、ファイルをドラッグ アンド ドロップできますが、この機能は Chrome ではうまく機能しますが、Firefox では機能しません!

于 2013-07-26T07:01:26.273 に答える
0

UploadField動作するようには作られていませんDataObjectsが、あなたが見つけたように、Fileまたはサブクラスです。

あなたの場合、サブクラスは必要ないと思いますが、DocumentFileDo拡張するクラスを削除してDocumentPageAcces1.phpFileでこれを使用することができます

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

アップロードするファイルをより詳細に制御したい場合 (つまり、説明やタイトルなどを追加する場合)、その場合DataObject、 $has_one との関係を持つ を作成し、それを関係でFile使用できます。DataObjectあなたのページにGridField

DocumentFile.php

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

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

DocumentPageAccess1.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;
}
于 2013-07-28T08:55:09.937 に答える