2017-05-30 6 views
1

組み込みのCSVインポートではdocumentationを見てから、ModelAdminにカスタムCsvBulkUploaderを追加する方法はまだわかりません。 add the default uploaderをどうやって簡単にできるのか、どのようにすればcreate a custom controller for importingでもいいのですが、これをModelAdminにどのように追加するのかは分かりません。私はStack OverflowとSilverStripeコミュニティフォーラムを見ながら朝を過ごしましたが、まだ何かを見つけることができませんでした。いずれの方向にも大いに感謝します!SilverstripeのModelAdminにカスタムCsvBulkUploaderを追加する

+0

ないあなたの質問に直接答えにこれを追加しましたが、インポート・エクスポート・モジュールに見てみたいことがあります(https://github.com/burnbright/silverstripe-importexport) 。デフォルトのインポーターよりもパフォーマンスが大幅に改善されており、大きなデータセットをインポートするときにはかなり安定しているようです。 – PsychoMo

答えて

2

私はそれを理解しました。あなたは$model_importersでそれを宣言することによって、あなたのModelAdminのにCSVバルクローダーを追加することができます

<?php 
class PlayerAdmin extends ModelAdmin { 
    private static $managed_models = array(
     'Player' 
    ); 
    private static $model_importers = array(
     'Player' => 'CsvBulkLoader', 
    ); 
    private static $url_segment = 'players'; 
} 
?> 

そしてCSV Importマニュアルに示されているように、あなたはCsvBulkLoaderクラスを拡張することができます。たとえば、次のように明示されていなかったものをドキュメントで

<?php 
class PlayerCsvBulkLoader extends CsvBulkLoader { 
    public $columnMap = array(
     'Number' => 'PlayerNumber', 
     ... 
    ); 
    public $duplicateChecks = array(
     'Number' => 'PlayerNumber' 
    ); 
    public $relationCallbacks = array(
     'Team.Title' => array(
     'relationname' => 'Team', 
     'callback' => 'getTeamByTitle' 
    ) 
    ); 
    public static function getTeamByTitle(&$obj, $val, $record) { 
     return FootballTeam::get()->filter('Title', $val)->First(); 
    } 
} 
?> 

あなたは単にあなたのModelAdminの中で$model_importersにそれを追加することによって、新しい拡張バルクローダの中で引っ張るということでした。だからCsvBulkLoaderの代わりにPlayerCsvBulkLoaderを使用します。スニペットアップトップはthusly改訂されるだろう:

<?php 
class PlayerAdmin extends ModelAdmin { 
    private static $managed_models = array(
     'Player' 
    ); 
    private static $model_importers = array(
     'Player' => 'PlayerCsvBulkLoader', 
    ); 
    private static $url_segment = 'players'; 
} 
?> 

かなりシンプル。私は早い段階でこのアプローチを試みましたが、サブクラスの名前のスペルが間違っていました!

UPDATE:ちょうどSilverStripe's documentation

+0

ニース! '明示されていなかったことは、拡張された新しいバルクローダを引っ張ったということでした。あなたが利益を得ると思うなら、ドキュメントを更新するためのプルリクエストを提出することができます! –

+0

@RobbieAverillの提案に感謝します!私は[プルリクエスト](https://github.com/silverstripe/silverstripe-framework/pull/6983)を提出しました。 – JustinTBrown

関連する問題