Dead simple modals for SilverStripe (works in the admin too!)
Simply pass the content to display in the modal. The modal will be accessible through a button in the fieldset
You can also set an iframe to be displayed within the modal in case you want to display a form for example.
$myHtmlContent = "<p>Some content here</p>";
$ImportStuff = new PureModal('ImportStuff', 'Import Stuff', $myHtmlContent);
$fields->addFieldToTab('Root.Stuff', $ImportStuff);
$ImportStuff->setIframeAction('import_stuff');
$ImportStuff->setIframeTop(true);
And here is a sample import_stuff
method
public function import_stuff(HTTPRequest $req)
{
$Stuff = $this->getRequestedRecord();
$fields = new FieldList([
new FileField('File'),
new HiddenField('StuffID', null, $Stuff->ID),
]);
$actions = new FieldList([
new FormAction('doUpload', 'Upload')
]);
$form = new Form(Controller::curr(), 'MyForm', $fields, $actions);
return PureModal::renderDialog($this, ['Form' => $form]);
}
This feature require my cms-actions module.
public function getCMSActions()
{
$actions = parent::getCMSActions();
$doDeny = new PureModalAction("doDeny", "Deny");
$predefinedText = <<<TEXT
Dear Customer,
Your request has been denied.
Best regards,
TEXT;
$iframeFields = new FieldList([
new DropdownField("SelectReason", "Select reason"),
new TextareaField("EnterText", "Enter custom text", $predefinedText),
]);
$doDeny->setFieldList($iframeFields);
$doDeny->setShouldRefresh(true);
$doDeny->setDialogButtonTitle('Deny the request'); // customised modal submit button
$actions->push($doDeny);
}
It creates a button that opens a modal with a set of fields. These fields are submitted alongside the form.
public function doDeny($data)
{
$this->DeniedReason = $data['EnterText'];
$this->Status = "denied";
$this->write();
return 'Denied';
}
You can remove the submit button from the modal itself, for example to make it an information window only. By doing like this:
public function getCMSActions()
{
$actions = parent::getCMSActions();
$doDeny = new PureModalAction("noopInfo", "Information");
// .. add fields
$doDeny->setShowDialogButton(false);
$actions->push($doDeny);
}
Tested with ^5
LeKoala - [email protected]