제안 된 솔루션에 대한 몇 가지 세부 정보.
1) 추천 3dgoo @는 GridFieldBulkEditingTools 모듈을 사용하여 언급. 작곡가 "colymba/gridfield-bulk-editing-tools": "dev-master"
을 통해 최신 베스트 마스터를 다운로드하십시오. 이렇게하면 많은 이미지를 업로드 할 수 있으며 각 이미지에 대한 DataObject가 만들어집니다. 일괄 업로드 버튼을 사용합니다. 여기가 ModelAdmin
에서 설정해야하는 방법이다 :
class ImportHeaderImagesTask extends BuildTask
{
protected $title = 'Import Header Images';
protected $description = 'Import Header Images......';
/**
* Check that the user has appropriate permissions to execute this task
*/
public function init()
{
if(!Director::is_cli() && !Director::isDev() && !Permission::check('ADMIN'))
{
return Security::permissionFailure();
}
parent::init();
}
/**
* Do some stuff
*/
public function run($request)
{
// this is where files are uploaded manually
$TempFTPFolder = ASSETS_PATH . '/FTP';
// This is the folder where files will be moved
$LiveFolderPath = 'assets/path/to/final/live/folder/';
$LiveFolder = DataObject::get_one('File', "Filename = '$LiveFolderPath'");
if (file_exists($TempFTPFolder) && $LiveFolder->ID) // if the FTP upload folder exist and the destination live folder exist
{
$FTPList = scandir($TempFTPFolder); // get the FTP folder content
foreach ($FTPList as $FileFolder)
{
$FTPFile = $TempFTPFolder . '/' . $FileFolder;
if (is_file($FTPFile)) // process files only
{
// Create File object for the live version
$NewFile = new File();
$NewFile->setParentID($LiveFolder->ID);
$NewFile->setName($FileFolder);
// get target name/path
$RenameTarget = $NewFile->getFullPath();
if ($RenameTarget)
{
$moved = false;
try {
$moved = rename($FTPFile, $RenameTarget); // move the FTP file to the live folder
} catch (Exception $e) {}
if ($moved)
{
$NewFile->write();
// create DataObject and add image relation
$HeaderImage = HeaderImage::create();
$HeaderImage->ImageID = $NewFile->ID;
$HeaderImage->write();
}
}
}
}
}
}
}
:
class HeaderAdmin extends ModelAdmin
{
private static $managed_models = array('HeaderImage');
private static $url_segment = 'header-admin';
private static $menu_title = 'Header admin';
public function getEditForm($id = null, $fields = null)
{
$form = parent::getEditForm($id, $fields);
$gridField = $form->Fields()->fieldByName($this->sanitiseClassName('HeaderImage'));
if ($gridField)
{
$gridField->getConfig()->addComponent(new GridFieldBulkImageUpload());
}
return $form;
}
}
2) 더 많은 작업을 필요로 또 다른 해결책,하는 BuildTask
을 만들고 run()
의 논리를 분류입니다
dev/
url을 통해 또는 명령 줄이나 CRON 작업을 통해이 작업을 실행할 수 있습니다. 내가 얼마 전에 해본 적이있는 논리로부터 run()
논리를 적용 했으므로 복사/붙여 넣기만으로 작동한다는 보장은 없습니다.
잘 모르겠지만 GridFieldBulkEditingTools 모듈 (https://github.com/colymba/GridFieldBulkEditingTools)을 사용하여 여러 이미지를 한 번에 업로드 할 수 있습니다. 보세요. – 3dgoo
@ 3dgoo 솔루션이 작동하면 GridFieldBulkEditingTools를 통해 업로드 한 모든 이미지가 DataObject를 만듭니다. 가장 좋은 방법은 ModelAdmin에 연결하는 것입니다. 그러나 SS가 실제로 폴더를 탐색하기를 원한다면, 빌드 작업이 그 일을 할 수도 있고, 자주 수행되어야한다면 CRON이 필요합니다. – colymba
@colymba - 몇 가지 세부 사항으로 대답을 할 수 있다면 저는 이상입니다. 그것을 통해 투표 행복. – BaronGrivet