Plugins
Last updated Dec 6th, 2019 | Page history | Improve this page | Report an issue
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$400 per month—let's make that $500!
Learn moreThis feature is available since v.1.0.0-pl
Events¶
There are still a few events that have been provided, because again, this is small script. But the event spots are really useful:
- OnLoad Just when the script is loaded, this event trigger also calls all the plugins that want to do their dependencies, for instance
- BeforeDirOpen Before the folder is scanned/opened
- AfterDirOpen After the folder is scanned/opened
- BeforeFileDownload Before the file is downloaded
- AfterFileDownload After the file is downloaded
The complete reference actually is written directly in the core/components/filedownload/plugins/filedownloadplugin.events.php file, including their available properties and the expected results.
<?php
$events = array(
'OnLoad' => array(
'properties' => array(),
'returnType' => array(
NULL
)
),
'BeforeDirOpen' => array(
'properties' => array(
'dirPath'
),
'returnType' => array(
NULL,
FALSE,
'continue'
)
),
'AfterDirOpen' => array(
'properties' => array(
'dirPath',
'contents'
),
'returnType' => array(
NULL,
FALSE,
'continue'
)
),
'BeforeFileDownload' => array(
'properties' => array(
'hash',
'ctx',
'filePath',
'count'
),
'returnType' => array(
NULL,
FALSE
)
),
'AfterFileDownload' => array(
'properties' => array(
'hash',
'ctx',
'filePath',
'count'
),
'returnType' => array(
NULL
)
),
);
return $events;
&plugins Property¶
To call the plugins, you need to call it inside the snippet, as a JSON format, eg:
[[!FileDownload?
&getDir=`assets/files`
&plugins=`[
{
"name":"[[++core_path]]components/filedownload/plugins/formit.formsave.plugin.php"
,"event":"OnLoad"
,"strict":true
},{
"name":"[[++core_path]]components/filedownload/plugins/formit.formsave.plugin.php"
,"event":"AfterFileDownload"
},{
"name":"FileDownloadEmailPlugin"
,"event":"AfterFileDownload"
}
]`
&emailProps=`{
"emailTpl":"FileDownloadEmailChunk",
"emailSubject":"New Downloader",
"emailTo":"your@email.com",
"emailCC":"your@other.email.com",
"emailBCC":"your@secret.email.com",
"emailBCCName":"secret"
}`
]]
In this example, I'm using 2 default plugins for examples, FormSave (as file based) and Email (as a snippet), which are both depend on FormIt. These plugins will do:
- OnLoad Checks whether FormSave and Formit are available. If not, halt.
- AfterFileDownload After the file is downloaded, store the information into FormSave, and then send email to the given addresses, with the chunk as provided
The email's properties are using the FormIt's properties, because it IS the FormIt's hook.
The structure of the JSON is:
- name The snippet's name or file path to the plugin file
- event Name of the event you want this to be applied
- strict (optional) Boolean (TRUE|FALSE), sets this particular plugin in a strict mode, which means if the return is FALSE the script should stop to process. This stopping process is only available on several particular events, so please refer to the Event triggers above.
Multiple plugins and events must be called repeatedly, because they have different strictness statuses.
APIs¶
These are the APIs that can be used inside your plugin script:
Instance | Method | Description |
---|---|---|
$modx | all modx's methods | default MODX instance |
$fileDownload | getConfig($key), getConfigs() | gets the scriptProperties, eg the &emailProps above |
$plugin | getProperties() | gets the custom properties of the plugin |
getAllEvents() | gets all event triggers | |
getAppliedEvents() | gets the applied events for the particular plugin in the run-time process |
Now, you can use your imagination to add more features for this snippet.