You can implement your own business logic by writing your own server events and client scripts. Your code is stored in the project so you can migrate your project to other templates or future versions easily. This feature reduces the need of template customization and create maximum possibilities for you to customize and create more advanced features for your projects.
After loading the database, the database objects (tables, views, custom views and reports) will be shown in the left pane (the database pane). Click on any table to go to the Field Setup Page and then select the Code tab (which contains Server Events, Client Scripts and Custom Templates).
Note: For simplicity, we use "table" in the following description to refer to any of database object in the project. A database object can be either a table, a view, a custom view or a report.
The treeview shows the available server events and client scripts that you can add to your project:
Server Events | Server-side PHP procedures |
Global |
The events are applicable to all PHP pages |
Table-Specific |
The set of events are table-specific, the events are applicable to the selected table only |
Other |
The events are applicable to some common pages in the project only |
Client Scripts | Client-side JavaScript |
Global |
The JavaScript are included in all pages with header and footer |
Table-Specific |
The JavaScript are table-specific, they are included to pages for the selected table only |
Other |
The JavaScript are included in some common pages in the project only |
To add your custom scripts to the server events or client scripts, select an item in the treeview, then enter your code in the editor.
The editor supports Find and Replace. Press Ctrl-F to open the Find dialog and press Ctrl-H to open the Replace dialog.
You can click the [Clear] button to discard the existing code and reset template code for the server event or client script.
Code Repository
PHPMaker provides a Code Repository for easy reuse of your code across projects and sharing with other users. Click the [Code Repository] button to open it, categorized reusable code will be displayed:
You can add the code to the editor by clicking the [Add to Editor] button. The reusable code is stored in XML files which reside in s subfolder name "code" under the installation folder. The format of the XML files is simple, there are 3 parts:
There are a few example files in the "code" folder, you can copy and modify for your own code and then save them under the "code" folder for reuse.
Server Events
In general, server events are fired in the following order: (not all pages are the same)
Available server events are:
Global -> All Pages | |||||||||||||||||||||||||||||
Page_Head |
The code you entered in this event will be placed in the header.php before closing the <head> section. You can use this event to can add your code in head section. Note: This is a global function. For example, PHPMaker does NOT support jQuery UI, AdminLTE plugins, or other jQuery plugins, but you can include them yourself. Then you can use the widgets using Startup Script (see below). Example 1 Include jQuery UI by PHP (using CDN): AddStylesheet("//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"); // Add CSS stylesheet Example 2 Alternatively, you can include by HTML: <link rel="stylesheet" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"> Example 3 You can even use both PHP and HTML, but in such case you MUST use <?php ... ?>, e.g. <?php AddStylesheet("//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"); ?> |
||||||||||||||||||||||||||||
Page_Foot |
The code you entered in this event will be placed in the footer.php after the <footer> section. You can use this event to can add your code for the website. Note: This is a global function. Example 1 - Add a dropdown menu on the right navbar by JsRender template <script type="text/html" class="ew-js-template" data-name="myDropdown" data-method="prependTo" data-target="#ew-navbar-right" data-seq="10"> Example 2 - Add a control sidebar on the right side of the site. Note Control sidebar requires default AdminLTE layout and therefore does NOT work properly if the Reset Layout Height setting is disabled (see Advanced Settings).
<aside class="control-sidebar control-sidebar-light"> <script type="text/html" class="ew-js-template" data-name="myControlSidebar" data-method="prependTo" data-target="#ew-navbar-right" data-seq="10"> The generated script can apply JsRender templates automatically if the template is in the format of <script type="text/html" class="ew-js-template">...</script>. Using these templates you can change virtually everywhere of the whole layout. Note: The CSS class name "ew-js-template" is mandatory and is case-sensitive. The following data-* attributes are supported:
Note An empty template can be found in Code Repository. |
||||||||||||||||||||||||||||
Database_Connecting |
This event will be called by all PHP pages before connecting to the database. Note: This is a global function. If general, the argument is an array with the following keys: host, port, user, pass, db. If Access, the key is connectionstring. You can use this event to change the connection string (e.g. changing connection info with server, or even connect to other databases). Example 1 // MySQL/PostgreSQL Example 2 It is possible to use single login and common Dynamic User Levels for multiple projects provided that ALL projects use the same project name and same Advanced Security tables (i.e. User Table, User Level Table and User Level Permission Table). If all projects uses the same database and same Advanced Security tables, then the latter condition is auto fulfilled. However, if the projects use different databases, you can use this event to change the connection info so the user can get the Dynamic User Levels from the common Advanced Security tables correctly during login, e.g. // MySQL/PostgreSQL |
||||||||||||||||||||||||||||
Database_Connected |
This event will be fired by all PHP pages after connecting to the database. Note: This is a global function. The argument is the connection object, you can use it to execute your own statements. Example Call a stored procedure after connection. function Database_Connected(&$conn) { |
||||||||||||||||||||||||||||
Language_Load |
This event will be fired when the language file is loaded. You can use it to change the language phrases if necessary. Note: This event is a language class member. Example 1 function Language_Load() { Example 2 Change the HTML markup of the language selector. function Language_Load() { |
||||||||||||||||||||||||||||
Page_Loading |
This event will be called by all PHP pages at the beginning of the page. If the pages involves database connection, it will be called after connecting to the database and before the Page_Load event. Note: This is a global function, NOT page class member. |
||||||||||||||||||||||||||||
Page_Rendering |
This event will be called by all PHP pages before outputting HTML for the page. Note: This is a global function, NOT page class member. |
||||||||||||||||||||||||||||
Page_Unloaded |
This event will be called by all PHP pages at the end of the page. If the pages involves database connection, it will be called before closing database connection and after the Page_Unload event. Note: This is a global function, NOT page class member. | ||||||||||||||||||||||||||||
Global Code |
Code to be included in all PHP pages. This may contain your constants, variables, functions and classes. Example 1 Use another class for Export to Excel (not PhpSpreadsheet) class MyExportExcel extends ExportExcel { // Override ExportTableheader() } $EXPORT['excel'] = 'MyExportExcel'; // Replace the default ExportExcel class by your own class Example 2 Add AWS SDK for PHP to composer.json (see Using User Code) and register Amazon S3 Stream Wrapper
putenv("AWS_ACCESS_KEY_ID=xxx"); // Change to your own access key ID |
||||||||||||||||||||||||||||
User_CustomValidate |
For use with security. (See Security Settings) This event is fired before default user validation. You can use this event to validate the user yourself. The arguments are the user name and password the user entered. Return TRUE if the username and password pass your custom validation. Note: This event is a security class member. Notes
Example Remove the domain name to match the user name in user table (for User ID/Level Security, if enabled) after Windows authentication, if the user table stores the user name without domain name. function User_CustomValidate(&$usr, &$pwd) { |
||||||||||||||||||||||||||||
Ldap_Validated |
For use with "LDAP" authentication (see Advanced Settings) only. This event is fired after User_CustomValidate (see above). When this event is fired, the user bind is already done successfully, but you can use this event to do further validation or to get some more information of the user from the LDAP server. Return TRUE if the user your custom validation. Note: This event is a Ldap class member. Example Check groups of Active Directory user. function Ldap_Validated(&$usr, &$pwd) { |
||||||||||||||||||||||||||||
User_Validated |
For use with security. (See Security Settings) This event is fired after validating the user with the user table. Note: This event is a security class member. Notes
Example 1 Add additional current user info to the global user profile object function User_Validated(&$rs) { You can get it later elsewhere by Profile()->Get("Country"). Example 2 Check if an user password has expired by custom code with Enable password expiry (see Security Settings) enabled function User_Validated(&$rs) { |
||||||||||||||||||||||||||||
UserLevel_Loaded |
For use with User Level security. (See Security Settings) This event is fired after successful user login and after the User Level settings are loaded. It is possible to do actions such as changing or adding User Level permissions. Note: This event is a security class member. Example 1 Change the permissions of an User Level for a table // Note: This event is a Security class member, so you can refer to other members of the Security class directly Example 2 Grant all permissions to an User Level for a table // Note: This event is a Security class member, so you can refer to other members of the Security class directly |
||||||||||||||||||||||||||||
MenuItem_Adding |
This event is fired for custom menu items before it is added to the menu. The menu item info is passed to the event as an instance of the cMenuItem object (see below). Return FALSE if you don't want to show the menu item. If you return TRUE, the menu item will be added to the menu, but it does not mean that it will be always displayed. A menu item will be displayed only if its Allowed property is TRUE. When the menu item is passed to this event, the Allowed property is set based on the User Level Security of the project, you can however change it by setting $Item->Allowed as TRUE or FALSE as needed. Note: This is a global function. Example 1 Only show a menu item after the user has logged in function MenuItem_Adding(&$item) { Example 2 Set the menu item properties function MenuItem_Adding(&$item) { Note If your project is multi-language, the $item->Text will be different for each language, you may check $item->Name or $item->Url instead. Check the generated ewmenu.php to see the item names or URLs. |
||||||||||||||||||||||||||||
Menu_Rendering |
This event is fired before the menu is rendered. You can manipulate the menu items in this event. The argument is the menu object. (See Menu Object below.) Note: This is a global function. Example 1 Add an additional menu item to the menu for logged in users only. function Menu_Rendering($menu) { Example 2 Remove all the default menu items and use your own menu items. function Menu_Rendering(&$menu) { Example 3 Change options of sidebar menu (vertical menu). function Menu_Rendering(&$menu) { |
||||||||||||||||||||||||||||
Menu_Rendered |
This event is fired after the menu is rendered. You may want to clean up in this event if you have created something in the Menu_Rendering event. The argument is the menu object. (See Menu Object below.) Note: This is a global function. |
||||||||||||||||||||||||||||
TablePermission_Loading |
For use with User Level security. (See Security Settings) This event is fired before the user permission for the table of the current page is loaded. It is possible to do actions such as changing or adding more User Level permissions to the current user. Note: This event is a security class member. Note This is an event fired for the current table only. If you change the permissions of the other tables in this event, there will be no effect. Use the UserLevel_Loaded event if you need to change permissions of other tables.
Example Grant another User Level to the user and let the user have permissions of more than one User Level for the current table. // Note: This event is a Security class member, so you can refer to other members of the Security class directlyfunction TablePermission_Loading() { if (CurrentUserName() == "nancy") $this->AddUserLevel("Manager"); } |
||||||||||||||||||||||||||||
TablePermission_Loaded |
For use with User Level security. (See Security Settings) This event is fired after the user permission for the table of the current page is loaded. It is possible to to change the permission by using the setCanXXX methods of the Security class. Note: This event is a security class member. Note This is an event fired for the current table only. If you change the permissions of the other tables in this event, there will be no effect. Use the UserLevel_Loaded event if you need to change permissions of other tables.
Example Grant more permissions to the user and let the user have more permissions than his/her User Level allows for the current table. // Note: This event is a Security class member, so you can refer to other members of the Security class directly |
||||||||||||||||||||||||||||
UserID_Loading |
For use with User ID security. (See Security Settings) This event is fired after successful user login and before loading the User ID and its child User IDs of the current user. These User IDs determine which records the current user can access. It is possible to do actions such as changing the User ID of the current user so the user can access records that he/she can access by its original User ID. Note: This event is a security class member. Example Change the user's User ID to his parent user's user ID and let the user access more records (accessible by the parent user). // Note: This event is a Security class member, so you can refer to other members of the Security class directly |
||||||||||||||||||||||||||||
UserID_Loaded |
For use with User ID security. (See Security Settings) This event is fired after loading the User ID and its child User IDs of the current user. These User IDs determine which records the current user can access. It is possible to do actions such as adding or deleting the loaded User IDs for the current user so the user can access more or less records that he/she can access by its originally loaded User IDs. Note: This event is a security class member. Example Add more User IDs to the user and let the user access more records // Note: This event is a Security class member, so you can refer to other members of the Security class directly |
||||||||||||||||||||||||||||
User_PasswordExpired |
This event will be called if the user password is already expired. User information is passed to the event as argument, you can get user information by $rs["<fieldname>"] where <fieldname> is a field name of the user table. Note: This event is a security class member. | ||||||||||||||||||||||||||||
AuditTrail_Inserting |
This event will be called before an audit trail record is written. The audit trail information is passed to the event as argument, you can get the information by $rsnew["<fieldname>"] where <fieldname> is the audit trail field name. Return False to cancel the insert. Note: This is a global function. | ||||||||||||||||||||||||||||
PersonalData_Downloading |
This event will be called when Use Personal Data Page is enabled and before the user downloads his personal data. The personal data is passed to the event as an associative array, you can get the information by $row["<fieldname>"] where <fieldname> is an user table field name. You can also add additional data to the array so it will also be downloaded by the user. Note: This is a global function. | ||||||||||||||||||||||||||||
PersonalData_Deleted |
This event will be called when Use Personal Data Page is enabled and before the user deletes his personal data. The personal data is passed to the event as an associative array, you can get the information by $row["<fieldname>"] where <fieldname> is an user table field name. Note: This is a global function. | ||||||||||||||||||||||||||||
Table-Specific -> Common (Note: These events are members of the page class) | |||||||||||||||||||||||||||||
Recordset_Selecting |
This event will be called before selecting records. The argument of the event is the filter (part of the WHERE clause of the SQL) for selecting records, you can customize the filter to change the records to be selected. Example Add your own filter. Note that the $filter may have value, if you want to add some additional filter, append your filter to it, not replace it. function Recordset_Selecting(&$filter) { |
||||||||||||||||||||||||||||
Recordset_Selected |
This event will be called after selecting records. Note: The argument is the recordset object (not array). | ||||||||||||||||||||||||||||
Recordset_SearchValidated |
This event will be called after the Form_CustomValidate event and the search criteria is assigned to the table/field objects. You can modify the search criteria in this event. This event is a member of the table class. There is no arguments for this event. To change the Quick Search criteria, change the BasicSearchKeyword and BasicSearchType property of the table object. To change the Advanced Search criteria, change the AdvancedSearch property (which is an object of the AdvancedSearch class) of the field object. Example function Recordset_SearchValidated() { |
||||||||||||||||||||||||||||
Recordset_Searching |
This event will be called before the search criteria is saved for the session. The argument of the event is the part of WHERE clause built from the Quick/Extended/Advanced search criteria. You can modify the WHERE clause in this event. Example Search a MySQL DATE field for a selected date or within 3 days after the selected date. function Recordset_Searching(&$filter) { |
||||||||||||||||||||||||||||
Row_Deleting |
This event will be called before deleting a record. The argument of the event is the record to be deleted as an array. | ||||||||||||||||||||||||||||
Row_Deleted |
This event will be called after deleting a record. The argument of the event is the record deleted as an array. Example Delete detail records from the detail table after the master record is deleted. function Row_Deleted(&$rs) { |
||||||||||||||||||||||||||||
Row_Inserting |
This event will be called before inserting a record. The arguments of the event are the arrays of the old (if copying record) and new record to be inserted. You can change the values in the $rsnew. Example Make sure a field value is valid. function Row_Inserting(&$rsold, &$rsnew) { |
||||||||||||||||||||||||||||
Row_Inserted |
This event will be called after inserting a record. The arguments of the event are the arrays of the old (if copying record) and new record just inserted. Example Get the ID (autoincrement field) of the just inserted record function Row_Inserted(&$rsold, &$rsnew) { |
||||||||||||||||||||||||||||
Row_Rendering |
This event will be called before rendering (applying the View/Edit Tag settings) a record. | ||||||||||||||||||||||||||||
Row_Rendered |
This event will be called after rendering a record. This is an extremely useful event for conditional formatting, you can do a lot of things with this event, such as changing font color, font styles, row background color, cell background color, etc. by changing the table or field class properties in the event according to field values. Note The table class has a RowAttrs property which is an associative array of HTML attributes for the table row. The field class has CellAttrs, ViewAttrs and EditAttrs for the table cell, View Tag and Edit Tag of the field respectively. The keys of these arrays must be valid HTML attributes for the HTML tag, always use lowercase for the keys. The attribute values will be outputted as double quoted attributes, so if you have double quotes in your values, try to use single quotes if possible, or use """.
To view the properties of the field class for development or debugging, you can use the PHP's var_dump function in the server event, e.g. var_dump($this->RowAttrs); Example Change CSS styles of row and cells: function Row_Rendered() { // Change text style by Bootstrap classes |
||||||||||||||||||||||||||||
Row_Selecting |
This event will be called before selecting a record. The argument of the event is the filter (part of the WHERE clause of the SQL) for selecting the record, you can customize the filter to change the record to be selected. |
||||||||||||||||||||||||||||
Row_Selected |
This event will be called after selecting a record. The argument is the record selected as an array. The event is still fired when inserting a new record, but in such case there is no "selected" row and the argument is an array with all field values as NULL. Example Disable a field in Edit page function Row_Selected(&$rs) { |
||||||||||||||||||||||||||||
Row_UpdateConflict |
This event will be called if conflicts is found before updating a record (if Check Conflicts is enabled, see Table Setup). The arguments of the event are the old record (as array) and new record (as array) to be updated. You can use this event to resolve the conflicts according to your own criteria. If you want to ignore conflicts or you have resolved the conflicts in the event (by setting new values to the argument rsnew) and want to continue update, return FALSE. Otherwise, return TRUE. By default the event returns TRUE. |
||||||||||||||||||||||||||||
Row_Updating |
This event will be called before updating a record. The arguments of the event are the arrays of the old and new record to be updated. Example Make sure a field value is not changed function Row_Updating(&$rsold, &$rsnew) { |
||||||||||||||||||||||||||||
Row_Updated |
This event will be called after updating a record. The arguments of the event are the arrays of the old and new record updated. Example After updating a field in detail table, update a field in the master table. function Row_Updated($rsold, &$rsnew) { |
||||||||||||||||||||||||||||
Grid_Inserting |
For use with Grid-Add for a table and Master/Detail-Add for a detail table, this event will be called before inserting records. This event has no arguments. You can use this event to check all records to be inserted. If you want to cancel insert, return FALSE. Otherwise, return TRUE. By default the event returns TRUE.
Note If you only need to check individual record, there is no need to use this event, simply use Row_Inserting (see above) which will be called for each row in the grid.
Example Check all records before inserting. Note that this event is called before Row_Inserting, the field values are not loaded yet, but you can load them yourself. function Grid_Inserting() { Note Data returned from GetGridFormValues() is read only, do NOT try to change the values. To change the values, use Row_Inserting (see above) which will be called for each row in the grid.
|
||||||||||||||||||||||||||||
Grid_Inserted |
For use with Grid-Add for a table and Master/Detail-Add for a detail table, this event will be called after inserting all records. The argument of the event ($rsnew) is array of records inserted (retrieved from database). For example, you can use this event to update a field in the master table (similar to the example for Row_Updated above) after Master/Detail-Add. |
||||||||||||||||||||||||||||
Grid_Updating |
For use with Grid-Edit for a table and Master/Detail-Edit for a detail table, this event will be called before updating records. The argument of the event ($rsold) is array of records to be updated (retrieved from database). You can use this event to check all records to be updated. If you want to cancel update, return FALSE. Otherwise, return TRUE. By default the event returns TRUE.
Note If you only need to check individual record, there is no need to use this event, simply use Row_Updating (see above) which will be called for each row in the grid.
Example Check all records before updating. Note that this event is called before Row_Updating, the field values are not loaded yet, but you can load them yourself. function Grid_Updating($rsold) { Note Data returned from GetGridFormValues() is read only, do NOT try to change the values. To change the values, use Row_Updating (see above) which will be called for each row in the grid.
|
||||||||||||||||||||||||||||
Grid_Updated |
For use with Grid-Edit for a table and Master/Detail-Edit for a detail table, this event will be called after updating all records. The argument of the event ($rsold and $rsnew) are array of records before and after update (retrieved from database). For example, you can use this event to update a field in the master table (similar to the example for Row_Updated above) after Master/Detail-Edit. |
||||||||||||||||||||||||||||
Email_Sending
|
This event is fired before the email notification is sent. You can customize the email content using this event. Email_Sending event has the following parameters: $email - the email object instance which contain all the information about the email to be sent. It is an instance of the Email class (see below). If Add, the new record in the format of array can be access by $args["rsnew"]. You can get a field value by, e.g. $rsnew = $args["rsnew"]; or $myValue = $args["rsnew"]["MyField"]; Return FALSE in the event if you want to cancel the email sending. If Grid-Add/Edit or Update page, there are more than one records, the arguments are array of array. Example Assume there is an email field in the record, and you want to change the recipient to the value of that field. function Email_Sending($email, &$args) { |
||||||||||||||||||||||||||||
Lookup_Selecting | This event is fired before building the SQL for selecting records from the lookup table. You can use this event to change the filters. In the event, the field name, Lookup object and filter for the lookup can be viewed by: var_dump($fld->Name, $fld->Lookup, $filter); $fld->Lookup is an object. To change the lookup SQL, you can modify the following properties of the Lookup object:
Example 1 Add additional filter to the lookup table filter function Lookup_Selecting($fld, &$filter) { Example 2 Change the default filter operator of a filter field function Lookup_Selecting($fld, &$filter) { Example 3 Modify lookup SQL SELECT / ORDER BY function Lookup_Selecting($fld, &$filter) { Example 4 Use static array function Lookup_Selecting($fld, &$filter) { Example 5 Use data from ExecuteRows function Lookup_Selecting($fld, &$filter) { |
||||||||||||||||||||||||||||
UserID_Filtering |
For use with User ID security. (See Security Settings) This event is fired before adding the User ID filter to the WHERE clause of the table. It is possible to modify, replace or add filter so the user can access more or less records that he/she can access by its originally loaded User IDs. Example Assume you have 2 User ID fields in the current table and in the user table, and you want to filter by both User ID fields. function UserID_Filtering(&$filter) { |
||||||||||||||||||||||||||||
Table-Specific -> Add/Copy page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. |
||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. The argument is the URL to be redirected to. By default after inserting a record user is redirected back to the List page. You can change that by using Return Page (see Table Setup). However, If you want to change by code, you can also use this event. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. The first argument $msg is the message to be shown, the second argument $type is the type of the message, possible values of type are: "" (empty string), "success", "failure", and "warning". Example Replace an error message by custom message function Message_Showing(&$msg, $type) { |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. In general, the form data can be accessed by $this-><Field>->FormValue (e.g. $this->HP->FormValue). Alternatively, you can get all the form values in an array first, e.g. $rs = $this->GetFieldValues("FormValue"); An argument $customError is passed to the event, you can add your error message and return FALSE if the form values do not pass your validation. Example Make sure an integer field value meet a certain requirement function Form_CustomValidate(&$customError) { Note If you use this server event, make sure you have enabled server-side validation, see Validation in PHP Settings. |
||||||||||||||||||||||||||||
Table-Specific -> Delete Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default after deleting record(s) user is redirected back to the List page. You can change that using this event. |
||||||||||||||||||||||||||||
Table-Specific -> Edit Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument.
|
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default after updating a record user is redirected back to the List page. You can change that by using Return Page (see Table Setup). However, If you want to change by code, you can use this event. |
||||||||||||||||||||||||||||
Table-Specific -> List Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. Note The export links are stored as a ListOptions object (also see ListOptions_Load, ListOptions_Rendering and ListOptions_Rendered event below), you can manipulate the links in the same way. The defaut names of the options are:
Note that the names are in lowercase and are case-sensitive. Example 1 Hide the export to PDF link in List page: function Page_Load() { Example 2 Add a custom link at the end of the export links function Page_Load() { Example 3 Add a custom action to submit selected records by HTTP POST function Page_Load() { Adding a custom action by its name and caption is a actually a short form of $this->CustomActions["star"] = new ListAction("star", "Add Star"); and is supported for backward compatibility only. Use the ListAction class so you have more options for the custom action. The constructor of ListAction class is function __construct($action, $caption, $allow = TRUE, $method = ACTION_POSTBACK, $select = ACTION_MULTIPLE, $confirmMsg = "", $icon = "fa fa-star ew-icon", $success = "") $method is either ACTION_POSTBACK (submit by HTTP POST) or ACTION_AJAX (submit by Ajax). $select is either ACTION_MULTIPLE (submit the selected records) or ACTION_SINGLE (submit the current record only). $success is the name of JavaScript callback function, if any. You can place your callback function in client side Global Code section (see below). Note To process the action, you also need to write a handler with Row_CustomAction server event (see below).
Example 4 Add a custom action to submit selected records by Ajax function Page_Load() { Note To process the action, you also need to write a handler with Row_CustomAction server event (see below).
Example 5 When Custom Templates (see Custom Templates) is used, they will be used for export to Word/Excel/PDF/Email (not including PhpSpreadsheet and PHPWord) by default. You can however disable it. The corresponding (boolean) page properties are: ExportExcelCustom, ExportWordCustom, ExportPdfCustom and ExportEmailCustom. function Page_Load() { |
||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content before the main table. Example Hide a field from the main table function Page_DataRendering() { |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content after the main table. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. See description of Form_CustomValidate for Add/Copy page above. |
||||||||||||||||||||||||||||
ListOptions_Load | This event will be called before the main table is rendered. Use this event to modify the non data columns of the main table (i.e. the links and the checkbox for each record). You can modify these columns or add your own columns using this event. You can get a column by name using $this->ListOptions->Item["name"]. Note The following predefined names are reserved, do not use them for your own columns. These names are case-sensitive and are in lowercase except for the detail table names.
Example 1 Add a new column. function ListOptions_Load() { Note If you have enabled Use buttons as links and/or Use button dropdown for links (see PHP Settings), note that the feature will hide the list options and try to move hyperlinks to the button group or button dropdown. If your Body property (see below) is not hyperlink(s), it cannot be shown in the button group or button dropdown, you should remove your list option from the button group or button dropdown by adding, e.g. $item->ShowInButtonGroup = FALSE; and/or $item->ShowInDropDown = FALSE; Example 2 Hide the "view" column. function ListOptions_Load() { Example 3 Hide a detail table named "MyDetailTable" in Preview Row or Overlay (requires Detail Preview extension which is for registered users only) function ListOptions_Load() { |
||||||||||||||||||||||||||||
ListOptions_Rendering | This event will be called before list options are rendered. To access field object of the current row, you can use $this-><Field>-><Property> (e.g. $this->HP->CurrentValue). Note Do NOT try to show/hide a column dynamically by setting the Visible property of the list option in this event. If the column is visible in one row but invisible in another, the table will be malformed.
Example 1 Disable Master/Detail-Add/Edit/View, e.g. if the detail table name is "orderdetails" function ListOptions_Rendering() { Example 2 Append a CSS class to all cells (including header/footer cell) of a field in the List page function ListOptions_Rendering() { Notes
|
||||||||||||||||||||||||||||
ListOptions_Rendered | This event will be called after list options are rendered. Use this event to modify content of the non data columns for the record. To access field object of the current row, you can use $this-><Field>-><Property> (e.g. $this->HP->CurrentValue). Note Do NOT try to show/hide a column dynamically by setting the Visible property of the list option in this event. If the column is visible in one row but invisible in another, the table will be malformed. If you want to hide the content dynamically, you can set the Body property as empty string.
Example 1 Set the content of the new column dynamically based on a field value. function ListOptions_Rendered() { Example 2 Add a link to perform a custom action for the row by Ajax. function ListOptions_Rendered() { Note To process the action, you also need to write a handler with Row_CustomAction server event (see below).
|
||||||||||||||||||||||||||||
Row_CustomAction | If you have used Page_Load server event (see above) to add your custom action to the List page, the page will show the checkbox column for users to select records (similar to Multi-Update and Mulit-Delete). When user clicks the custom action link or button, the page will post back to itself and this event will be fired (after Page_Load and before Page_Render) for each selected row to process the custom action. Return TRUE to proceed to next record or return FALSE to abort custom action. Example Update the status of the selected records, assuming the table has a field named "Starred" for storing the status. function Row_CustomAction($action, $row) { Note If you cancel the action by returning FALSE in the event, you can use the setFailureMessage() method to set your message. However, note that if the event returns FALSE, subsequent rows will not be processed and the database changes for previous rows will be rolled back (if your database supports transaction). So if you just want to cancel action for a row without affecting other rows, the event should still return TRUE and use setSuccessMessage() method to set your message.
|
||||||||||||||||||||||||||||
Page_Exporting | This event will be called before the page is exported. You can use this event to add your additional code to the beginning of file to be exported. Return FALSE to skip default export and use Row_Export event (see below). Return TRUE to use default export and skip Row_Export event. Check $this->Export for the export type (e.g. "excel", "word"). The content of the export document is $this->ExportDoc->Text (except PhpSpreadsheet/PHPWord). Note If Custom Templates is used (see Custom Templates), this event may be overridden. You can disable using Custom Templates for report, see example for Page_Load above. Example Add a title to the export document and use custom export if export to Excel (not PhpSpreadsheet) function Page_Exporting() { |
||||||||||||||||||||||||||||
Row_Export | If you return FALSE in Page_Exporting event (see above), this event will be called when a row is exported for you to export in your own code. The argument ($rs) is an array of the record to be exported. The values in $rs are unformatted database values. If you want to export formatted values, use $this->MyField->ViewValue. Notes
Example Export a record with custom code if export to Excel (not PhpSpreadsheet) function Row_Export($rs) { |
||||||||||||||||||||||||||||
Page_Exported | This event will be called after the page is exported. You can use this event to add your additional code to the end of the file to be exported. Note If Custom Templates is used (see Custom Templates), this event may be overridden. You can disable using Custom Templates for report, see example for Page_Load above. Example Add a footer to the export document if export to Excel (not PhpSpreadsheet) function Page_Exported() { |
||||||||||||||||||||||||||||
Page_Importing |
This server event allows you to modify the Import options before the import process begins. The first argument is the data reader and the second argument is an array containing the import options. You can also return FALSE to skip the import. The options (accessed by $options["<value>"]) you can change during Page_Importing are: Example 1 Import selected records only $options["offset"] = 10; // Skip the first 10th records Example 2 The spreadsheet contains pure data only. Supply the header manually. $options["headers"] = ["CategoryName", "Description"]; Example 3 Change input encoding, delimiter and enclosure for CSV file $options["inputEncoding"] = "CP1252"; // Use CP1252 for input encoding $options["delimiter"] = ";"; // Semi Colon for delimiter $options["enclosure"] = "'"; // Single Quote for enclosure |
||||||||||||||||||||||||||||
Row_Import |
This server event is executed before a record is imported. The first argument is an array containing the data to be imported and the second argument is an integer containing the current import record count. You can return FALSE to skip the import. Example 1 Modify data before import $row["Trademark"] = ExecuteScalar("SELECT ID FROM trademarks WHERE Trademark ='" . AdjustSql($row["Trademark"]) . "'"); // Get Trademark ID from trademarks table Example 2 Validate input data if (intval($row["Quantity"]) > 100) // Quantity must be <= 100 return FALSE; // Skip import |
||||||||||||||||||||||||||||
Page_Imported |
This server event is executed after import is completed. The first argument is the data reader and the second argument is an array containing the import results. The data available in the results array are (accessed by $results["<value>"]): Example Write audit trail for import $msg = "imported " . $results["totalCount"] . " records (successful: " . $results["successCount"] . " / failed: " . $results["failCount"] . ") from " . $results["file"]; // Set up import message WriteAuditTrail("log", DbCurrentDateTime(), ScriptName(), CurrentUserID(), $msg, CurrentUserIP(), "", "", "", ""); // Write audit trail |
||||||||||||||||||||||||||||
Table-Specific -> Multi-Update Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default after updating records user is redirected back to the List page. You can change that by using this event. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. See description of Form_CustomValidate for Add/Copy page above. |
||||||||||||||||||||||||||||
Table-Specific -> Report Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Table-Specific -> Search Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the List page after the search criteria is processed. You can change that by using this event. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. See description of Form_CustomValidate for Add/Copy page above. |
||||||||||||||||||||||||||||
Table-Specific -> View Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Page_Exporting | This event will be called before the page is exported. You can use this event to add your additional code to the beginning of file to be exported. Return FALSE to skip default export and use Row_Export event (see below). Return TRUE to use default export and skip Row_Export event. Check $this->Export for the export type (e.g. "excel", "word"). The content of the export document is $this->ExportDoc->Text. Note If Custom Templates is used (see Custom Templates), this event may be overridden. You can disable using Custom Templates for report, see example for Page_Load above. |
||||||||||||||||||||||||||||
Row_Export | If you return FALSE in Page_Exporting event (see above), this event will be called when a row is exported for you to export in your own code. The argument ($rs) is an array of the record to be exported. The values are unformatted database values. If you want to export formatted values, use $this->MyField->ViewValue. Note If Custom Templates is used (see Custom Templates), this event may be overridden. You can disable using Custom Templates for report, see example for Page_Load above. |
||||||||||||||||||||||||||||
Page_Exported | This event will be called after the page is exported. You can use this event to add your additional code to the end of the file to be exported. Note If Custom Templates is used (see Custom Templates), this event may be overridden. You can disable using Custom Templates for report, see example for Page_Load above. |
||||||||||||||||||||||||||||
Table-Specific -> Preview Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called after connecting to the database. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called before closing database connection. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called before the page content is outputted. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called after the page content is outputted. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Other -> Default Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called at the beginning of the page. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called at the end of the page. | ||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the default page (e.g. index.php) after successful login. You can change that by using this event. |
||||||||||||||||||||||||||||
Other -> Login Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called at the beginning of the page. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called at the end of the page. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the default page (e.g. index.php) after successful login. You can change that by using this event. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
User_LoggingIn |
This event will be called before validating the username and password. | ||||||||||||||||||||||||||||
User_LoggedIn |
This event will be called after the user login. | ||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. Inspect the HTML source of the page in your browser to view the form element names. An argument $customError is passed to the event, you can add your error message and return FALSE if the form values do not pass your validation. |
||||||||||||||||||||||||||||
User_LoginError |
This event will be called if the user fail to login. | ||||||||||||||||||||||||||||
Other -> Logout Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called at the beginning of the page. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called at the end of the page. | ||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the default page (e.g. index.php) after successful login. You can change that by using this event. |
||||||||||||||||||||||||||||
User_LoggingOut |
This event will be called before user logout. |
||||||||||||||||||||||||||||
User_LoggedOut |
This event will be called after user logout. |
||||||||||||||||||||||||||||
Other -> Registration Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called at the beginning of the page. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called at the end of the page. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the default page (e.g. index.php) after successful login. You can change that by using this event. |
||||||||||||||||||||||||||||
Email_Sending |
This event is fired before the email notification is sent. You can customize the email content using this event. Email_Sending event has the following parameters: $email - the email object instance which contain all the information about the email to be sent. It is an instance of the Email class (see below). Return FALSE in the event if you want to cancel the email sending. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. See description of Form_CustomValidate for Add/Copy page above. |
||||||||||||||||||||||||||||
User_Registered |
This event is fired after successful registration of a new user. Argument is a recordset of the new record in the user table. |
||||||||||||||||||||||||||||
User_Activated |
This event is fired after activating a new user (if user activation is required, see Security Settings). Argument is a recordset of the new record in the user table. |
||||||||||||||||||||||||||||
Other -> Change Password Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called at the beginning of the page. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called at the end of the page. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the default page (e.g. index.php) after successful login. You can change that by using this event. |
||||||||||||||||||||||||||||
Email_Sending |
This event is fired before the email notification is sent. You can customize the email content using this event. Email_Sending event has the following parameters: $email - the email object instance which contain all the information about the email to be sent. It is an instance of the Email class (see below). Return FALSE in the event if you want to cancel the email sending. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. Inspect the HTML source of the page in your browser to view the form element names. An argument $customError is passed to the event, you can add your error message and return FALSE if the form values do not pass your validation. |
||||||||||||||||||||||||||||
Other -> Password Recovery Page | |||||||||||||||||||||||||||||
Page_Load |
This event will be called at the beginning of the page. | ||||||||||||||||||||||||||||
Page_Render |
This event will be called before outputting HTML for the page. You can use this event to make some last minute changes to the page before it is outputted. | ||||||||||||||||||||||||||||
Page_Unload |
This event will be called at the end of the page. | ||||||||||||||||||||||||||||
Page_DataRendering |
This event will be called after the header.php is included. You can use this event to add content at the top of page content. |
||||||||||||||||||||||||||||
Page_DataRendered |
This event will be called before the footer.php is included. You can use this event to add content at the bottom of page content. |
||||||||||||||||||||||||||||
Page_Redirecting |
This event will be called before redirecting to other page. Event argument is the URL to be redirected to. By default user is redirected to the login page after successful login. You can change that by using this event. |
||||||||||||||||||||||||||||
Email_Sending |
This event is fired before the email notification is sent. You can customize the email content using this event. Email_Sending event has the following parameters: $email - the email object instance which contain all the information about the email to be sent. It is an instance of the Email class (see below). Return FALSE in the event if you want to cancel the email sending. |
||||||||||||||||||||||||||||
Message_Showing | This event is fired before the message stored in the session variable is shown. You can use this event to change the message which is passed to the event as argument. |
||||||||||||||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. Inspect the HTML source of the page in your browser to view the form element names. An argument $customError is passed to the event, you can add your error message and return FALSE if the form values do not pass your validation. |
||||||||||||||||||||||||||||
User_RecoverPassword |
This event is fired after the password is recovered. Argument is a recordset of the user's record in the user table. |
Client Scripts
In general, each page has two blocks of JavaScript:
Client Script - the first block of JavaScript to be included at the beginning of the page, you can put your JavaScript variables and functions there. The View Tag (for display) and Edit Tag (for input) of the fields supports Custom Attributes (See Field Setup) so you can add your own attributes to work with your own JavaScript included here.
Startup Script - the second block of JavaScript to be included at the end of the page, you can put code here to "start up" your JavaScript.
Global -> Pages with header/footer | |||||||||||||||||
Client Script |
The script will be placed in the header and therefore included in all pages with header. Note This event is NOT related to the No header/footer setting in the Generate form (see Generate Settings). Even if No header/footer is enabled, this event will also be fired.
Example Set div.content-wrapper and footer min-width if advanced setting "Reset layout height" (see Advanced Settings) is disabled $(document).on("overflow", function(e, $form) { // "overflow" event (fired if content wider than screen) |
||||||||||||||||
Startup Script |
The script will be placed in the footer and therefore included in all pages with footer. This is a very useful event which is fired for all pages with footer, you can almost do everything by changing the document DOM. Note This event is NOT related to the No header/footer setting in the Generate form (see Generate Settings). Even if No header/footer is enabled, this event will also be fired.
|
||||||||||||||||
Global Code |
JavaScript code to be included in all pages with header. This may contain your global constants, variables and functions. | ||||||||||||||||
Table-Specific -> Add/Copy page | |||||||||||||||||
Client Script |
The script will be placed after the header. This may contain your JavaScript variables and functions for the page. You can also use this event to subscribe JavaScript events. Example 1 Set Multi-Page (see Table Setup) properties currentForm.multiPage.set({ Note The argument of the Set() method is a JavaScript object, if you modify above example, make sure that the syntax is correct and that the last property value does not have a trailing comma.
Example 2 Subscribe the jQuery ajaxSend event before an Ajax request is sent (e.g. "updateoption", "autosuggest", "autofill") $(document).ajaxSend(function(event, jqxhr, settings) { Example 3 Subscribe the "updatedone" event for Dynamic Selection Lists. The event fires after options of a child field is updated. $(document).on("updatedone", function(e, args) { Example 4 Subscribe the "create.editor" event for the field named "MyField" to change configuration of the HTML editors. The event fires before the HTML editor is created. $(document).on("create.editor", function(e, args) { |
||||||||||||||||
Startup Script |
The script will be placed before the footer. This is a very useful event which you can almost do everything by changing the document DOM. PHPMaker provides a jQuery plugin .fields() for you to easily get/set the form values in client side events such as Startup Script and Form_CustomValidate (see below) $row = $(this).fields(); // return an object of all fields, each property is a jQuery object of the input element(s) of a field You can also get the jQuery object for a field directly, $field = $(this).fields("<fieldname>"); // return jQuery object of the input element(s) of a field The jQuery object of the field is the jQuery object of the input element of the field. (Note that if Edit Tag of the field is CHECKBOX or RADIO, the jQuery object may contain more than one elements.) For example, if the page is an Edit page and the field is named "Field1" and it is a textbox, $(this).fields("Field1") is equivalent to $("#x_Field1"). The advantages of using .fields() plugin is that the returned jQuery object has the following additional methods:
Example 1 Add onchange event to the field named "Field1" in Add/Edit page to change other fields by jQuery plugin .fields() $("input[name='x_Field1']").change(function() { // Assume Field1 is a text input Example 2 Add onclick event to the field named "Field2" which uses CHECKBOX as Edit Tag. $("input[name='x_Field2[]']").click(function() { // Field2 has multiple inputs (checkboxes) so they should be selected by name Example 3 Add onchange event to the field named "Field1" in Grid-Add/Edit page to change other fields by jQuery plugin .fields() $("input[data-field='x_Field3']").change(function() { // Field1 has multiple inputs in Grid-Add/Edit so they should be selected by data-field attribute Example 4 Toggle visibility of a page in Multi-Page (see Table Setup) $(function() { |
||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. Note: This function is a member of the JavaScript page class. Return false if the form values do not pass your validation. Note If you use this client side event, make sure you have enabled client-side validation, see Validation in PHP Settings.
The HTML form object can be accessed by the parameter fobj. You can also use the jQuery plugin .fields() in this event. Example 1 Make sure an integer field value meet a certain requirement function(fobj) { // DO NOT CHANGE THIS LINE! Example 2 Compare 2 date fields function(fobj) { // DO NOT CHANGE THIS LINE! Example 3 Manipulation of date fields function(fobj) { // DO NOT CHANGE THIS LINE! |
||||||||||||||||
Table-Specific -> Delete Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Table-Specific -> Edit Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
||||||||||||||||
Table-Specific -> List Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. Return false if the form values do not pass your validation. The form object can be accessed by the parameter fobj. Note that the form element names are different in Inline-Add/Copy/Edit or Grid-Add/Edit mode of List page. They are named as "x0_<fieldname>" in Inline-Add/Copy, as "x1_<fieldname>" in Inline-Edit mode, and as "x1_<fieldname>", "x2_<fieldname>", etc. in Grid-Add/Edit since there are multiple rows. Inspect the elements in your browser to check the actual form element names.
Note Form_CustomValidate is fired for EVERY row in the grid.
You can also use the jQuery plugin .fields() (see above) to manipulate the fields, but remember that the plugin return field(s) of the CURRENT row only. If you need to access fields in other rows, either use fobj.elements or jQuery with CSS selectors. |
||||||||||||||||
Table-Specific -> Multi-Update Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
||||||||||||||||
Table-Specific -> Report Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Table-Specific -> Search Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
||||||||||||||||
Table-Specific -> View Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Other -> Login Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
||||||||||||||||
Other -> Registration Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
||||||||||||||||
Other -> Change Password Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
||||||||||||||||
Other -> Password Recovery Page | |||||||||||||||||
Client Script |
The script will be placed after the header. | ||||||||||||||||
Startup Script |
The script will be placed before the footer. | ||||||||||||||||
Form_CustomValidate |
This event is fired after the normal form validation. You can use this event to do your own custom validation. The form object can be accessed by the parameter fobj. Return false if the form values do not pass your validation. |
Objects in PHPMaker Generated Code
The following objects are available in the generated code and you can use them in the Server Events to add more power to the code. The most important objects are:
Page Object
The Page object is generated for most pages. You can access the
object properties using the -> notation (e.g. CurrentPage()->PageID). The page class inherits from the table class generated for each table. The methods and properties of the page class varies with page, for
the complete list of methods and properties, please refer to the generated page class
in the generated scripts and the class
<Table> (e.g. Cars) in the generated file "<Table>.php".
Field Object
A Field object is generated for each field in a
table. For example, the "Trademark" object is generated for
the "Trademark" field in the "Cars" table. You can
access the object properties using the -> notation (e.g. CurrentPage()->Trademark->CurrentValue).
For the complete list of methods and properties, please refer to the class
DbField in the generated file "phpfn*.php".
Security Object
The Security object is used to store the current Advanced Security settings. Please refer to the class AdvancedSecurity in the generated
file "phpfn*.php" for the complete list of methods and properties.
Email Object
The Email object contains the required information of the email to be sent, the instance of the object will be passed to the Email_Sending events as argument and let you modify the email. Please refer to the class Email in the generated
file "phpfn*.php" for the complete list of methods and properties.
Menu Object
The Menu object contains all information of a menu, the instance of the menu will be passed to the Menu_Rendering and Menu_Rendered events as argument and let you work with the menu. Please refer to the class Menu in the generated
file "phpfn*.php" for the complete list of methods and properties.
MenuItem Object
The MenuItem object contains all information of the menu item, the instance of the menu item will be passed to the MenuItem_Adding events as argument and let you work with the menu item. Please refer to the class MenuItem in the generated
file "phpfn*.php" for the complete list of methods and properties.
ListOpions Object
The ListOptions object contains all information of the non data columns in the main table of the List page. Please refer to the class ListOptions in the generated
file "phpfn*.php" for the complete list of methods and properties.
ExportOpions Object
The ExportOptions object contains all information of the export links in the List page. It is also an instance of the class ListOptions. Please refer to the class ListOptions in the generated
file "phpfn*.php" for the complete list of methods and properties.
Language Object
The language Object lets you retrieve a phrase of the active language during runtime. The phrase can be retrieved in the generated scripts using methods such as phrase(), tablePhrase() and fieldPhrase(). Please refer to the class Language in the generated
file "phpfn*.php" for the complete list of methods and properties.
Breadcrumb Object
The Breadcrumb object contains all information of the breadcrumb at the top of page. Please refer to the class Breadcrumb in the generated
file "phpfn*.php" for the complete list of methods and properties.
There are other objects in the generated code, please refer to the source code of the "phpfn*.php" in template or generated scripts.
Some Global Functions
The following are some useful global function available in the generated code for you to get information easier in server events:
Notes
Function | Description | Example |
Get($name[, $default]) | Get a value from $_GET. If the value is not set, the default value $default (NULL by default) is returned. | $value = Get("name"); |
Post($name[, $default]) | Get a value from $_POST. If the value is not set, the default value $default (NULL by default) is returned. | $value = Post("name"); |
Param($name[, $default]) | Get a value from $_POST. If the value is not set, get the value from $_GET. If the value is not set, the default value $default (NULL by default) is returned. | $value = Param("name"); |
Route([$i]) | Get the nth (0-based) route value. For use with API and URL Rewrite enabled only. If $i unspecified, all route values are returned as array. For example, if you make a request to API like /api/hello/world, the parameters are hello/world, the first value, Route(0), is the action name "hello", the second value, Route(1), is "world". |
$value = Route(1); |
Conn([$dbname]) | Get the global connection object. If $dbname is not specified, it returns the connection object for the database of the project. If $dbname is specified, it returns the connection object for the specified database of a Linked Table. |
$rs = Conn()->Execute("SELECT ..."); // execute a SELECT statement and get recordset object $rs = Conn("MyDbName")->Execute("SELECT ..."); // execute a SELECT statement and get recordset object |
Security() | Get the global security object | if (Security()->CanEdit()) { // check if current user has Edit permission for the current table (for use with User Level Security ...your code... } |
Language() | Get the global language object | Language()->setPhrase("AddLink", "xxx"); // change the wording for the "Add" link |
Profile() | Get the global user profile object | Profile()->Set("xxx", "yyy"); // set a value Profile()->Save(); // save to session Profile()->Get("xxx"); // get the value in other pages |
CurrentUserName() | Get current user name. | $username = CurrentUserName(); |
CurrentUserID() | For used with User ID Security (see Security Settings). Get current User ID. | $userid = CurrentUserID(); |
CurrentUserLevel() | For used with User Level Security (see Security Settings). Get current user's User Level ID (integer). (Note: NOT current user's permission as integer.) | $levelid = CurrentUserLevel(); |
CurrentUserInfo($fieldname) | For used with Advanced Security (see Security Settings). Get current user's info from the user table. The argument is the field name in the user table. | $email = CurrentUserInfo("email"); |
CurrentPageID() | Get current page ID. A page ID identifies the page type, it can be "list", "view", "add", "edit", "delete", "search", etc. | if (CurrentPageID() == "add") { |
CurrentPage() | Get current page object. | $rowindex = CurrentPage()->RowCnt; |
CurrentLanguageID() | Get current language ID. | $langid = CurrentLanguageID(); |
Page([$tablename]) | Get page object of another table in the page, e.g. the page object of the master table or detail table. If $tablename is not specified, it returns CurrentPage(). | $value = Page("MyMasterTable")->MyField->CurrentValue; |
IsLoggedIn() | For used with Advanced Security (see Security Settings). Get the login status of the current user. | if (IsLoggedIn()) { ...your code... } |
IsAdmin() | For used with Advanced Security (see Security Settings). Check if the current user is an administrator. | if (IsAdmin()) { ...your code... } |
IsExport([$format]) | Check if the page is exporting data. | if (IsExport("print")) { ...your code... } |
Execute($sql [,$dbname]) | Execute UPDATE, INSERT, or DELETE statements. | Execute("UPDATE MyTable SET... WHERE..."); |
ExecuteRow($sql [,$dbname]) | Executes the query, and returns the first row as an array. | $row = ExecuteRow("SELECT * FROM MyTable WHERE..."); |
ExecuteRows($sql [,$dbname]) | Executes the query, and returns the rows as an array. | $rows = ExecuteRows("SELECT * FROM MyTable WHERE..."); |
ExecuteScalar($sql [,$dbname]) | Executes the query, and returns the first column of the first row. | $value = ExecuteScalar("SELECT MyField FROM MyTable WHERE..."); |
ExecuteHtml($sql [,$options] [,$dbname]) | Executes the query, and returns the data as HTML table. See source code for options. | $html = ExecuteHtml("SELECT * FROM MyTable WHERE..."); |
ExecuteJson($sql [,$options] [,$dbname]) | Executes the query, and returns the data as JSON. See source code for options. | $json = ExecuteJson("SELECT * FROM MyTable WHERE..."); |
DbHelper([$dbname]) | Get database helper object of a database (also see Custom Files). | $db = DbHelper(); |
SetClientVar($name, $value) | Pass server side data to client side as a property of the ewVar object. | SetClientVar("myName", "myValue"); // PHP (server side) var myValue = ew.vars.myValue; // JavaScript (client side) |
There are many other useful functions in the generated code, please refer to the source code of the file "phpfn*.php" in template or generated scripts.