Plugin Actions
Most plugins need to be displayed somewhere in the interface. Either through a link somewhere in the navigation, or as a widget on a certain page. This is accomplished by having the plugin register actions.
Registering Actions
Actions allow plugins to make themselves available throughout Blesta. In some areas Blesta will simply render a link to the provided URI. In other area Blesta will attempt to render a widget. Let's look at an example.
<?php
class MyPluginPlugin extends Plugin {
...
public function getActions() {
return array(
array(
'action' => "nav_primary_client", // The action to tie into
'uri' => "plugin/my_plugin/client_main/index/", // The URI to fetch when the action is needed
'name' => "Foo Bar", // The name used by Blesta to display for the action (e.g. The name of the link),
'options' => null, // Options required for this action if any (e.g. array('key' => "value"))
'enabled' => 1 // Whether or not the action should be enabled by default (1 to enable, 0 to disable)
)
);
}
}
?>
The above example would register the link "Foo Bar" in the client interface's primary navigation. The link would point to /plugin/my_plugin/client_main/index/. The URI resolves to the ClientMain controller and index method. Here's what that might look like:
<?php
class ClientMain extends MyPluginController
{
public function index() {
// Set some variables to the view
$this->set("var1", "value1");
// Set variables all at once
$var2 = "hello";
$var3 = "world";
$this->set(compact("var2", "var3"));
// Automatically renders the view in /plugins/my_plugin/views/default/client_main.pdt
}
}
?>
The URI should be only the path (relative to the base URI) that does not include any query or fragments. See https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Examples
As of version 4.2 query parameters are allowed, however widgets that use query parameters cannot be reordered on the page.
All Client controllers must start with client_ in their file name. The same is true for admins as well. All Admin controllers must start with admin_ in their file name. This tells Blesta which portal to render. Generic controllers (those not associated with a particular portal don't need any prefix.
All plugins are accessible via their URI directly (i.e. http://mydomain/installpath/plugin/my_plugin/controller/action/). So you don't have to register an action to make your plugin accessible.
Navigation icons (Blesta 6.0+)
Primary navigation actions (nav_primary_client, nav_primary_staff) accept a top-level icon key whose value is a Bootstrap Icons class (e.g. "bi-headset", "bi-cart"). Paradigm renders the icon next to the link in the admin sidebar. Sub-nav and secondary-nav entries accept the same icon key inside their own array.
public function getActions()
{
return [
[
'action' => 'nav_primary_staff',
'uri' => 'plugin/my_plugin/admin_main/',
'name' => 'MyPluginPlugin.nav_primary_staff.main',
'icon' => 'bi-puzzle',
'options' => [
'sub' => [
[
'uri' => 'plugin/my_plugin/admin_settings/',
'name' => 'MyPluginPlugin.nav_primary_staff.settings',
'icon' => 'bi-gear'
]
]
]
]
];
}
When no icon is set, Paradigm falls back to the plugin's config.json icon field, then to a generic placeholder. See Plugin Configuration for the config.json icon field.
Available Actions
Below is a list of all actions available.
| Action | Type | Description | Options |
|---|---|---|---|
| nav_primary_client | Link | Renders a link in the primary nav of the client interface |
|
| nav_primary_staff | Link | Renders a link in the primary nav of the admin interface |
|
| nav_secondary_staff | Link | Renders a link in the secondary nav of the admin interface under the given parent |
|
| widget_client_home | Widget | Renders a widget on the client home page | N/A |
| widget_staff_home | Widget | Renders a widget on the staff home page | N/A |
| widget_staff_client | Widget | Renders a widget on the staff client profile page | N/A |
| widget_staff_billing | Widget | Renders a widget on the staff billing page | N/A |
| action_staff_client | Link | Renders a link in the "Account Actions" section of the staff client profile page |
|