lekoala / silverstripe-pure-modal
Dead simple modals for SilverStripe (works in the admin too!)
Fund package maintenance!
lekoala
Installs: 6 725
Dependents: 1
Suggesters: 0
Security: 0
Stars: 10
Watchers: 5
Forks: 2
Open Issues: 1
Type:silverstripe-vendormodule
Requires
- php: ^8.1
- silverstripe/framework: ^5
- silverstripe/recipe-plugin: ^2
- silverstripe/vendor-plugin: ^2
Requires (Dev)
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.0
Suggests
- lekoala/silverstripe-cms-actions: For PureModalAction support
README
Intro
Dead simple modals for SilverStripe (works in the admin too!)
Sample usage
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]); }
Modal action
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); }
Compatibility
Tested with ^5
Maintainer
LeKoala - thomas@lekoala.be