【问题标题】:Adding Custom CsvBulkUploader to ModelAdmin in Silverstripe在 Silverstripe 中将自定义 CsvBulkUploader 添加到 ModelAdmin
【发布时间】:2017-05-30 20:55:11
【问题描述】:

在查看了内置 CSV 导入的 documentation 之后,我仍然不清楚如何将自定义 CsvBulkUploader 添加到 ModelAdmin。我知道您如何轻松地add the default uploader 以及如何轻松地create a custom controller for importing,但我不清楚如何将其添加到 ModelAdmin。我花了一上午的时间浏览 Stack Overflow 和 SilverStripe 社区论坛,但还没有找到任何东西。任何方向将不胜感激!

【问题讨论】:

  • 不是您问题的直接答案,但您可能想查看导入导出模块 (github.com/burnbright/silverstripe-importexport)。与默认导入器相比,它具有显着的性能改进,并且在导入大型数据集时对我来说似乎更加稳定。

标签: php silverstripe


【解决方案1】:

我想通了。

您可以通过在 $model_importers 中声明来将 CSV 批量加载程序添加到您的 ModelAdmin:

<?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 即可。所以现在你将使用PlayerCsvBulkLoader,而不是使用CsvBulkLoader。 sn-p up top 将因此被修改:

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

相当简单。我很早就尝试过这种方法,但是拼错了子类的名称!

更新:刚刚添加到SilverStripe's documentation

【讨论】:

  • 不错! In the documentation what wasn't made explicit was that you pull in the new extended Bulk Loader - 如果您认为这会受益,您可以提交拉取请求以更新文档!
  • @RobbieAverill 感谢您的建议!我刚刚提交了a pull request
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多