My PHPGenerator
My PHPGenerator
My PHPGenerator
User's guide
Table of Contents
Foreword
2 Installation
...................................................................................................................................
3 How can
...................................................................................................................................
I purchase PHP Generator for MySQL?
4 License...................................................................................................................................
Agreement
5 About SQL
...................................................................................................................................
Maestro Group
6 What's...................................................................................................................................
new
10
11
II Getting started
1 How to...................................................................................................................................
connect to MySQL
12
2 Projects
...................................................................................................................................
16
3 Command
...................................................................................................................................
line options
17
4 Report...................................................................................................................................
sending
18
5 Shortcut
...................................................................................................................................
keys
19
6 Deployment
...................................................................................................................................
20
21
23
2 Custom
...................................................................................................................................
SQL queries
24
26
IV Customizing webpages
1 Page Editor
...................................................................................................................................
29
Columns
.......................................................................................................................................................... 29
Setting a lookup
......................................................................................................................................................... 31
View controls
......................................................................................................................................................... 36
Text
......................................................................................................................................... 38
DateTime
......................................................................................................................................... 40
Image
......................................................................................................................................... 40
File download ......................................................................................................................................... 41
Checkbox
......................................................................................................................................... 42
External file, audio
.........................................................................................................................................
file and image
43
Embedded video ......................................................................................................................................... 44
Edit controls
......................................................................................................................................................... 45
Text
......................................................................................................................................... 48
Radio group
......................................................................................................................................... 50
Combo box
......................................................................................................................................... 51
Autocomplete editor
......................................................................................................................................... 53
Multi-level autocomplete
.........................................................................................................................................
editor
55
Check box
......................................................................................................................................... 61
Check box group......................................................................................................................................... 62
Multiple select ......................................................................................................................................... 63
2016 SQL Maestro Group
Contents
II
DateTime
......................................................................................................................................... 63
Time
......................................................................................................................................... 64
Spin edit
......................................................................................................................................... 65
Range edit
......................................................................................................................................... 66
Color edit
......................................................................................................................................... 67
Mask edit
......................................................................................................................................... 68
Text area
......................................................................................................................................... 69
Html Wysiwyg ......................................................................................................................................... 70
Password
......................................................................................................................................... 72
File upload
......................................................................................................................................... 72
Image upload
......................................................................................................................................... 73
Upload file to folder
......................................................................................................................................... 75
Upload image to folder
......................................................................................................................................... 76
String templates
.......................................................................................................................................................... 77
Master-Detail ..........................................................................................................................................................
Presentations
78
Events
.......................................................................................................................................................... 82
Application-level
.........................................................................................................................................................
(global) Events
83
OnBeforePageExecute
......................................................................................................................................... 84
OnAfterLogin
......................................................................................................................................... 85
OnCustomHTMLHeader
......................................................................................................................................... 85
OnGetCustomTemplate
......................................................................................................................................... 86
OnBeforeInsertRecord
......................................................................................................................................... 92
OnBeforeUpdateRecord
......................................................................................................................................... 92
OnBeforeDeleteRecord
......................................................................................................................................... 93
OnAfterInsertRecord
......................................................................................................................................... 93
OnAfterUpdateRecord
......................................................................................................................................... 94
OnAfterDeleteRecord
......................................................................................................................................... 95
OnGetFieldValue ......................................................................................................................................... 96
OnGetCustomExportOptions
......................................................................................................................................... 96
Client Side.........................................................................................................................................................
Page Events
97
OnBeforePageLoad
......................................................................................................................................... 97
OnAfterPageLoad......................................................................................................................................... 98
OnInsertFormValidate
......................................................................................................................................... 98
OnEditFormValidate
......................................................................................................................................... 99
OnInsertFormEditorValueChanged
......................................................................................................................................... 99
OnEditFormEditorValueChanged
......................................................................................................................................... 101
OnInsertFormLoaded
......................................................................................................................................... 103
OnEditFormLoaded
......................................................................................................................................... 104
Server Side
.........................................................................................................................................................
Page Events
105
OnBeforePageExecute
......................................................................................................................................... 106
OnPreparePage......................................................................................................................................... 106
OnCustomRenderColumn
......................................................................................................................................... 107
OnCustomRenderPrintColumn
......................................................................................................................................... 110
OnCustomRenderExportColumn
......................................................................................................................................... 110
OnCustomHTMLHeader
......................................................................................................................................... 110
OnExtendedCustomDrawRow
......................................................................................................................................... 111
OnCustomRenderTotals
......................................................................................................................................... 114
OnGetCustomTemplate
......................................................................................................................................... 115
OnCustomDrawRow
......................................................................................................................................... 121
OnAfterInsertRecord
......................................................................................................................................... 122
OnAfterUpdateRecord
......................................................................................................................................... 122
OnAfterDeleteRecord
......................................................................................................................................... 123
OnBeforeInsertRecord
......................................................................................................................................... 124
OnBeforeUpdateRecord
......................................................................................................................................... 125
2016 SQL Maestro Group
II
III
2 Project
...................................................................................................................................
Options
144
Shared options
.......................................................................................................................................................... 145
147
V Webpages appearance
1 Color...................................................................................................................................
schemes
150
2 Header
...................................................................................................................................
and Footer
151
3 User-defined
...................................................................................................................................
styles
152
4 User ...................................................................................................................................
JavaScript
154
5 Using...................................................................................................................................
templates
155
157
VI Security settings
1 Hard-coded
...................................................................................................................................
authorization
159
2 Table-based
...................................................................................................................................
authorization
161
3 Database
...................................................................................................................................
server authorization
163
4 User-defined
...................................................................................................................................
authorization
164
5 Permission
...................................................................................................................................
manager
165
6 Record-level
...................................................................................................................................
security
168
169
171
173
IX Developer Reference
1 Client...................................................................................................................................
Side API
174
Contents
IV
2 Server
...................................................................................................................................
Side API
199
3 Style...................................................................................................................................
sheets internals
203
204
X Options
1 Application
...................................................................................................................................
205
Page
.......................................................................................................................................................... 205
Export ......................................................................................................................................................... 208
Abilities ......................................................................................................................................................... 209
Generation rules
.......................................................................................................................................................... 210
Display formats
.......................................................................................................................................................... 210
Output
.......................................................................................................................................................... 211
Confirmations
.......................................................................................................................................................... 211
2 Editors
...................................................................................................................................
& Viewers
General
Display
213
.......................................................................................................................................................... 213
.......................................................................................................................................................... 214
IV
3 Appearance
...................................................................................................................................
221
Index
230
Master-detail presentations
Out-of-the-box Charts
25 color themes
Support for
hard-coded,
authentication
157
78
128
82
Record-level security
Multi-language support
168
169
138
table-based,
24
147
database
server
and
custom
user
1.1
System Requirements
Client environment
Pentium PC or higher;
Server environment
MySQL from 3.23 to 6.0;
Linux/Unix or Windows Web Server;
PHP 5.1 or higher. PHP 7.0 is supported too.
1.2
Installation
To install PHP Generator for MySQL on your PC:
download the PHP Generator for MySQL distribution package from the download page
at our site;
run setup.exe from the local folder and follow the instructions of the installation
wizard;
find the PHP Generator for MySQL shortcut in the corresponding program group of
the Windows Start menu after the installation is completed.
1.3
To obtain technical support, please visit the appropriate section on our website or
contact us by email to [email protected].
1.4
License Agreement
Notice to users: carefully read the following legal agreement. The use of the software
provided with this agreement (the "SOFTWARE") constitutes your acceptance of these
terms. If you do not agree to the terms of this agreement, do not install and/or use this
software. The use of this software is conditioned upon the user's compliance with the
terms of this agreement.
License grant. SQL Maestro Group grants you a license to use one copy of the
version of this SOFTWARE on any single hardware product for as many licenses as you
purchase. "You" means a company, an entity or an individual. "Use" means storing,
loading, installing, executing or displaying the SOFTWARE. You may not modify the
SOFTWARE or disable any licensing or control features of the SOFTWARE except as an
intended part of the SOFTWARE's programming features. This license is not
transferable to any other company, entity or individual. You may not publish any
registration information (serial numbers, registration keys, etc.) or pass it to any other
company, entity or individual.
Ownership. The SOFTWARE is owned and copyrighted by SQL Maestro Group. Your
license confers no title or ownership of the SOFTWARE and should not be construed as
a sale of any rights for the SOFTWARE.
Copyright. The SOFTWARE is protected by the United States copyright law and
international treaty provisions. You acknowledge that no title to the intellectual
property in the SOFTWARE is transferred to you. You further acknowledge that title
and full ownership rights to the SOFTWARE will remain the exclusive property of SQL
Maestro Group and you will not acquire any rights to the SOFTWARE except as
expressly set forth in this license. You agree that any copies of the SOFTWARE will
contain the same proprietary notices which appear on and in the SOFTWARE.
License and distribution. An unregistered copy of the SOFTWARE ("UNREGISTERED
SOFTWARE") may be used for evaluation purposes. The UNREGISTERED SOFTWARE
may be freely copied and distributed to other users for their evaluation. If you offer
this UNREGISTERED SOFTWARE installation package for download, then you agree to:
replace existing version of the UNREGISTERED SOFTWARE installation package with the
new package immediately after a new version of the SOFTWARE is released by SQL
Maestro Group, or
delete an obsolete version of the UNREGISTERED SOFTWARE installation package
immediately upon written email notice by SQL Maestro Group.
A registered copy of the SOFTWARE ("REGISTERED SOFTWARE") allows you to use the
SOFTWARE only on a single computer and only by a single user at a time. If you wish to
use the SOFTWARE for more than one user, you will need a separate license for each
individual user. You are allowed to make one copy of the REGISTERED SOFTWARE for
back-up purposes.
Reverse engineering. You affirm that you will not attempt to reverse compile,
modify, translate, or disassemble the SOFTWARE in whole or in part.
Unauthorized use. You may not use, copy, rent, lease, sell, modify, decompile,
disassemble, otherwise reverse engineer, or transfer the SOFTWARE except as
provided in this agreement. Any such unauthorized use shall result in immediate and
1.5
At present, our company offers a series of Windows GUI admin tools for SQL
management, control and development of the following servers: MySQL, Microsoft SQL
Server, PostgreSQL, Oracle, SQL Anywhere, DB2, SQLite, Firebird, and MaxDB. We
also produce universal tools to be used for administering any database engine accessible
via ODBC driver or OLE DB provider. Such products may be the clear-cut decision for
those who constantly work with several database servers.
SQL Maestro is the premier Windows GUI admin
tool for database development, management, and
control.
It provides you with the ability to perform all the
necessary database operations such as creating,
editing, copying, extracting and dropping database
objects; moreover, you can build queries visually,
execute queries and SQL scripts, view and edit
data including BLOBs, represent data as diagrams,
export and import data to/from most popular file
formats, manage users and their privileges (if
possible), and use a lot of other tools designed for
making your work with your server comfortable and
efficient.
The software products are constantly optimized for the latest server versions support.
You can use the following contact information if necessary:
Our web-site
www.sqlmaestro.com
Postal address:
10
1.6
What's new
Please find out the latest PHP Generator for MySQL news at http://www.sqlmaestro.
com/products/mysql/phpgenerator/news/
Getting started
11
Getting started
To create a database-driven web application,
Specify datasources
169
21
12
to be available;
171
26
to be created;
147
and interface
157
PHP Generator for MySQL allows you to save and restore all the options set during a
session. All the session parameters may be saved and loaded to/from a project file.
Loaded settings may be edited if necessary. To run a wizard with a project, follow
More... > Load Project on the first wizard step and enter the name of the project file,
recently used projects are also available from this popup menu. Find out more about
working with Projects 16 .
2016 SQL Maestro Group
12
2.1
as localhost.
PHP Generator for MySQL allows you to connect to MySQL directly, via Secure SHell
(SSH) tunnel or HTTP tunnel.
Direct connection
It is the most natural and the most preferable connection mode. Use it each time it is
possible. Most of hosting companies allow direct connections to databases. However in
most cases you have to go to your control panel and add your home/office computer
IP address or domain name to Access List - list of IP addresses allowed accessing from
outside.
SSH tunnel connection
If your MySQL server does not allow direct connections from your remote
workstations, you can establish connection to an allowed intermediate SSH server and
forward all MySQL commands through the Secure SHell (SSH) tunnel.
More about SSH tunnel connection
To establish connection to intermediate SSH server and forward all MySQL
commands through the secure tunnel, you need to:
1. Check I can connect to the server directly or via SSH tunneling.
2. Follow the Configure SSH options link to open the SSH Options window.
Getting started
3. Check Connect through the Secure Shell (SSH) tunnel and complete the
following fields:
Host name
Specify the host name or IP of your site. Note, that MySQL host name
always should be set relatively to the SSH server. For example, if both of
MySQL and SSH servers are located on the same computer, you should
specify localhost as Host name instead of server's external host name or IP
address.
Port number
Enter the port number for the SSH server.
4. Enter valid User name for the remote server and select the Authentication
method and set corresponding credentials.
Password-based
Set the password corresponding to the specified user.
Key-based
Specify the path to the Private key file with the corresponding Passphrase to
log in to the remote server. PHP Generator for MySQL accepts keys in ssh.
com or OpenSSH formats. To convert a private key from PuTTY's format to
one of the formats supported by our software, use the PuTTYgen utility that
can be freely downloaded from the PuTTY website.
Keyboard interactive
13
14
4. In case using of a proxy server use Configure tunnelling options to open the HTTP
tunnelling options window and specify your proxy server connection parameters and
Getting started
15
HTTP authentication.
Note: You are actually connecting to your database through the PHP script on the
server, so in most cases the host/server name is "localhost" unless the target database
server is not installed on the same computer as the Web server.
Irrespectively of a connection mode you should specify common credentials as follows:
Host
The host name of the MySQL server.
Port number
The TCP/IP port to use if server is not localhost.
User name
The username used to connect to MySQL.
Password
The password for the user account on server.
16
2.2
Projects
PHP Generator for MySQL allows you to save and restore all the options set during a
session. You need not to specify all options each time you work with the application
anew; instead you can load all settings from a project and change them if necessary.
Projects are very useful when working with PHP Generator. If you will close the
application without saving a project, all carefully adjusted settings will be lost. To set
the same options next time, you'll need to repeat the process step by step again while
with a project all the session parameters can be restored in a few mouse clicks.
To create a project, configure datasources and click More > Save Project at any next
step (Ctrl+S) or More > Save Project as... (Ctrl+Shift+S). All the settings you have
made will be saved to a file.
To restore previously saved settings from a project, click More > Load Project at the
first wizard step. Recently used projects are available from the More > Recent Projects
popup menu.
Getting started
2.3
17
<project_file_name>
The project
<output_directory>
-g|generate
-h|help
16
Examples
The examples below assume that you are entering the command lines in the PHP
Generator for MySQL program directory. Don't forget to enclose all paths and filenames
containing spaces in quotes.
myphpgenerator "C:\Templates\PHP_GENERATOR\MySQL\NBA_db.pgtm"
fbphpgenerator "C:\Templates\PHP_GENERATOR\Firebird\online_store.pgtf" -g -o
"C:\webserver\localhost"
18
2.4
Report sending
To send a report to SQL Maestro support team, use the corresponding PHP Generator for
MySQL feature. To invoke the window, click More > Send report... .
Check the corresponding options to include project file, schema, and specified number of
the table records, add the problem description and click Send record to get the prepared
report in your default email client. In case you have no browser installed save the
prepared report to a file with the corresponding option and send it manually to
[email protected] as email attachment.
Getting started
2.5
19
Shortcut keys
The following table describes the default shortcut keys in applications created with PHP
Generator for MySQL.
Add new record
Save (in input forms)
Save and add another record
Previous page
Next page
Open all details
Open Filter Builder
Add a new condition in Filter
Builder
Alt+Ctrl+I, Alt+Insert
Ctrl+Return
Ctrl+Shift+Return
Ctrl+Left
Ctrl+Right
Ctrl+Shift+/
Ctrl+Shift+F
Alt+Ctrl+I, Alt+Insert
20
2.6
Deployment
Applications created by PHP Generator use the Smarty library. Smarty is a template
engine for PHP, facilitating the separation of presentation (HTML/CSS) from application
logic. Smarty compiles copies of the templates as PHP scripts. Compilation happens once
when each template is first invoked, and then the compiled versions are used from that
point forward. The compiled templates are stored under the templates_c directory which
must be accessible for writing by Smarty.
To upload a ready web application to your web hosting, you need to have the following
conditions.
1. Allow write access to templates_c
The web server user must have write access to the templates_c directory. The most
secure method is to make this directory owned by this user. The change of ownership is
the easiest way to accomplish this. Only an administrator can execute this operation so
if you can't do that then ask your hosting provider to do it for you. If you can do this,
then it is possible (and recommended) to disallow "other" users read/write access for
optimum security.
2. Deploy generated files
You can upload generated files to your web server manually or using a file
synchronization software. In case of manual deployment there are two possible
scenarios:
If the new and the live web applications were created by the same version of
PHP Generator for MySQL, just copy to the remote server all .php files from the
root directory of the generated application and the custom_templates folder (if
you customized one or more templates
115
in this project).
If the new and the live web applications were created by different versions of
PHP Generator for MySQL, copy all files from the
output directory
to the
templates_c
directory.
We recommend you to use a file synchronization software. Any such tool compares and
synchronizes the output directory and the corresponding folder on your web hosting
quickly and can significantly simplify the deployment process. One thing you have to do
is to exclude the template_c directory from the synchronization process.
Configuring datasources
21
Configuring datasources
PHP Generator for MySQL creates webpages aimed at interaction with MySQL tables,
views, and queries throw the web. Each webpage contains a grid with data of according
datasource supplied with abilities to view, edit, filter, sort, delete, and others.
Adding tables and views
To add a table or a view, open the Select object
button.
23
Adding queries
To add a query, type the query text in the Query editor 24 or load it from .sql file with
More > Load query from file... Moreover you can use queries stored a single .qrp file
(query repository). This feature may be extremely useful if you need to share a set of
the same queries between several different projects. To save/load queries to/from a
single file, use More > Save all queries as repository / Load query repository items from
the More button menu accordingly.
Invalid queries
The wizard automatically validates objects and displays names of invalid queries in red.
The basic rules of queries usage in PHP Generator projects are covered in the
corresponding topic 24 .
Primary keys
The wizard automatically inspects all data objects for unique identifiers that are
necessary for add, edit, and delete operations. It marks objects without primary key
constraints with No key columns label and asks a confirmation 211 on moving to the next
step. It's recommended to specify a single column or a set of columns that uniquely
identifies each record in the view/query to expedite the work of the generated
application. It's optional but preferable.
22
By default, each script has settings defined by the application options 205 . Of course,
you can change them later, but it's useful to setup the generation rules in accordance
with settings of the most webpages to reduce further adjustments.
Configuring datasources
3.1
23
24
3.2
This happens because the software uses similar queries for internal needs. In case such
SQL expression is not valid, the wizard marks the query as invalid and displays its name
in red.
To meet this requirement, make sure that all the columns in the result dataset have
unique aliases. For example, the following query works fine itself, but returns a dataset
with two columns named id:
SELECT
table1.*,
table2.*
FROM table1, table2
WHERE table1.id = table2.id;
This is the reason the wizard marks this query as invalid. To solve the problem, provide
these columns with unique aliases:
SELECT
table1.id as table1_id,
table2.id as table2_id
FROM table1, table2
WHERE table1.id = table2.id;
Configuring datasources
25
To create an updatable dataset based on this query, INSERT, UPDATE and DELETE
statements can be specified as follows:
INSERT INTO
customer
VALUES (:id,
:first_name,
:last_name);
UPDATE customer
SET
id = :id,
first_name = :first_name,
last_name = :last_name
WHERE id = :OLD_id;
DELETE FROM customer
WHERE id = :id;
26
Customizing webpages
Pages
This tab contains the list of webpages to be created. Each page is based on a
datasource defined on the previous step and is created with default settings defined in
the application options 205 .
Define the title for the generated page, the text to be used as the corresponding
menu label at the navigation menu and the name of generated .php file.
Click the Edit button to open Page editor
29
132
210
Customizing webpages
27
Details
This tab allows you to specify master-detail presentations 78 for generated webpages.
To add a master-detail relation means to provide each record of the result (master)
webpage with an ability to browse all records stored in another (detail) table and
associated with this record on a separate Details page.
The detail presentations are created automatically according to the master-detail
relationships (if the Setup details by foreign key 210 option is enabled). To define a new
master-detail relation, use the corresponding tab of the Page Editor of the master table,
or set it directly on this wizard step.
To manipulate details directly, select the master table in the Pages tab and use the
buttons near the Details tab.
Click the Add... button to configure a new relation using drop-downs in the Link
editor window.
28
Use the Edit... button to edit settings of a concrete detail page with the Page
editor
29
132
Use the Reset and Reset all buttons to setup detail pages properties according to the
project options 144 .
Project Options
To specify default setting 144 to be applied to each generated page, follow the Setup
project options to configure default page settings link. This properties may be edited for
the concrete page within the Page Properties 132 window.
Customizing webpages
4.1
29
Page Editor
Columns 29
Use this tab to specify which columns will be displayed on the result web page and
corresponding forms, their captions, which controls will be used for certain columns on
Insert and Edit forms, lookup options and more.
Details 78
Use this tab to adjust the page detail presentations and setup detail pages properties.
Events 82
Set here the fragments of PHP code to be executed before or after a record was added,
edited, deleted, etc.
Filter 127
Use this tab to reduce the number of records available at the generated page.
Charts 128
Use this tab to equip the web page with interactive charts.
Use the Page Properties 132 window to setup common page properties such as view/edit/
delete/filter/export abilities, pagination options, page header, and more.
The Data Partitioning 138 wizard allows you to create a custom pagination i.e. split the
records on the generated page by a specified criteria.
4.1.1
Columns
Use the Columns tab of Page Editor to set the appearance of data on the following
presentations:
The General tab allows you to configure column properties for all presentations. To set
options for a specific presentation, use the corresponding tab and uncheck the Use
general option box. To restore default column options, use the Reset column link from
the tab's popup menu.
Common
This tab allows you to modify the Caption to be used for the column and specify
whether the lookup values 31 will be displayed instead of the values storing in this
column and set the lookup options. By default, PHP Generator for MySQL enables a
lookup for columns linked by a foreign key with a single column from another table (if
Setup lookups by foreign key option 210 is enabled).
30
View 36
Use the tab to define controls to be used to represent the corresponding column values
on List, View, Print and Export pages.
Edit/Insert 45
Specify which control will be used for the selected column on the Edit and Insert forms.
To reorder columns, use the Reorder columns... button and set the new order in the
Reordering window. Check the corresponding boxes to apply this order to necessary
presentations. The order of columns at the General tab remains unchanged as it is
possible to have different column order for different presentation.
Customizing webpages
4.1.1.1
31
Setting a lookup
Lookups are used in grids and on Insert and Edit forms as well. On List and View
presentations lookups are used to display records of another dataset corresponding to
and instead of values stored in the webpage base data source. On Insert and Edit
presentations lookup editors are used to simplify input by selecting a value storing in
another dataset and corresponding to a pre-defined value from the base one.
On Edit and Insert forms PHP Generator for MySQL provides you with two types of
lookup editors: Radio group or Combo box. Select Radio group as the column's Edit
properties if the number of the column values is quite little.
Setting a lookup editor bound to a data source (table, view, query)
If you create a PHP script for taking orders, the 'Orders' table will generally have a field
hosting a number indicating the customer who made the order. Working directly with the
customer number is not the most natural way; most users will prefer to work with
customer names. However, in the database the customers' names are stored in a
different table to avoid duplicating the customer data for each order by the same
customer. To get around such a situation, you can enable a lookup editor:
check the Use lookup box;
select the foreign table/view/query as Data Source;
specify the field with the same data as Link field;
set the field with data to appear in the lookup editor as Display field;
32
By default, PHP Generator for MySQL enables a combo box lookup editor for a column
linked by a foreign key with a single column from another table (if Setup lookups by
foreign key option 210 is enabled).
Using Filter condition
Filter condition allows you to reduce the list of values represented in the lookup editor
with a specified criterion. This condition corresponds to the WHERE clause applied to the
data source (you must not add the WHERE keyword to beginning of the condition). The
following operators can be used in this clause: =,<> (!=), >, <, >=, <=, BETWEEN, LIKE,
IN. It is also possible to use predefined variables like %CURRENT_USER_NAME%.
Example 1
To enable a lookup editor with a list of USA cities (the corresponding value of
"country_id" is 103) named like Da*, specify the following condition: country_id = 103
AND city LIKE 'Da%'
Example 2
Suppose we have a table that contains a column 'owner' with owner information. To set
a lookup editor with the list of values owned by the current user, specify the filter
condition as follows: owner = %CURRENT_USER_NAME%
Setting a lookup editor represented data of several columns
To create such lookup editor, create a query with all the necessary data concatenated
into a single column and specify the query as Data Source. A complete example can be
found below.
Example
Suppose we have three tables: 'employee' with a list of office employees, 'job' with
employees' job titles and salaries, and 'department' with a list of office departments.
See definitions here
CREATE TABLE employee (
EMP_NO
integer NOT
FIRST_NAME
varchar(15)
LAST_NAME
varchar(20)
JOB_CODE
integer NOT
DEPT_NO
integer NOT
);
Customizing webpages
33
To enable a lookup editor for the 'HEAD_DEPT' field of the 'department' table
representing first name, last name, and job title of the employee, follow the steps above
with the following query text:
SELECT
e.EMP_NO as ID,
CONCAT(e.FIRST_NAME, ' ', e.LAST_NAME, ', ', j.JOB_TITLE) as FULL_NAME
FROM employee e,
job j
WHERE e.JOB_CODE = j.JOB_CODE
34
To create a lookup editor bound to a custom value list i.e. to a list of values that are
not stored in a database table and cannot be retrieved by a query, process as follows:
Click the ellipsis button next to the "Edit properties";
Enter
the
list
of
the
an_allowed_value=value_to_be_represented
allowed
values
in
pairs
1=One,2=Two).
Customizing webpages
35
36
By default, PHP Generator for MySQL creates lookup editors described above for columns
based on enumeration data types.
4.1.1.2
View controls
The View options define the way the column data is displayed on List, View, Print and
Export pages.
Display properties
Select the control to be used to represent column data from the drop-down list.
Available controls are:
Text 38
DateTime
Image
40
40
File download
41
Customizing webpages
Checkbox
37
42
43
44
To set the format to be applied to the column data such as text alignment, image size,
and so on, use the dialog opened by the ellipsis button. By default, the format is the
same as it is set at the Project options 210 .
Along with available formatting options you can specify any property you want using the
Custom attributes option. This option allows you to specify the content of standard
HTML style tag applied to the column data.
The Null Label property allows you to customize the representation of NULL values at
the column level.
To implement a conditional data formatting,
OnExtendedCustomDrawRow 111 events.
use
the
OnCustomDrawRow
121
or
Display as hyperlink
To represent the column's data as hyperlink, check the Display as hyperlink option and
specify the HREF Template 77 . Target controls where the new document is displayed
when a user follows the link.
_blank
_parent
_self
_top
Header hint
Use this field to specify the the column caption's hint. By default, it is a comment to the
table/view column.
Minimal visibility
PHP Generator for MySQL provides you with an ability to generate responsive pages that
look beautiful on any device from a mobile phone up to an extra-large desktop. This
option allows you to select the minimum resolution of devices the column will be visible
at.
Value
Phone
Tablet
Meaning
The column is displayed on all devices.
The column is displayed on all devices with width greater than
768px.
Desktop
The column is displayed on all devices with width greater than
992px.
Large desktop The column is displayed only on devices with width greater than
1200px.
2016 SQL Maestro Group
38
Meaning
The 'font-size' of the relevant font.
(pixels) Relative to the viewing device.
(inches) 1 inch is equal to 2.54 centimeters.
Centimeters
Millimeters
(points) The points used by CSS 2.1 are equal to 1/72nd of an inch.
(picas) 1 pica is equal to 12 points.
The Totals option allows you to enable a grid footer to display summaries (Sum,
Average, Count, etc) for all or selected grid columns.
4.1.1.2.1 Text
The most popular type of data representation when data is represented "as is" with
minimum modifications. All fields represented on the picture below are displayed as text.
Max length
Use this option to specify the maximum number of symbols to be displayed on the
generated webpage. In case the length of stored text is longer, this text will be cropped
and the more link will be added after the allowed number of symbols. The full text will be
displayed in a popup window on putting mouse over the more link or in a separate
window on clicking this link. Use application options 210 to specify the default max length
of text fields.
Customizing webpages
39
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Set the Format options to be applied to the column data depending of data type
(Number, Percent, String, Currency).
40
4.1.1.2.2 DateTime
Use this type of representation to display date and time in convenient format.
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
4.1.1.2.3 Image
PHP Generator for MySQL allows you to represent BLOB data stored in the database as
images or as download links 41 . To represent column values as images, select Image as
Display properties. This option is defined automatically in case of enabled the Setup
binary fields as image 210 option.
Customizing webpages
41
The Additional attributes allows you to manipulate the size of represented images: to
resize them to a specified height or width. To change image sizes, the appropriate PHP
extension is required. You can also specify a template 77 to be used for image hints to
be shown when the mouse passes on an image.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
73
yellow;
, File upload
72
PHP Generator for MySQL allows you to represent Blob data stored in your database as
images 40 or as download links. To make the column values available for download from
the generated webpage, select the File download type of data representation.
42
Use the Additional options to specify templates 77 of file names and content type
(optional) to be used for binary files on download and enable the Force downloading
option to force browser to download files, instead of open them in the browser.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
72
yellow;
, Image upload
73
4.1.1.2.5 Checkbox
Use this control to display column values as checkboxes. This type of representation is
used for columns storing BOOLEAN, BIT(1), TINYINT(1), or INTEGER data. PHP Generator
for MySQL provides you with the following types of the control appearance.
Standard check box control
Images
Customizing webpages
43
Text values
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
PHP Generator for MySQL allows you to create webpages using data stored outside the
database. Such files are called "external files" and may be of any types. All external files
may be presented on a web page as download links, image files may be also displayed as
pictures, and audio files could be also represented with the html5 audio player which
allows the user to listen these files from the browser.
All external files to be used on a web page based on a table must meet the following
requirements:
they must be stored in the same folder;
their names must contain values of the table column;
their paths must be in the following format: a common part called Source prefix +
column value + a common part called Source suffix.
Suppose, we have a table with information about actors. This table has a 'photo' column
with data as follows: mary_smith, jack_doe, jane_brook, etc. We also have photos of
these actors: mary_smith.jpg, jack_doe.jpg, jane_brook.jpg, etc. The photos are stored
in the 'Photos' folder located in the root directory of the application. The file paths are
as follows:
Photos/mary_smith.jpg
2016 SQL Maestro Group
44
Photos/jack_doe.jpg
Photos/jane_brook.jpg
...
To add these images to the web page, we need to select External image as Display
properties of the 'photo' column and to specify the following additional properties:
Source prefix=Photos/
Source suffix=.jpg
The appearance of download links to external files is the same as download links to files
stored in the database.
External images are represented as images
40
External audio files are represented with the standard html5 audio player:
To represent external data on a webpage, specify Source prefix and Source suffix, and a
template 77 to be used for columns hints to be shown when the mouse passes on an
image/download link.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
75
76
This type of view column allows you to embed a video clip into the page. A thumbnail of
the clip will be displayed in the column automatically (on low screen resolutions a Play
button will be displayed instead). Clicking the thumbnail or the button will open a modal
window and start playing the clip.
Customizing webpages
45
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
4.1.1.3
red;
background-color:
yellow;
Edit controls
The Edit options define the way the column data is represented on Edit and Insert
pages.
46
Edit properties
Use this drop-down list to select a control to be used for this column on Edit and Insert
pages. Available controls are:
Text
48
Combo box
51
Radio group
50
Autocomplete editor
53
61
55
62
63
64
Spin edit
65
Customizing webpages
Range edit
66
Color edit
67
Mask edit
68
Text area
69
Html Wysiwyg
Password
47
70
72
File Upload, Image Upload, Upload file to folder, Upload image to folder
75
PHP Generator for MySQL allows you to check for correctness of input data on the client
side on two scopes:
The input value is validated when a user leaves the control. For this purpose,
2016 SQL Maestro Group
48
Credit card
Number
URL
Digits
Regular
You
expression
can also
for
data
The input values are validated when a user clicks the Save button. This may be
useful to check the compatibility of input data. For this purpose, use the
OnInsertFormValidate
98
and OnEditFormValidate
99
client side
events.
These
events occur before submitting of an insert and edit forms and allow you to detect
errors on the client side before the form is submitted to the server to avoid the
round trip of information necessary for server-side validation.
Default value
This option allows you to set the expected value of an input field with string templates
77 . You can use such environment variables as %CURRENT_DATETIME%, %
CURRENT_DATE%, %CURRENT_TIME%, %CURRENT_USER_ID%, and %
CURRENT_USER_NAME%.
4.1.1.3.1 Text
Select this control to create a single-line input field for entering text.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
Customizing webpages
49
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Max length
Use this field to restrict the number of symbols of the value that can be entered.
Placeholder
Use this field to set a short hint that describes the expected value of an input field (e.g.
a sample value or a short description of the expected format). The placeholder is
displayed in the input field before the user enters a value.
Use Prefix and Suffix to create prepended and appended inputs allowing for simple
punctuation or units to be paired with an input. For example, if you need to indicate a
field is asking for money, use the prepend with a $ sign. Other examples include @ with
a username (a la Twitter.com's settings pages) and "+1" for phone number inputs.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
HTML filter
Use it to strip unwanted HTML tags and attributes from user input. By default all tags
and attributes are stripped out, so you have to define allowed items explicitly.
50
Settings on the screenshot above are to allow the <a> tag (optionally with the href
attribute as well as the <strong> and <h1> tags. All other tags and attributes will be
removed from the user input.
4.1.1.3.2 Radio group
Select this control to let the visitor select one option from a set of alternatives. If more
options are to be allowed at the same time you should use check boxes 62 instead.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Values
You can specify values to be represented as radio group values instead of stored ones.
For this purpose use the dialog opened by the ellipsis button, or add them manually as
pairs allowed_value=value_to_be_represented separated by commas (Example: 1=One,
2=Two).
Display mode
Use the drop-down list to select whether the radio group will be represented on the
same column (Stacked) or on the same line (Inline).
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
2016 SQL Maestro Group
Customizing webpages
51
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Value
Use this field to fill the combobox with more convenient values instead of stored ones.
For this purpose use the Value list window or enter them manually as pairs
allowed_value=value_to_be_represented separated by commas (Example: 1=One,
2=Two).
Most frequently used values
Use the ellipsis button next to this field to specify combobox values to be always
2016 SQL Maestro Group
52
Customizing webpages
53
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Select this control to create a combination of a single-line editable textbox and a dropdown list filtered according to values entered in the textbox. It is recommended to use
this editor type as lookup editor to work with a big number of records.
54
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Allow clear
Turn it ON to allow end users to clear the selected value using special button.
Minimum input length
Use this option to specify minimal amount of symbols to start the search (useful for large
lookup datasets where short search terms are not very useful).
Item caption template
This option allows you to populate the combobox with values of several columns. For
this purpose, specify a template 77 to be used for each item in the list.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Formatting functions
Use these functions to format search results and the selection. For example, it is
possible to use fonts, colors, images, and so on. All you need is to specify two functions
in JavaScript each of which accepts the current item as a parameter and returns the
HTML code to represent search results and the selected item accordingly. In the
example below search results are displayed in italic and the selected item is displayed in
bold.
formatResult function:
Customizing webpages
55
formatSelection function:
return '<b>' + item.text + '</b>';
Select this control to create cascading combo boxes to get greater control over data
input, and to make things easier for the user. Multi-level autocomplete editor is a series
of 2 or more combo boxes in which each combo box is filtered according to the previous
combo box. The number of levels is not limited.
Note: regardless of the number of levels the result of the multi-level editor is only a
single value.
The picture below demonstrates two-level and three-level autocomplete editors. On the
first figure, the City combo box is populated on the fly with city names that correspond
to the currently selected country from the Country combo box. On the second figure, to
specify an address a user needs to select a country, then select a city from a combo
box populated with names of cities located in the selected country, and after that he
can select an address from the list of addresses related to the currently selected city.
To create cascading combo boxes with any number of levels, use the same technique as
described below.
Database schema requirements
2016 SQL Maestro Group
56
To create an N-level autocomplete editor you need to have N+1 tables: the source table
for the generated webpage and N tables each of them refers to the primary key in the
previous table. The foreign key constraints are not required but highly recommended to
enforce the referential integrity at the database level.
The picture above demonstrates a two-level editor represented on an Address webpage
and allowing to specify a city using a list of countries. To create this control we used
three tables: Country, City, and Address. Address is the source table for the webpage.
The Address table refers to the primary key of the City table and City refers to the
primary key of Country.
Levels
Use this tab to select tables to be used for additional combo boxes, specify captions for
these combo boxes, and columns which data will be displayed in the drop-down lists.
Place tables in the reverse order of logical priority. In the example of three-levels editor
we used Country, City, Address, and Customer tables. Customer is the source table for
the generated webpage. Pay attention that the data entry order would be Country, City
and then Address; which by data hierarchy standards is backwards. So we need to add
Address first, then specify City and after that Country.
Example
Let's consider how to implement a three-level editor. Suppose we have the following
tables:
Customizing webpages
57
1. Open the editor of the page based on the Customer table, select the Address_id
column, and specify its lookup properties 31 . If you have a foreign key relationship and
the Setup lookup by foreign key 210 option is enabled, these properties are set
automatically.
2. Select Multi-level autocomplete editor as edit control and click the ellipsis button to
2016 SQL Maestro Group
58
3. As we've written above, the tables for additional combo boxes are placed in the
reverse order of logical priority. The data entry order would be Country, City and then
Address, so we need to add Address first, then specify City and after that Country. To
add a new level for the control, click Add level and specify options of the Add filter
dialog as follows:
Customizing webpages
59
60
Click OK in the Edit properties window to save all settings and return to the Page Editor.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Allow clear
Turn it ON to allow end users to clear the selected value using special button.
Minimum input length
Use this option to specify minimal amount of symbols to start the search (useful for large
lookup datasets where short search terms are not very useful).
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
Customizing webpages
61
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Formatting functions
Use these functions to format search results and the selection. For example, it is
possible to use fonts, colors, images, and so on. All you need is to specify two functions
in JavaScript each of which accepts the current item as a parameter and returns the
HTML code to represent search results and the selected item accordingly. Formatting
functions can be specified at the level basis. The screenshot below is from our demo
application:
Select this control to let the user to make a binary choice. This type of editor is
automatically selected for boolean and bit(1) columns.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
62
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Select this control to provide the user with the ability to select multiple items.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Values
You can specify another values to be represented as checkbox group values instead of
stored in the column. For this purpose use the dialog opened by the ellipsis button, or
add them manually as pairs allowed_value=value_to_be_represented separated by
commas (Example: 1=One, 2=Two).
Display mode
Use the drop-down list to select whether the check box group will be represented on the
same column (Stacked) or on the same line (Inline).
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Customizing webpages
63
Select this control to provide the user with the ability to select multiple items. It
provides the same functionality as Checkbox Group 63 (i.e. allows you to select several
options for a single field) but looks much different and requires less space in the forms.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Values
You can specify another values to be represented as checkbox group values instead of
stored in the column. For this purpose use the dialog opened by the ellipsis button, or
add them manually as pairs allowed_value=value_to_be_represented separated by
commas (Example: 1=One, 2=Two).
Maximum selection size
The "Maximum selection size" property allows you to restrict number of items that can
be selected simultaneously.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
4.1.1.3.9 DateTime
Select this control to let the user to enter date time values with datepicker, a
combination of an interactive calendar and a single-line editable textbox.
64
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
By default, the format of the column's data is the same as it is set at the Project
options 210 . To use another Date time format, uncheck the Default format option and
select it from the corresponding field to setup a format to be applied to the input value.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
4.1.1.3.10 Time
Select this control to let the user to enter time values in a single-line editable textbox
provided by a spinner helping to quickly change the editor's value as well as to reset its
value to the current time.
Customizing webpages
65
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Select this control to create a single-line input field allowing users to edit numeric values
with ease. The editor consists of an edit region and one pairs of spin buttons which can
be used to adjust the numerical value.
66
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Step specifies the legal number intervals for the input field. When an end-user presses a
spin button, the value is incremented or decremented by this amount. The default value
is 1.
To limit end-user input to a specified range, turn ON the Use constraints option and
define the editor's minimum and maximum allowed values.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
The range input (so-called slider) is useful for imprecise number input. It is possible to
indicate the allowed range of values in the appropriate dialog window (default values are
0 and 100 for bottom and top limits accordingly).
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Step specifies the legal number intervals for the input field. When an end-user presses a
spin button, the value is incremented or decremented by this amount. The default value
is 1.
To limit end-user input to a specified range, turn ON the Use constraints option and
define the editor's minimum and maximum allowed values.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
2016 SQL Maestro Group
Customizing webpages
67
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Use this control to edit values of columns storing HTML color codes with a nativebrowser Color Picker (it is assumed that a string data type is used for storing such
values in the database).
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
68
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Use this control to define an edit box that limits the user to a specific format (dates,
phone numbers, etc) and accepts only valid characters.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Mask
A mask is defined by a format made up
character not in the definitions list below is
automatically entered for the user as they
the user. The following mask definitions are
In this case the created data entry field accepts only numeric input and if a user then
tries to enter a letter in this edit box, the application will not accept it.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
Customizing webpages
69
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Use this control to provide the Edit form with a multi-line text input control. A text area
can hold an unlimited number of characters, and the text renders in a fixed-width font
(usually Courier).
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
The size of a text area can be specified by the Column count and Row count values.
Placeholder
Use this field to set a short hint that describes the expected value of an input field (e.g.
a sample value or a short description of the expected format). The placeholder is
displayed in the input field before the user enters a value.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
70
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
HTML filter
Use it to strip unwanted HTML tags and attributes from user input. By default all tags
and attributes are stripped out, so you have to define allowed items explicitly.
Settings on the screenshot above are to allow the <a> tag (optionally with the href
attribute as well as the <strong> and <h1> tags. All other tags and attributes will be
removed from the user input.
4.1.1.3.16 Html Wysiwyg
Select WYSIWYG (What You See Is What You Get) editor to provide users with an
ability to directly manipulate the layout of a HTML data stored in the column, without
having to type or remember names of layout commands.
Customizing webpages
71
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
72
HTML filter
Use it to strip unwanted HTML tags and attributes from user input. By default all tags
and attributes are stripped out, so you have to define allowed items explicitly.
Settings on the screenshot above are to allow the <a> tag (optionally with the href
attribute as well as the <strong> and <h1> tags. All other tags and attributes will be
removed from the user input.
4.1.1.3.17 Password
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Use this control to allow users to upload binary files to the database.
Customizing webpages
73
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Use file size limitation
To restrict the size of uploaded files, check this option and specify the maximum allowed
file size in kilobytes.
You can save the type, name and size of uploaded files to table columns (optional).
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
41
yellow;
, Image
40
74
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Use file size limitation
To restrict the size of uploaded files, check this option and specify the maximum allowed
file size in kilobytes.
You can save the type, name and size of uploaded files to table columns (optional).
Use image size limitation
To restrict the size of uploaded images, check this option and specify the maximum
allowed image width and height.
Uploaded images resizing
To upload resized images, check the Resize image option, select Resize type (Fit by
width, Fit by height) and specify the
height or width correspondingly.
Example
To allow uploading images which size is not greater than 200Kb, width is not greater
than 600px and height is not greater than 400px and to save the original file names to
the file_name column, specify the Edit properties as follows:
Customizing webpages
75
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
40
yellow;
, File download
41
Use this control to allow users to upload external files 43 . The control appearance do not
differ from the control 72 for uploading files to the database.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Folder to upload
76
Use this field to specify the folder to be used to store the uploaded files.
Check the Generate random file name option to save uploaded files with random
names or specify the File name template 77 to be used for file name generation.
Replace file if exists
This option allows you to set whether the uploaded file will be saved or ignored in case a
file with the same name already exists in the folder to upload.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
red;
background-color:
yellow;
Use this control to allow users to upload external images 43 . The control appearance do
not differ from the control 73 for uploading files to the database.
Max width
Use this property to restrict the maximum width of the editor (this means that in any
screen resolution editor's width will be less or equal then the property value). Can be
2016 SQL Maestro Group
Customizing webpages
77
specified in any units supported by web browsers e.g. 300px, 25em, 50%, etc.
Folder to upload
Use this field to specify the folder to be used to store the uploaded files.
Check the Generate random file name option to save uploaded files with random
names or specify the File name template 77 to be used for file name generation.
Replace file if exists
This option allows you to set whether the uploaded file will be saved or ignored in case a
file with the same name already exists in the folder to upload.
Enable the Generate thumbnail option to save reduced-size versions of the uploaded
files along with these files. By default thumbnails are saved in the same folder where full
size images are saved. The names of thumbnails are 'field name'_'uploaded_file_name'.
You can also specify another Folder to upload and File name template.
To set the size of thumbnails, select Resize type (Fit by width, Fit by height) and
specify the height or width correspondingly.
Custom attributes
This property allows you to add simple metadata to individual elements, largely for the
purpose of providing information to make JavaScript functions easier. Such attributes
can be later handled in client-side events. For example, to add several custom attributes
to an editor, enter the following string into the Custom attributes edit box:
data-city="Boston"
data-lang="js"
data-food="Bacon"
It is recommended to prefix all custom attributes with data- to keep the result document
compatible with the HTML5 requirements.
Inline styles
Use this field to set formatting options to be used inside the <style> tag of the element.
For example, to set the font color and the background color for a control, place the
following string to Inline styles:
color:
4.1.2
red;
background-color:
yellow;
String templates
String templates are used by PHP Generator for MySQL on setting HREF templates, hints,
etc. The strings may contain column names enclosed by %.
Examples:
1. Suppose a table 'team' stores various info about NBA teams. The table has 'caption'
column with such data:
maverics
cavaliers
To create links to the team home pages:
http://www.nba.com/maverics/
http://www.nba.com/cavaliers/
set the HREF template
78
http://www.nba.com/%caption%/
2. Suppose there is a table 'employee' storing employee info. The table has 'first_name'
and 'last_name' columns with such data:
Forest Gump
Sara Connor
To add such hints to their photos on the generated webpage:
Forest Gump Photo
Sara Connor Photo
Specify the hint template:
%first_name% %last_name% Photo
4.1.3
Master-Detail Presentations
Master-detail presentations allow you to navigate a webpage based on a specific table,
and at the same time for each selected record (master record) see the associated
records from other related tables (details). So, browsing the page representing product
information, you can see all the orders corresponding to the necessary products;
working with list of countries - to inspect cities of specific countries as on the picture
below.
You can also create nested master-detail presentations when you can see the "details
of details". On the picture below the webpage with a list of countries is represented, for
any country all the corresponding cities may be browsed with one click and at the same
time it's possible to see all addresses of customers living in specific cities.
Customizing webpages
79
To add a master-detail relation within PHP Generator for MySQL means to provide each
record of the result webpage with an ability to browse all records associated with this
record on a separate Details page as well as with an ability to view the 20 first such
records on the result page directly. To open the corresponding Details page, follow the
full view link.
Database schema requirements
To create a two-level master-detail presentation, you need to have two tables with a
parent-child relationship. The foreign key constraints are not required but highly
recommended to enforce the referential integrity at the database level.
Realization
There are two ways to provide the result webpage with a master-detail presentation:
The tables are tables linked with a foreign key. In case the Setup details by foreign
key 210 option is enabled, the detail relation will be set automatically.
80
The foreign key constraint between theses tables haven't been defined.
1. Open the Page Editor for the page based on the master table and go to the Details
tab.
2. Click the Add... item of the tab's popup menu.
Customizing webpages
81
3. Set the relation properties to the child table: select this table as Detail data source,
and specify the columns with similar data as Master field (select from the list of parent
table columns) and Detail field (select from the list of child table columns).
82
4. After the fields are completed use the Add button and then click OK.
To specify the details appearance, use the Edit... item of the corresponding popup menu
and set options in a usual way 29 .
To create a nested master-detail presentation, use the same technique as described
above (the case the foreign key constraint is not defined).
4.1.4
Events
PHP Generator for MySQL allows you to supply the generated applications with an
additional functionality with the help of event handlers. Event handlers are fragments of
PHP/Javascript code executed at the appointed time. This feature provides you with
wide opportunities: for example, you can equip webpages with tracking of user activity,
completely redesign any created page, supply the application with the power of thirdpart libraries, etc.
All evens supported by PHP Generator for MySQL may be divided by the scope the
events are fired on (possible options are all generated webpages (global events) or a
certain webpage (page-specific events)); and by the side the event handlers are
executed on: the webserver (written on PHP) or browsers (written on Javascript).
Server-side application-level (global) events
Server-side page-level events
Client-side page-level events
83
105
97
Customizing webpages
83
29
144
84
85
OnGetCustomTemplate
86
OnCustomHTMLHeader
85
OnBeforeUpdateRecord
OnBeforeInsertRecord
92
OnBeforeDeleteRecord
OnAfterUpdateRecord
OnAfterInsertRecord
OnAfterDeleteRecord
OnGetFieldValue
92
93
94
93
95
96
OnGetCustomExportOptions
96
To specify a handler for a global event, open the Events tab of the Project options
144
84
4.1.4.1.1 OnBeforePageExecute
This event occurs before other events are declared and allow to create global objects,
declare functions, and include third-party libraries. This helps you to define a snapshot
of PHP code that will be included into all the pages.
Signature:
function
OnBeforePageExecute()
Example:
In our Schema Browser demo project all the code implementing database filter,
formatting and highlighting SQL code we entered in the schema_browser_utlis.php file.
The following code is used to include it to into all application web pages.
include_once
'schema_browser_utils.php';
Customizing webpages
85
4.1.4.1.2 OnAfterLogin
This event occurs after a user is successfully logged in into the application.
Signature:
function
OnAfterLogin
($userName,
$connection)
Parameters:
$userName
$connection
201
Example:
Let's show how to use this event for tracking the user activity. The code snippet below
inserts a new record containing user name and the connection time into the 'log' table.
$connection->ExecSQL("INSERT INTO log(user_name,
VALUES ('$userName', CURRENT_TIMESTAMP)");
log_date)
4.1.4.1.3 OnCustomHTMLHeader
This event occurs when generating the HEAD section of the page. It allows you to
define the contents of the HEAD section (like meta tags or favicon) for all pages of the
generated website.
Signature:
function
OnCustomHTMLHeader
($page,
&$customHTMLHeaderText)
Parameters:
$page
$customHtmlHeaderText
199
declared in
Example:
To add a new title and a favicon to all webpages of the generated application, place the
following code to the event body.
$customHtmlHeaderText
$customHtmlHeaderText
$customHtmlHeaderText
$customHtmlHeaderText
$customHtmlHeaderText
$customHtmlHeaderText
$customHtmlHeaderText
86
4.1.4.1.4 OnGetCustomTemplate
This event occurs on opening a custom template and allows to use a custom template
instead of the default one.
Signature:
function
OnGetCustomTemplate
($part,
$mode,
&$result,
&$params)
Parameters:
$part
$mode
$result
$params
PHP Generator creates a set of templates written on Smarty 2.0 to be used by the
prepared application in the certain situations. The basic principles of custom template
usage are shown in this article. To change any webpage look, you need to:
specify a new template to be used for this webpage;
set PHP Generator to use this template for the selected webpage.
The simplest way to create a new template is to modify an existing one (it's much easier
than create a new template "from scratch"). Use the table below to select the template
corresponding to the necessary state of page and page part. Custom template files
should be uploaded to the 'components/templates/custom_templates' directory. This
folder should be created by the user of PHP Generator and its content is not changing
during the further PHP Generator sessions.
State of
the
webpage
Page Part
Default template
page_list.tpl
All Pages
navigation bar
Parameters
PagePart::PageList
Any PageMode
Customizing webpages
common/layout.tpl
PagePart::Layout
Any PageMode
list/grid.tpl
PagePart::Grid
PageMode::ViewAll
list/single_row.tpl
PagePart::GridRow
PageMode::ViewAll
view/grid.tpl
PagePart::RecordCard
PageMode::View
edit/grid.tpl
PagePart::VerticalGrid
PageMode::Edit
insert/grid.tpl
PagePart::VerticalGrid
PageMode::Insert
view/record_card_view.
tpl
PagePart::VerticalGrid
PageMode::ModalView
edit/vertical_grid.tpl
PagePart::VerticalGrid
PageMode::ModalEdit
insert/vertical_grid.tpl
PagePart::Grid
PageMode::ModalInsert
print/page.tpl
PagePart::PrintLayout
PageMode::PrintAll
print/grid.tpl
PagePart::Grid
PageMode::PrintAll
print/detail_page.tpl
PagePart::PrintLayout
PageMode::PrintDetailPage
data grid
export/pdf_grid.tpl, export/
excel_grid.tpl, export/
csv_grid.tpl, etc
PagePart::Grid
PageMode::ExportPdf,
PageMode::ExportExcel,
PageMode::ExportCsv,
etc
view form
export/pdf_record.tpl,
export/excel_record.tpl,
export/csv_record.tpl, etc
PagePart::RecordCard
PageMode::ExportPdf,
PageMode::ExportExcel,
PageMode::ExportCsv,
etc
webpage
layout
table grid
List page
single row
View form
Edit form
Insert form
table grid
detail page
Export
87
88
webpage
layout
View print
view/print_page.tpl
PagePart::PrintLayout
PageMode::PrintOneRecord
view/print_grid.tpl
PagePart::Grid
PageMode::PrintOneRecord
login_page.tpl
PagePart::LoginPage
login_control.tpl
PagePart::LoginControl
table grid
Login page
Login control
To instruct PHP Generator to use a customized template file for a certain webpage,
specify the following code in the page's OnGetCustomTemplate event handler (of course
you should replace YourPart and YourMode to the appropriate values from the table
above).
if ($part == YourPart && $mode == YourMode) {
$result = 'your_template_file.tpl';
}
Example 1:
Suppose we need to use components/templates/custom_templates/staff_edit.tpl file as
a template for the edit form of a webpage.
if ($part == PagePart::VerticalGrid && $mode == PageMode::Edit) {
$result = 'staff_edit.tpl';
}
Now we can compare the result webpages without using this event and with the enabled
one:
Customizing webpages
89
Example 2:
One event can include several templates to be applied to different state and page parts
of the selected webpage. The following code is used in our online demo:
if ($part ==
$result =
if ($part ==
$result =
if ($part ==
$result =
Example 3
This example shows how to fill a SELECT input with names of all MySQL databases
available at the server.
1. Specify the OnGetCustomTemplate event handler as follows:
// set the template file
if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {
$result = 'custom_grid.tpl';
90
//
DATABASES',
//
//
$queryResult);
Example 4
This example shows the use of the superglobal $_GET array values in a custom template.
1. Specify the OnGetCustomTemplate event handler as follows:
if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {
$result = 'custom_grid.tpl';
// check if the parameter custom_var available
if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
}
Customizing webpages
91
Example 4
Let's see the login form customization used in our online demo.
1. Specify the OnGetCustomTemplate event handler as follows:
if ($part == PagePart::LoginPage) {
$result = 'login_page.tpl';
}
Example 5
The example below is used in our demo application to customize the template used to
export a single record to PDF.
if ($part == PagePart::RecordCard && $mode == PageMode::ExportPdf) {
$result = 'game_pdf.tpl';
2016 SQL Maestro Group
92
This event occurs when the Insert command is executed, and before the actual
insertion.
Signature:
function OnBeforeInsertRecord ($page, &$rowData,
&$messageDisplayTime,
$tableName)
&$cancel,
&$message,
Parameters:
$page
$rowData
$cancel
$message
$messageDisplayTime
$tableName
199
Example:
if
(!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
125
, OnBeforeDeleteRecord
125
, OnAfterInsertRecord
122
4.1.4.1.6 OnBeforeUpdateRecord
This event occurs when the Update command is executed, and before the actual
update.
Signature:
function OnBeforeUpdateRecord ($page, &$rowData,
&$messageDisplayTime,
$tableName)
&$cancel,
&$message,
Parameters:
$page
$rowData
$cancel
199
Customizing webpages
$message
$messageDisplayTime
$tableName
93
Example:
if
(!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
125
, OnBeforeInsertRecord
124
, OnAfterUpdateRecord
122
4.1.4.1.7 OnBeforeDeleteRecord
This event occurs when the Delete command is executed, and before the actual
deletion.
Signature:
function OnBeforeDeleteRecord ($page, &$rowData,
&$messageDisplayTime,
$tableName)
&$cancel,
&$message,
Parameters:
$page
$rowData
$cancel
$message
$messageDisplayTime
$tableName
199
Example:
if
(!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
125
, OnBeforeInsertRecord
124
, OnAfterDeleteRecord
123
4.1.4.1.8 OnAfterInsertRecord
This event occurs when the Insert command is executed, and after the actual insertion.
Signature:
function
OnAfterInsertRecord
($page,
$rowData,
$tableName,
94
&$success,
&$message,
&$messageDisplayTime)
Parameters:
$page
$rowData
$tableName
$success
$message
$messageDisplay
Time
199
class.
Success messages are displayed in green while error messages are displayed in red.
Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}
122
, OnAfterDeleteRecord
123
, OnBeforeInsertRecord
124
4.1.4.1.9 OnAfterUpdateRecord
This event occurs when the Update command is executed, and after the actual update.
Signature:
function OnAfterUpdateRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)
Parameters:
$page
$rowData
$tableName
$success
$message
199
class.
Customizing webpages
$messageDisplay
Time
95
Success messages are displayed in green while error messages are displayed in red.
Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}
123
, OnAfterInsertRecord
122
, OnBeforeUpdateRecord
125
4.1.4.1.10 OnAfterDeleteRecord
This event occurs when the Delete command is executed, and after the actual deletion.
Signature:
function OnAfterDeleteRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)
Parameters:
$page
$rowData
$tableName
$success
$message
$messageDisplay
Time
199
class.
Success messages are displayed in green while error messages are displayed in red.
Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}
96
122
, OnAfterInsertRecord
122
, OnBeforeDeleteRecord
125
4.1.4.1.11 OnGetFieldValue
This event occurs on displaying a value of a field. It allows you to replace the actual
value of a field to your own.
Signature:
function
OnGetFieldValue
($fieldName,
&$value,
$tableName)
Parameters:
$fieldName
$value
$tableName
Example
This example shows how this event can be used for implementing a very simple
transparent encryption based on the str_rot13 PHP function.
if ($fieldName == 'private_data') {
$value = str_rot13($value);
}
Since the call of this function for an encrypted expression returns the original string, we
can define OnBeforeInsertRecord 124 and OnBeforeUpdateRecord 125 event handlers as
follows:
$rowData['private_data']
str_rot13($rowData['private_data']);
This is just an example. We would recommend that you use more cryptographically
strong algorithms to encrypt your important data.
4.1.4.1.12 OnGetCustomExportOptions
This event fires on exporting data from a database to a file. It allows you to customize
some advanced export settings.
Signature:
function
OnGetCustomExportOptions
($Page
page,
$exportType,
$rowData,
&$options)
Parameters:
$page
$exportType
The type of the result file. Possible values are "csv", "xls", "doc",
"pdf", "xml".
$rowData
$options
199
class.
Customizing webpages
97
Export to PDF
orientation
Export to Excel
engine
Example
This example shows how to customize the result file name according to row values. If a
record list is exported, the file name is set to list.pdf (list.xml, list.xls, etc).
$options['filename'] = ($rowData ? $rowData['id'] : 'list') . '.' . $exportType;
4.1.4.2
97
98
OnInsertFormValidate
OnEditFormValidate
98
99
OnInsertFormEditorValueChanged
OnEditFormEditorValueChanged
OnInsertFormLoaded
OnEditFormLoaded
99
101
103
104
105
4.1.4.2.1 OnBeforePageLoad
This event occurs before page loading. It allows you to declare functions and global
variables. Use the event to include one or several files of a third-party library into the
generated pages.
Example:
To get the details of the first master record expanded on opening of a certain page of
the generated application, define the expandFirstDetail function within the
OnBeforePageLoad event handler as follows:
function expandFirstDetail() {
if ($('table.pgui-grid').data('grid-class')){
var grid = $('table.pgui-grid').data('grid-class');
var $row =
$('table.pgui-grid tr.pg-row').first();
2016 SQL Maestro Group
98
grid.expandDetails($row);
return true;
}
else {
setTimeout(expandFirstDetail, 100);
}
}
98
event handler.
4.1.4.2.2 OnAfterPageLoad
This event occurs after page has been fully rendered. It does not get triggered until all
assets such as images have been completely received and DOM hierarchy has been fully
constructed.
Example:
To get details of the first record expanded on the webpage opening, specify Javascript
code as follows:
$('a.expand-details').on("click", function()
setTimeout(highlightWinLossRows, 3000);
});
It is also possible to specify the function above within the OnBeforePageLoad 97 event
handler. In this case the OnAfterPageload event handler should contain only the function
call:
expandFirstDetail();
4.1.4.2.3 OnInsertFormValidate
This event occurs before submitting of an insert form. It allows you to detect errors on
the client side before the form is submitted to the server to avoid the round trip of
information necessary for server-side validation.
Signature:
function
OnInsertFormValidate
(fieldValues,
errorInfo)
Parameters:
fieldValues
errorInfo
Example 1:
The code below demonstrates the verification of the percent number on the record
inserting.
if (fieldValues['percents'] < 0 || fieldValues['percents'] > 100)
{
errorInfo.SetMessage('Percent value should be between 0 and 100.');
return false;
}
Example 2:
The following code is used in the NBA demo project to ensure that home and away
2016 SQL Maestro Group
Customizing webpages
99
(fieldValues['home_team_id']
==
fieldValues['away_team_id'])
99
4.1.4.2.4 OnEditFormValidate
This event occurs before submitting an edit form. It allows you to detect errors on the
client before the form is submitted to the server to avoid the round trip of information
necessary for server-side validation.
Signature:
function
OnEditFormValidate
(fieldValues,
errorInfo)
Parameters:
fieldValues
errorInfo
Example 1:
To validate the 'percents' value and show a warning message in case of erroneous input,
use the following code:
if (fieldValues['percents'] < 0 || fieldValues['percents'] > 100)
{
errorInfo.SetMessage('Percent value should be between 0 and 100.');
return false;
}
Example 2:
The following code is used in the NBA demo project to ensure that home and away
teams are different for an edited game:
if
{
(fieldValues['home_team_id']
==
fieldValues['away_team_id'])
98
4.1.4.2.5 OnInsertFormEditorValueChanged
OnInsertFormEditorValueChanged
(sender,
editors)
Parameters:
sender
100
editors
The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 99 and OnEditFormEditorValueChanged
handlers.
101
event
Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.
console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue()
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();
==
1);
Customizing webpages
101
Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).
if
{
(sender.getFieldName()
==
'current_team_id')
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}
101
4.1.4.2.6 OnEditFormEditorValueChanged
OnEditFormEditorValueChanged(sender,
editor)
Parameters:
sender
editors
The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 99 and OnEditFormEditorValueChanged
handlers.
101
event
Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.
console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue()
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
==
1);
102
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();
Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).
if
{
(sender.getFieldName()
==
'current_team_id')
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
Customizing webpages
103
}
}
99
4.1.4.2.7 OnInsertFormLoaded
OnInsertFormLoaded(editor)
Parameters:
editors
Example:
This piece of code targets two things:
1) Player number is cleared and the appropriate control becomes disabled for players
that do not belong to a team.
if
{
(editors['current_team_id'].getValue()
==
'')
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
}
else
editors['current_number'].enabled(true);
2) Player's college is cleared and the appropriate control becomes disabled if player's
country is not USA (country code == 1). The inline hint describes the reason of the
disabling.
editors['college_id'].enabled(editors['country_id'].getValue()
==
1);
addInlineHint('college_id', 'College can be selected only for players from USA.')
if (editors['country_id'].getValue() != 1)
editors['college_id'].setValue(null);
104
104
4.1.4.2.8 OnEditFormLoaded
OnEditFormLoaded(editor)
Parameters:
editors
Example:
This piece of code targets two things:
1) Player number is cleared and the appropriate control becomes disabled for players
that do not belong to a team.
if
(editors['current_team_id'].getValue() == '') {
editors['current_number'].setValue('');
editors['current_number'].setEnabled(false);
}
else {
editors['current_number'].setEnabled(true);
}
2) Player's college is cleared and the appropriate control becomes disabled if player's
country is not USA (country code == 1).
editors['college_id'].setEnabled(editors['country_id'].getValue()
==
1);
Customizing webpages
if
(editors['country_id'].getValue() != 1)
editors['college_id'].setValue(null);
105
103
106
OnCustomRenderColumn
107
OnCustomRenderPrintColumn
110
OnCustomRenderExportColumn
OnCustomHTMLHeader
110
OnExtendedCustomDrawRow
OnCustomRenderTotals
114
OnGetCustomTemplate
115
OnCustomDrawRow
121
OnAfterUpdateRecord
OnAfterDeleteRecord
OnAfterInsertRecord
122
123
122
OnBeforeUpdateRecord
OnBeforeDeleteRecord
2016 SQL Maestro Group
125
125
111
110
106
OnBeforeInsertRecord
OnGetFieldValue
124
126
OnGetCustomExportOptions
126
Using variables
PHP Generator for MySQL supports some environment variables (such as
CURRENT_USER_ID, CURRENT_USER_NAME, UNIQUE_ID) in events. To obtain a complete
list of supported variables, turn ON the "Show environment variables" option in the
Project options dialog, re-generate the code and then open any of produced web pages
in the browser. The following example demonstrates how to use variables within the
OnBeforeInsertRecord 124 event handler.
$rowData['ip_address']
=
$this->GetEnvVar('REMOTE_ADDR');
$userName
=
$this->GetEnvVar('CURRENT_USER_NAME');
if ($userName != 'admin')
$rowData['changed_by'] = $userName;
97
4.1.4.3.1 OnBeforePageExecute
This event handler contains PHP code to be included at the begin of generated pages.
This code is executed only once and intended to create global objects, declare
functions, include third-party libraries, and so on.
Example:
Suppose we decided to implement a syntax highlighting using the GeSHi library
somewhere in the generated application. To implement such a feature, we need (among
other things) to include the main library file into the generated scripts, so the event
handler should be specified as follows:
include_once
'../geshi/geshi.php';
4.1.4.3.2 OnPreparePage
This piece of code is a method of the Page class that is called at the end of the
constructor. It allows you to customize all members of the class, for example, add an
additional filter to the dataset.
Example:
The following code is used in our Schema Browser demo project to filter database
objects belonging to the selected database:
applyDatasetFilter($this->dataset);
Customizing webpages
107
$value = $globalConnectionOptions['database'];
}
if (!StringUtils::IsNullOrEmpty($value)) {
$dataset->AddFieldFilter('Database_name', new FieldFilter($value, '='));
setcookie('database', $value);
}
}
4.1.4.3.3 OnCustomRenderColumn
This event occurs before column rendering and allows you to completely replace the cell
content. It is an extremely useful event for conditional rendering or embedding thirdparty components to extend standard functionality.
Signature:
function OnCustomRenderColumn
&$customText, &$handled)
($fieldName,
$fieldData,
$rowData,
Parameters:
$fieldName
$fieldData
$rowData
$customText
$handled
Example 1:
Suppose a table 'employee' has a column storing data about the employee's sex in that
way that '1' corresponds to male and '2' to female. Our goal is to represent the
employees sex as 'M' and 'F' for men and women accordingly. To do so, you could
specify the OnCustomRenderColumn event handler as follows:
if ($fieldName == 'sex') {
$customText = $rowData['sex'] == 1 ? 'M' : 'F';
$handled = true;
}
Example 2:
The code below is used in our demo project to show the number of overtime periods
played in the game.
if ($fieldName == 'overtime_count') {
if ($fieldData > 0)
$customText = $fieldData . ' OT';
else
$customText = '-';
$handled = true;
}
The screenshot demonstrates the result of this event fired on the Games webpage.
108
Example 3:
The code below is used in our demo project to add flag images to the "Country" column.
if
{
($fieldName
==
'current_team_id')
if (!isset($fieldData))
{
$customText = 'Free agent';
$handled = true;
}
}
elseif ($fieldName == 'country_id')
{
$countriesPics = array (
1 => 'us',
2 => 'fr',
3 => 'br',
4 => 'it',
6 => 'sp',
8 => 'ar',
11 => 'li',
15 => 'ru',
18 => 'gr',
20 => 'ge'
);
$customText =
'<div style="width: 80px; text-align: left;">' .
'<img src="countries/'.$countriesPics[$rowData['country_id']].'.png">' .
' ' . $fieldData .
'</div>';
$handled = true;
}
Customizing webpages
109
Example 4
This example demonstrates the applying of the syntax highlighting provided by the Geshi
library. We use this library to highlight SQL syntax in strings stored in the 'Body' column.
if ($fieldName == 'Body') {
$source = $rowData['Body'];
$language = 'sql';
$formatted_sql = SqlFormatter::format($source, false);
$geshi = new GeSHi($formatted_sql, $language);
$customText = '<div align="left">'.$geshi->parse_code().'</div>';
$handled = true;
}
110
110
, OnCustomRenderExportColumn
110
4.1.4.3.4 OnCustomRenderPrintColumn
This event occurs before column rendering on the print page and allows you to replace
cell content. It is an extremely useful for conditional rendering or embedding third-party
components to extend standard functionality.
Signature:
function OnCustomRenderPrintColumn
&$customText, &$handled)
($fieldName,
$fieldData,
$rowData,
Parameters:
$fieldName
$fieldData
$rowData
$customText
$handled
107
, OnCustomRenderExportColumn
110
4.1.4.3.5 OnCustomRenderExportColumn
This event occurs before column rendering into Word, Excel, etc. and allows you to
replace cell content. It is an extremely useful event for conditional rendering.
Signature:
function OnCustomRenderExportColumn
&$customText, &$handled)
($fieldName,
$fieldData,
$rowData,
Parameters:
$fieldName
$fieldData
$rowData
$customText
$handled
107
, OnCustomRenderPrintColumn
110
4.1.4.3.6 OnCustomHTMLHeader
This event occurs when the head section of the page is generating. Use it to provide
additional information for the HEAD section of the page (such as keywords, author, or
description).
Signature:
function
OnCustomHTMLHeader
($page,
&$customHtmlHeaderText)
Customizing webpages
111
Parameters:
$page
$customHtmlHeaderText
Example:
The following code demonstrates how to use this event to add metadata to the
generated webpage.
$customHtmlHeaderText
'<meta
name="copyright"
content="SQL
Maestro
Group"/>';
4.1.4.3.7 OnExtendedCustomDrawRow
This event occurs when rendering a grid row and allows you to change the row and/or
cell styles directly. It is an extremely useful event for conditional formatting such as
changing font color, font styles, row background color, cell background color, etc. The
specified styles are applied to <tr> and <td> tags accordingly.
Signature:
function OnExtendedCustomDrawRow ($rowData,
&$rowClasses, &$cellClasses)
&$rowCellStyles,
&$rowStyles,
Parameters:
$rowData
$rowCellStyles
$rowStyles
$rowClasses
$cellClasses
This event (as well as OnCustomDrawRow 121 ) is used for conditional formatting. The
only difference between these two events is that OnCustomDrawRow has a more
understandable parameter list while OnExtendedCustomDrawRow provides more flexible
abilities.
Example 1:
The code below is used in our online demo to display the winning team and the losing
team scores according to the current theme.
if
}
else {
$cellClasses['home_team_score'] = 'loss-score';
$cellClasses['away_team_score'] = 'win-score';
}
The 'win-score' and 'loss-score' classes are defined in User-defined styles as follows:
112
.base-score {
font-size: 1.4em;
font-weight: bold;
}
.win-score {
&:extend(.base-score);
color: @brand-danger;
}
.loss-score {
&:extend(.base-score);
}
The screenshot below demonstrates the result of the event fired on the Game list
webpage in Cyborg Bootswatch theme for Bootstrap.
The next one shows the result of the event fired on this webpage in Facebook
Bootswatch theme.
Example 2
The code below is used in our online demo to highlight fields representing player's height
depending on the value.
$height = $rowData['height'];
if ($height > 200)
$cellClass = 'tall';
elseif ($height > 185)
Customizing webpages
113
$cellClass = 'medium-height';
else
$cellClass = 'undersized';
$cellClasses ['height'] = $cellClass;
The 'undersized', 'medium-height', and 'tall' classes are defined in User Defined Styles as
follows:
@height-color:
@state-warning-bg;
.undersized {
background-color:
}
lighten(@height-color,
.medium-height {
background-color:
}
@height-color;
.tall {
background-color:
}
darken(@height-color,
10%);
10%);
The screenshot below demonstrates the result of the event fired on the Game list
webpage in Journal Bootswatch theme for Bootstrap.
The next one shows the result of the event fired on this webpage in Superhero
Bootswatch theme.
114
4.1.4.3.8 OnCustomRenderTotals
This event occurs before total values rendering and allows you to replace the default
total footer content. To use it, enable the grid footer in the View properties 36 of the
corresponding column.
Signature:
function OnCustomRenderTotals
&$customText, &$handled)
($totalValue,
$aggregate,
$columnName,
Parameters:
$totalValue
$aggregate
$columnName
$customText
$handled
Example 1:
The code below changes the caption of the 'amount' column footer and gives it strong
importance.
if ($columnName == 'amount')
{
$customText = '<strong>Total: $' . $totalValue . '</strong>';
$handled = true;
}
This picture demonstrates the difference between a webpage generated with default
footer and a webpage with the OnCuStomRenderTotals event specified in this way:
Customizing webpages
115
Example 2:
The code below is used in our online demo on the 'Teams' page to display the year of
foundation of the oldest team on the page in more convenient form.
if ($columnName == 'year_founded') {
$customText = 'MIN: ' . intval(str_replace(',', '', $totalValue));
$handled = true;
}
4.1.4.3.9 OnGetCustomTemplate
This event occurs on opening a custom template and allows to use a custom template
instead of the default one.
Signature:
function
OnGetCustomTemplate
($part,
$mode,
&$result,
&$params)
Parameters:
$part
$mode
$result
$params
PHP Generator creates a set of templates written on Smarty 2.0 to be used by the
prepared application in the certain situations. The basic principles of custom template
usage are shown in this article. To change any webpage look, you need to:
specify a new template to be used for this webpage;
116
set PHP Generator to use this template for the selected webpage.
The simplest way to create a new template is to modify an existing one (it's much easier
than create a new template "from scratch"). Use the table below to select the template
corresponding to the necessary state of page and page part. Custom template files
should be uploaded to the 'components/templates/custom_templates' directory. This
folder should be created by the user of PHP Generator and its content is not changing
during the further PHP Generator sessions.
State of
the
webpage
Page Part
Default template
page_list.tpl
PagePart::PageList
Any PageMode
common/layout.tpl
PagePart::Layout
Any PageMode
list/grid.tpl
PagePart::Grid
PageMode::ViewAll
list/single_row.tpl
PagePart::GridRow
PageMode::ViewAll
view/grid.tpl
PagePart::RecordCard
PageMode::View
edit/grid.tpl
PagePart::VerticalGrid
PageMode::Edit
insert/grid.tpl
PagePart::VerticalGrid
PageMode::Insert
view/record_card_view.
tpl
PagePart::VerticalGrid
PageMode::ModalView
edit/vertical_grid.tpl
PagePart::VerticalGrid
PageMode::ModalEdit
insert/vertical_grid.tpl
PagePart::Grid
PageMode::ModalInsert
print/page.tpl
PagePart::PrintLayout
PageMode::PrintAll
navigation bar
All Pages
webpage
layout
table grid
List page
single row
View form
Edit form
Insert form
webpage
layout
Parameters
Customizing webpages
print/grid.tpl
PagePart::Grid
PageMode::PrintAll
print/detail_page.tpl
PagePart::PrintLayout
PageMode::PrintDetailPage
data grid
export/pdf_grid.tpl, export/
excel_grid.tpl, export/
csv_grid.tpl, etc
PagePart::Grid
PageMode::ExportPdf,
PageMode::ExportExcel,
PageMode::ExportCsv,
etc
view form
export/pdf_record.tpl,
export/excel_record.tpl,
export/csv_record.tpl, etc
PagePart::RecordCard
PageMode::ExportPdf,
PageMode::ExportExcel,
PageMode::ExportCsv,
etc
view/print_page.tpl
PagePart::PrintLayout
PageMode::PrintOneRecord
view/print_grid.tpl
PagePart::Grid
PageMode::PrintOneRecord
login_page.tpl
PagePart::LoginPage
login_control.tpl
PagePart::LoginControl
table grid
detail page
Export
webpage
layout
View print
table grid
117
Login page
Login control
To instruct PHP Generator to use a customized template file for a certain webpage,
specify the following code in the page's OnGetCustomTemplate event handler (of course
you should replace YourPart and YourMode to the appropriate values from the table
above).
if ($part == YourPart && $mode == YourMode) {
$result = 'your_template_file.tpl';
}
Example 1:
Suppose we need to use components/templates/custom_templates/staff_edit.tpl file as
a template for the edit form of a webpage.
if ($part == PagePart::VerticalGrid && $mode == PageMode::Edit) {
$result = 'staff_edit.tpl';
}
Now we can compare the result webpages without using this event and with the enabled
one:
118
Example 2:
One event can include several templates to be applied to different state and page parts
of the selected webpage. The following code is used in our online demo:
if ($part ==
$result =
if ($part ==
$result =
if ($part ==
$result =
Example 3
This example shows how to fill a SELECT input with names of all MySQL databases
available at the server.
1. Specify the OnGetCustomTemplate event handler as follows:
// set the template file
if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {
$result = 'custom_grid.tpl';
Customizing webpages
//
DATABASES',
//
//
119
$queryResult);
Example 4
This example shows the use of the superglobal $_GET array values in a custom template.
1. Specify the OnGetCustomTemplate event handler as follows:
if ($part == PagePart::Grid && $mode == PageMode::ViewAll) {
$result = 'custom_grid.tpl';
// check if the parameter custom_var available
if (GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
}
120
Example 4
Let's see the login form customization used in our online demo.
1. Specify the OnGetCustomTemplate event handler as follows:
if ($part == PagePart::LoginPage) {
$result = 'login_page.tpl';
}
Example 5
The example below is used in our demo application to customize the template used to
export a single record to PDF.
if ($part == PagePart::RecordCard && $mode == PageMode::ExportPdf) {
$result = 'game_pdf.tpl';
2016 SQL Maestro Group
Customizing webpages
121
This event occurs on rendering a grid row. It is an extremely useful event for conditional
formatting such as changing font color, font styles, row background color, cell
background color, etc. This event (as well as the OnExtendedCustomDrawRow 111 one) is
used for conditional formatting. The only difference between these two events is that
OnCustomDrawRow
has
a
more
understandable
parameter
list
while
OnExtendedCustomDrawRow provides more flexible abilities.
Signature:
function OnCustomDrawRow ($rowData, &$cellFontColor,
&$cellItalicAttr, &$cellBoldAttr)
&$cellFontSize,
&$cellBgColor,
Parameters:
$rowData
$cellFontColor
$cellFontSize
$cellBgColor
$cellItalicAttr
$cellBoldAttr
NB. Array keys should contain the real column names in the data source (table, view, or
query). Don't use the column's caption instead!
Example 1:
Suppose we need to create a webpage with list of customers with addresses
represented in cursive. This column in the data source is named 'address_id' and the
column's caption is "Address".
true;
Example 2:
In the example below we need to display winning team score in red and losing team
2016 SQL Maestro Group
122
score in black; moreover, both scores should be in bold and displayed by a 16pt font.
$cellFontSize['home_team_score']
$cellBoldAttr['home_team_score']
=
=
'16pt';
true;
$cellFontSize['away_team_score']
$cellBoldAttr['away_team_score']
=
=
'16pt';
true;
if
This event occurs when the Insert command is executed, and after the actual insertion.
Signature:
function OnAfterInsertRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)
Parameters:
$page
$rowData
$tableName
$success
$message
$messageDisplay
Time
199
class.
Success messages are displayed in green while error messages are displayed in red.
Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}
122
, OnAfterDeleteRecord
123
, OnBeforeInsertRecord
124
4.1.4.3.12 OnAfterUpdateRecord
This event occurs when the Update command is executed, and after the actual update.
Customizing webpages
123
Signature:
function OnAfterUpdateRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)
Parameters:
$page
$rowData
$tableName
$success
$message
$messageDisplay
Time
199
class.
Success messages are displayed in green while error messages are displayed in red.
Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}
123
, OnAfterInsertRecord
122
, OnBeforeUpdateRecord
125
4.1.4.3.13 OnAfterDeleteRecord
This event occurs when the Delete command is executed, and after the actual deletion.
Signature:
function OnAfterDeleteRecord ($page, $rowData, $tableName,
&$success, &$message, &$messageDisplayTime)
Parameters:
$page
$rowData
$tableName
$success
$message
199
class.
124
Success messages are displayed in green while error messages are displayed in red.
Example
if ($success) {
$message = 'Record processed successfully.';
}
else {
$message = '<p>Something wrong happened. ' .
'<a class="alert-link" href="mailto:[email protected]">' .
'Contact developers</a> for more info.</p>';
}
122
, OnAfterInsertRecord
122
, OnBeforeDeleteRecord
125
4.1.4.3.14 OnBeforeInsertRecord
This event occurs when the Insert command is executed, and before the actual
insertion.
Signature:
function OnBeforeInsertRecord ($page, &$rowData,
&$messageDisplayTime,
$tableName)
&$cancel,
&$message,
Parameters:
$page
$rowData
$cancel
$message
$messageDisplayTime
$tableName
199
Example:
if
(!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
125
, OnBeforeDeleteRecord
125
, OnAfterInsertRecord
122
Customizing webpages
125
4.1.4.3.15 OnBeforeUpdateRecord
This event occurs when the Update command is executed, and before the actual
update.
Signature:
function OnBeforeUpdateRecord ($page, &$rowData,
&$messageDisplayTime,
$tableName)
&$cancel,
&$message,
Parameters:
$page
$rowData
$cancel
$message
$messageDisplayTime
$tableName
199
Example:
if
(!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
125
, OnBeforeInsertRecord
124
, OnAfterUpdateRecord
122
4.1.4.3.16 OnBeforeDeleteRecord
This event occurs when the Delete command is executed, and before the actual
deletion.
Signature:
function OnBeforeDeleteRecord ($page, &$rowData,
&$messageDisplayTime,
$tableName)
&$cancel,
&$message,
Parameters:
$page
$rowData
$cancel
$message
$messageDisplayTime
199
126
Example:
if
(!(allowDataEditing())) {
$cancel = true;
$message = 'The application is running in read-only mode.';
125
, OnBeforeInsertRecord
124
, OnAfterDeleteRecord
123
4.1.4.3.17 OnGetFieldValue
This event occurs on displaying a value of a field. It allows you to replace the actual
value of a field to your own.
Signature:
function
OnGetFieldValue
($fieldName,
&$value,
$tableName)
Parameters:
$fieldName
$value
$tableName
Example
This example shows how this event can be used for implementing a very simple
transparent encryption based on the str_rot13 PHP function.
if ($fieldName == 'private_data') {
$value = str_rot13($value);
}
Since the call of this function for an encrypted expression returns the original string, we
can define OnBeforeInsertRecord 124 and OnBeforeUpdateRecord 125 event handlers as
follows:
$rowData['private_data']
str_rot13($rowData['private_data']);
This is just an example. We would recommend that you use more cryptographically
strong algorithms to encrypt your important data.
4.1.4.3.18 OnGetCustomExportOptions
This event fires on exporting data from a database to a file. It allows you to customize
some advanced export settings.
Signature:
function
OnGetCustomExportOptions
($Page
page,
$exportType,
$rowData,
&$options)
Parameters:
$page
$exportType
The type of the result file. Possible values are "csv", "xls", "doc",
199
class.
Customizing webpages
127
"pdf", "xml".
$rowData
$options
Export to PDF
orientation
Export to Excel
engine
Example
This example shows how to customize the result file name according to row values. If a
record list is exported, the file name is set to list.pdf (list.xml, list.xls, etc).
$options['filename'] = ($rowData ? $rowData['id'] : 'list') . '.' . $exportType;
4.1.5
Filter
To reduce the number of records available at the page, specify the Filter condition. This
condition corresponds to the WHERE clause of the query returned page data (you must
not add the WHERE keyword to beginning of the condition).
Example 1
There is a table with test questions of a Web programming course. To display only
questions
of
the 'Beginner'
level
(level_id
=
2)
concerning
to
PHP
(statement_language_id = 1), set the filter condition as follows:
128
Example 2
You can use subqueries in the filter expression. For example, to display the list of
channels that hosted even if a single game, specify the Filter condition as follows:
(channel.id > 0) AND channel.id IN
(
SELECT game.channel_id
FROM game
)
4.1.6
Charts
PHP Generator for MySQL allows you to visualize data on your website with feature-rich,
responsive, customizable, and interactive charts.
Key facts
1. Charts are based on the Google chart library.
2. Column, Bar, Pie, Line, and Area charts are currently supported.
3. Charts can be placed in rows above the data grid or below the grid.
4. Each row can contain any number of charts.
5. Common properties for each chart can be set up directly in the software interface.
6. All other properties provided by the library can be customized with the OnPrepareChart
event.
7. Charts are sensitive to the data grid i.e. if you apply a filter to the grid, charts will
change accordingly.
Creating and editing charts
To add a new chart to a webpage or edit an existing one:
open the webpage editor
29
Customizing webpages
130
129
129
and advanced
130
Data Query
This query returns data to be used by the chart. The retrieved data must contain
exactly one column to specify labels along the major axis of the chart (domain column)
and one or more columns to specify series data to render in the chart (data columns).
To allow a chart to be sensitive to grid data, refer to the chart's parent page query
using the %source% placeholder.
Example 1
Assume we have the following table:
CREATE TABLE usd_exchange_rate (
id
int NOT NULL,
exchange_date
date,
eur_rate
decimal(10,4),
gbp_rate
decimal(10,4),
chf_rate
decimal(10,4),
cad_rate
decimal(10,4),
aud_rate
decimal(10,4),
/* Keys */
PRIMARY KEY (id)
);
Our goal is to create a chart that displays the USD course. As data are already grouped,
our query is very simple:
%source%
Then we should specify the exchange_rate column as domain column and all *_rate
columns as data columns.
Example 2
Suppose we have two tables department and employee defined as follows:
CREATE TABLE department (
id
int NOT NULL,
name
varchar(100) NOT NULL,
/* Keys */
PRIMARY KEY (id)
);
CREATE TABLE employee (
id
int NOT NULL,
full_name
varchar(100) NOT NULL,
department_id
int NOT NULL,
salary
int NOT NULL,
/* Keys */
PRIMARY KEY (id),
/* Foreign keys */
CONSTRAINT fk_emp_department
FOREIGN KEY (department_id)
REFERENCES department(id)
);
130
Our goal is to create a chart representing the total salary by departments on the
Department webpage. The following query returns the appropriate data:
SELECT
d.name as dep_name,
SUM(e.salary) AS total_salary
FROM
(%source%) d
INNER JOIN employee e ON (e.department_id = d.id)
GROUP BY
d.name
order by 2 desc
Then we should specify dep_name as the domain column and total_salary as a data
column.
4.1.6.2
Common options
The second step of the chart editor allows you to specify common options of the chart.
Other settings can be specified in the OnPrepareChart 130 event handler.
Id
The unique identifier of the chart. Corresponds to the value of the id attribute of the
web element. Can contain letters, numbers, underscore, and hyphens.
Title
The chart title (to be displayed above the chart).
Type
The type for your chart. Allowed values are Column, Bar, Pie, Line, and Area.
Position (Above, Below)
Select whether the chart is placed above or below the data grid.
Height
The height of the chart in pixels.
Width
The width of the chart in columns (from 1 to 12).
Visible
Allows to (temporarily) hide/show the chart.
Domain column
The column that specifies labels along the major axis of the chart. The Format property
is suitable for date and number columns and should be specified as a pattern (for
example, #,###,### or MMM d, yyyy).
Data columns
One or more columns to specify series data to render in the chart.
4.1.6.3
Advanced options
The previous topic 130 learns how to setup common options of a chart. This topic
explains how to customize the chart according to your needs.
2016 SQL Maestro Group
Customizing webpages
131
The key idea is that you can setup absolutely all the options that are available in the
Google chart library. All you need is to study the reference from Google and write a few
lines of PHP code to set property values.
The function that is invoked for each chart on the page is defined as follows:
Signature:
function
OnPrepareChart(Chart
$chart)
Parameters:
$chart
getId()
setOptions($array)
Example 1:
To set the value of the property propName, use the following syntax:
$chart->setOptions(array(
'propName' => 'Value',
));
To set the value of the property objectName.propName, use the following syntax:
$chart->setOptions(array(
'objectName' =>
array('propName' => 'value'),
));
Operating in the same way you can set any property provided by the library.
Example 2:
The following code is used in our demo application to customize the chart on the Players
page:
if
Example 3:
The following code is used in our demo application to customize charts on the Teams>Home games and Teams->Away games pages:
$options = array(
'colors' => array('#9ECC3C', '#CC3C3C'),
'titleTextStyle' => array('fontSize' => 14),
);
if ($chart->getId() === 'overall-win-loss') {
$chart->setOptions(array_merge($options, array(
2016 SQL Maestro Group
132
'chartArea' => array('width' => '70%', 'height' => '70%', 'top' => '18%'),
'legend' => 'none',
)));
} else if ($chart->getId() === 'win-loss-by-month') {
$chart->setOptions(array_merge($options, array(
'vAxis' => array('format' => '0'),
)));
}
4.1.7
Page Properties
The Page Properties window allows you to define general properties of the generated
page. All properties are grouped in several tabs.
Common
RSS
136
Abilities
133
144
To invoke the window, use the corresponding button of Page Editor 29 or select the
necessary page in the list of pages to be generated and click the Properties button on
the right side.
By default, all properties are set in accordance with the project options 144 . To change
the situation, check off the Use default options box at the top of the tab and enter the
new value in the corresponding field.
Customizing webpages
4.1.7.1
133
Common properties
Title
The title of the page.
Menu label
The text to be displayed in menus
View form title template, Edit form title template, Insert form title
The titles of View, Edit, and Insert forms accordingly. For View and Edit forms it is
possible to use field name tags in the title template, so you can easily change default
"Players" to a more user-friendly "Edit Tim Duncan profile".
File name
The name of generated .php file.If the file name extension is not specified, it will be as
defined in the application output options 211 .
Page header
The text to be displayed at the top of the page.
Detailed description
This property allows you to add a description to your page. In case the description is
specified, the generated webpage is equipped with a button with a question mark in it
on the right side of the title bar of the page. The button opens a modal window with the
specified description. HTML tags are allowed.
134
Customizing webpages
135
Meaning
The 'font-size' of the relevant font.
(pixels) Relative to the viewing device.
(inches) 1 inch is equal to 2.54 centimeters.
Centimeters
Millimeters
136
pt
pc
(points) The points used by CSS 2.1 are equal to 1/72nd of an inch.
(picas) 1 pica is equal to 12 points.
4.1.7.2
RSS options
With PHP Generator for MySQL you can create full-fledged RSS feeds based on MySQL
tables. To create an RSS document, open the Page Properties dialog and complete the
Use RSS options group.
Check the Use RSS box first and specify the following options:
Channel title
Defines the title of the channel.
Channel link
Defines the hyperlink to the channel.
Channel description
Describes the channel.
Item title template 77
Defines the title of the item.
Item link template 77
Defines the hyperlink to the item.
Item description template
Describes the item.
77
Customizing webpages
137
138
4.1.7.3
Abilities
The Inline Insert/Inline Edit features allow a user to add/edit the content of the
generated page quickly without having to switch modes or screens. All work is done on
the same interface which helps the user maintain context.
To enable the inline inserting/editing on a webpage:
Make sure that the Insert/Edit ability is set as Inline mode at the Page properties
132
Project Options
144
value, uncheck the Use default options box and select the necessary values from
the drop-down list.
4.1.8
Data Partitioning
The Data Partitioning wizard allows you to create a custom pagination i.e. split the
records on the generated page by a specified criteria.
Select the type of data partitioning on the first wizard step:
Range partitioning
Selects a partition by determining if the partitioning expression value is inside a
certain range.
List partitioning
A partition is assigned a list of values. If the partitioning expression value has one
of these values, the partition is chosen. For example, all rows where the column
'Country' is either Iceland, Norway, Sweden, Finland or Denmark could build a
partition for the 'Nordic countries'.
Customizing webpages
139
Custom partitioning
Create your own partitioning with fill partitions and build conditions functions.
To create a pagination by the film length, select Range partitioning at the first wizard
step, choose 'length' as partition expression and set the partitioning ranges as follows:
140
Customizing webpages
141
To get around such a situation, select Custom partitioning and define functions as
follows:
function
GetPartitions($partitions)
{
$tmp = array();
$this->GetConnection()->ExecQueryToArray("
SELECT DISTINCT
left(c.last_name, 1) as first_letter
FROM customer c
ORDER BY first_letter", $tmp
);
foreach($tmp as $letter) {
$partitions[$letter['first_letter']] = $letter['first_letter'];
}
}
function
GetPartitionCondition($partitionKey,
&$condition)
{
$condition = "left(last_name, 1) = '$partitionKey'";
}
142
4.1.9
Data Validation
Data validation is intended to provide certain guarantees for accuracy and consistency
for any of various kinds of user input. PHP Generator for MySQL allows you to check for
correctness of input data on the client side and on the server side as well.
Client-side data validation
This type of data validation refers to validation performed on the client side. That is, it's
performed on the client's, also known as the user's, computer. This type of validation
checks the input information before it gets to the server. It has following advantages:
Reducing the amount of traffic to and from your web server since the data
doesn't have to travel to the server before it gets checked (server-side data
validation). If an error is found in the data in the server-side validation, the error
must travel back to the user, who then corrects the problem and resubmits the
data. This back-and-forth traveling can eat up precious bandwidth.
Saving processing time on the server by ensuring that data is clean and clear
before it gets to your database.
Giving immediate feedback to your users since the processing is performed in their
browsers. The user doesn't have to wait for the data to travel to the server to
be checked and a response to be sent. They know immediately whether they
need to tweak the information they have entered.
PHP Generator for MySQL allows you to implement the client-side data validation on two
levels: when a user leaves a certain control and when a user submits a form.
To enable validation of data entered in a control, specify the appropriate Client
validator
45
Range
Length range
Email
Credit card
Number
URL
Digits
Regular
expression
Customizing webpages
143
This type of data validation means using PHP to verify that good values have been sent
to the script. Using server-side validation has pretty much the exact opposite pros and
cons of client-side development: it is more secure, works seamlessly with all browsers,
and allows to use session variables, but it does so at the cost of slightly higher server
load and slower feedback for users.
OnBeforeUpdateRecord 125
OnBeforeInsertRecord 124
144
4.2
Project Options
PHP Generator for MySQL allows you to specify default settings to be applied to each
generated webpage. By default, most of these options have the same values as the
application options 205 . To open this dialog window, follow the Setup project options to
configure default page settings link at the Customizing webpages 26 wizard step
All settings are grouped into several tabs:
Page
The Page tab allows to modify the appearance of webpages, specify the script abilities
such as data formats available for data export, data view mode, data edit mode, data
insert mode and also delete, search and filter abilities. By default these settings are set
in accordance with the Application options 205 .
Display formats
These tab fields allow to adjust the display data formats in the way you need. By
default these settings are set in accordance with the Application options 205 .
Shared options 145
This tab allows you to specify options that are applied for a whole website (i.e. shared
between all pages).
Events
You can also specify application-level events
83
Customizing webpages
4.2.1
145
Shared options
This tab allows you to specify options that are applied for a whole website (i.e. shared
between all pages).
Menu mode
Defines the location of the application menu. Possible values are as Top-side dropdown menu (the menu will be displayed on the top of each page), Sidebar menu (the
menu will be displayed on the left of each page), and None (no menu will be displayed
at all).
146
We would recommend you to turn this option ON in the development environment and
turn it OFF in the production environment.
Show environment variables
If checked, the list of the available environment variables will be displayed below the
data grid. These variables can be accessible in server-side event handlers via the
GetEnvVar 199 method of the Page 199 class.
Disable magic quotes_runtime option
Defines whether the magic quotes_runtime PHP option will be enabled or disabled. Please
note that this options was removed as of PHP 5.4.
PHP options (ini_set)
This allows you to customizing PHP configuration options during the application runtime.
These options are represented as calls of the ini_set function in the phpgen_settings.
php file.
Webpages appearance
147
Webpages appearance
PHP Generator for MySQL allows you to setup the appearance of created webpages in
several ways:
Built-in color schemes 150
The simplest way to adjust the look and feel of the result application is to select
one of color schemes the software comes with.
148
Webpages appearance
149
Events 82
Events are pieces of code that are run when an action is taken by the user. Such
events
as
OnBeforePageExecute 106 ,
OnCustomRenderColumn 107 ,
and
OnCustomDrawRow 121 can be used to change the webpage appearance. Please
find some examples of using these and other events in our demo application and in
the Resources section at the product home page. Use the User Javascript 154
window to define JavaScript functions that are called from several event handlers.
Using templates 155
While all the previously described methods allow you to define colors, fonts, text
alignments, and other display attributes of generated webpages, this one helps
you to redesign the webpages entirely i.e. define what controls are displayed on a
specific form, where they are displayed, and what they display.
150
5.1
Color schemes
The color scheme of created application contains the information on basic style
definitions for all key HTML components: fonts, colors, backgrounds, borders, and
others. PHP Generator for MySQL comes with a number of built-in color schemes. To
use one of them, select the appropriate item from the "Color scheme" drop-down list.
To change default scheme settings according to your needs, click the Customize color
scheme button and modify the necessary variables within the opened window. To learn
more about the LESS syntax used in this window, please refer to the LESS manual.
The Preview window displays current appearance settings applied to a sample webpage.
Webpages appearance
5.2
151
Example: To add the header like one on the screen above, paste the following text in
the Header edit box:
<span
class="navbar-brand">
<span>
<img src="mysql_logo.png" style="height: 44px; margin-top: -14px;">
</span>
</span>
<span class="navbar-brand">
<span class="hidden-xs"><strong>MySQL Schema Browser</strong></span>
</span>
152
5.3
User-defined styles
The ability to use custom styles allows you to set up such parameters of web pages as
size of controls, text alignment, and more. To define a custom style sheet that will be
applied after all the pre-defined rules, click the "Edit user styles" button and enter the
rules you need manually or load them from a file. Less syntax is allowed.
To determine a selector to apply the styles for, use any available inspect HTML tools
such as default Firefox developer tools, Firebug, Chrome developer tools, Internet
Explorer developer tools, and so on. Among other things these tools allows you to view
the current element's attributes and applied styles and experiment with new ones.
Example 1
The code below is used in our online demo to display the winning team and the losing
team scores according to the current theme. The 'win-score' and 'loss-score' classes are
defined as follows:
.base-score {
font-size: 1.4em;
font-weight: bold;
}
.win-score {
&:extend(.base-score);
color: @brand-danger;
}
.loss-score {
&:extend(.base-score);
}
}
else {
$cellClasses['home_team_score'] = 'loss-score';
$cellClasses['away_team_score'] = 'win-score';
}
The screenshot below displays the Game list page in the Cyborg theme:
Webpages appearance
The next one shows the same page in the Facebook theme:
Example 2
To limit maximum width of Date and DateTime pickers in all Edit and Insert forms by
300 pixels, use the following rule:
div.pgui-date-time-edit
max-width: 300px;
}
153
154
5.4
User JavaScript
The ability to use custom JS allows you to specify JavaScript code that will be included
into all the generated pages. This is the optimal place to define, for example, JavaScript
functions that are called from several event handlers (in order to avoid duplicate code).
Example
Suppose we want to fill the content
'sex'
on
Insert
and
Edit
OnInsertFormEditorValueChanged 99
same code, but it's easier to define
in these event handlers.
User Javascript:
function fillRelatedTitles(sender, editors)
{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}
(sender.getFieldName()
==
fillRelatedTitles(sender,
'sex')
editors);
Webpages appearance
5.5
155
Using templates
Applications created by PHP Generator for MySQL use Smarty, a typical representative
of the web template engines family. So in order to redesign a webpage, you need to
change the appropriate template. All templates used by the software are stored in the
components/templates subfolder of the output directory. Each folder in this catalog
contains template files to be used by the application in different cases: on editing,
printing, inserting, etc.
Using custom templates
To change the webpage appearance with custom templates, follow these steps:
Create a new template. Custom templates must be stored under the components/
templates/custom_templates folder which contents is not changing on re-generation
of the scripts. You must create this folder manually.
Instruct PHP Generator to use this template for the selected webpage with the
OnGetCustomTemplate event.
156
Security settings
157
Security settings
Check the Enable security option to supply the generated application with a login page
to request user name and password when someone attempts to access your script. PHP
Generator for MySQL provides you with the following authorization types:
Hard-coded authorization 159
Select this option to incorporate the authorization procedure directly into the PHP
code of the generated application.
Table-based authorization 161
Select this option to authorize a user of the web application by a login/password
combination stored in a database table.
Database server authorization 163
Select this option to accomplish the authorization by MySQL server.
User-defined authorization 164
Select this option to use custom function to check user identity.
See also: User permissions
165
, Record-level security
168
158
Security settings
6.1
159
Hard-coded authorization
To set the hard-coded authorization, fill in the Administrator login and Administrator
password fields and add as many additional users as you need. Check the Enable guest
access option to allow an anonymous user to access the generated app without
completing the authentication procedure.
Note: To allow guest access, specify also the corresponding guest's permissions
165
Turn Enable MD5 password encryption 'ON' to store user passwords encrypted with the
MD5 algorithm.
To add an application user, open the Hard-coded authorization window with the Edit
additional users button and open the User editor by the corresponding button or the
corresponding link at the tab's popup menu.
160
Enter the user name and password, and check the necessary options to grant the
corresponding permissions to the user.
To learn how to specify permissions of the created users, see the User permissions
section.
165
Security settings
6.2
161
Table-based authorization
Setting a table-based authorization means to allow user access to the generated scripts
according to grants stored in a MySQL table. The user login information is stored in a
MySQL table too. The tables may be prepared earlier or created within PHP Generator.
On using such type of authorization end-users can change their passwords themselves.
The appropriate button is located in the top right corner of the window.
Now the table is ready to use. You can enter the login info using any available MySQL
management tool, such as MySQL Maestro.
2016 SQL Maestro Group
162
The checked Enable guest access option allows users those names are not stored in the
table to work with generated script.
By default all users of result application have SELECT, UPDATE, INSERT, and DELETE
permissions. You can restrict their permissions with the Permissions manager 165 .
To allow the record-level security
168
Security settings
6.3
163
164
6.4
User-defined authorization
This kind of authorization allows you to define your own custom authentication. This
feature requires you to define your own function that takes entered username and
password and returns true or false depending on their validity. This means you can use
any possible storage for user credentials and any encryption algorithm you like.
Example:
To check that the password is equal to the user name and password contains 5 or more
symbols, place the following code to the body of the CheckUserIdentity function. This
condition means that the 'John/John' pair will be declined by websever, but 'Michael/
Michael' combination will be valid.
if ($username == $password)
$result = strlen($password) >= 5;
else
$result = false;
Security settings
6.5
165
Permission manager
Permission manager allows you to restrict user access to the generated application. To
open the window, press the Manage permissions... button. This is not applicable for the
database server authorization, in that case the grants should be set with the server
facilities.
Hard-coded authorization
All the permission information is stored in the prepared script and, to modify user grants,
you need to repeat the generation process. Use the checkboxes at the Permissions tab
to grant ADMIN, SELECT, UPDATE, INSERT, and DELETE permissions to the generated
application to users specified at the Hard-coded authorization window 159 . The ADMIN
permission means that the user can accomplish all available operations and none
restrictions including record-level security are not applied for him. To set permission on a
specified table, use the Customize page level permission... button.
166
Table-based authorization
All the information about user permission may be stored in the prepared script (as in the
case above), but it is recommended to store the info in a MySQL table. You can use for
this purpose an existing table or create a new one. In case you store user permission in
a table, you can manage them via administration panel and need not to regenerate PHP
scripts. One thing you need to note is that at least one user must have the ADMIN
permission in order to the administration panel will be generated.
Security settings
167
168
6.6
Record-level security
Use the Record level permissions window to let each user access only to his own data.
The feature is available for table-based and hard-coded authorization types. To
implement the row level security to a webpage based on a table or a view,
specify this column as the Owner field name and set the necessary permissions
for the record owner and for other users. In case of table-based authorization a
record will be displayed on the page if the owner field is equal to the ID of logged
used. If hard-coded authorization has been used the owner field means the name
of specified user
159
Interface language
169
Interface language
By default a web application created with PHP Generator for MySQL has English interface
but it can be localized (i.e. translated) for a number of languages. The text strings to be
used in the application's interface are stored in a localization file. To use a specific
language, select the corresponding file on the last wizard step. In case you use the
same file on a regular basis, it is recommended to specify it in the application output
options 211 to enable it by default.
Using prepared localization files
PHP Generator for MySQL comes with a number of localization files that can be found
under the installation folder, usually C:\Program Files\SQL Maestro Group\PHP Generator
for MySQL or C:\Program Files (x86)\SQL Maestro Group\PHP Generator for MySQL if you
have a 64-bit operation system installed on your computer. The table below contains
currently available files and the corresponding interface languages:
lang.br.php
Brazilian
lang.cs.php
Czech
lang.de.php
German
lang.dk.php
Danish
lang.en.php
English
lang.es.php
Spanish
lang.fr.php
French
lang.hu.php
Hungarian
lang.it.php
Italian
lang.nl.php
Dutch
lang.pl.php
Polish
lang.ru.php
Russian
lang.se.php
Swedish
lang.sk.php
Slovak
lang.sl.php
Slovenian
lang.sr.php
Serbian
lang.tr.php
Turkish
These files were sent to us by our customers and we are not responsible for their
quality. If none of these files is right for you, it is possible to customize the localization
as described below. We will be very appreciated if you send us your custom file to be
enjoyed by all the PHP Generator for MySQL users.
Using a custom localization file
If none of supplied files is appropriate for your application, you can create the
localization yourself. For this purpose get a localization file the clearest for you, enter/
170
correct necessary captions with any text editor, and save it in the UTF-8 encoding
(this is very important for the correct displaying of captions in a web browser).
Example
Suppose we need to create a web application in Esperanto. First we need to define the
localization file that is the clearest for us. In our case it is lang.en.php. Let's open the
file with a text editor (we prefer Notepad++), translate all captions to Esperanto, select
the UTF-8 encoding and save it as lang.eo.php (eo is the two-char language code for
Esperanto). All we need to do is select this file at the last wizard step and generate the
application. The result is shown below.
171
151
169
Access driver
There are several PHP drivers to communicate with database servers and PHP Generator
for MySQL allows you to select a driver to be used by the generated web application.
Note that the corresponding set of PHP functions should be available on your web
server. By default the driver is set in accordance with the application output options 211 .
Output directory
Generated files will be created in the output directory stored on your computer. To see
the result of the process, open any prepared .php file with any browser. Note, that to
run PHP code you need to have PHP and Apache installed or to run any portable web
server. To deploy ready web application to the Internet, copy the created directory to
your hosting 20 .
Generation options
To make the repeated generating process more fast, it's recommended to avoid
repeated copying
of
non-changeable
system files
stored in components,
database_engine, images, libs folders. These files must be rewritten only in case they
were generated by the former version of PHP Generator for MySQL.
172
Developer Reference
173
Developer Reference
The following features and technologies allow you to develop applications with PHP
Generator for MySQL.
Client Side API 174
Extends the functionality of Insert and Edit forms of generated web applications.
Server Side API 199
Extends the functionality of the generated application by the possibility to execute
additional queries and use environment variables.
Style files compilation 203
Allows to create websites in several color schemas.
174
9.1
174
Text editor
Text area
183
184
Combobox
184
Radio group
190
Checkbox group
9.1.1
194
All editors
The following operations may be applied to all editors:
getValue
174
setValue
176
getEnabled
178
setEnabled
178
getReadonly
180
setReadonly
180
getVisible
180
setVisible
181
getFieldName
9.1.1.1
181
getValue
Returns a value of a certain control (input, textarea, select, radio button, etc). To set a
control value, use the appropriate function 176 .
Signature:
function
getValue()
The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 99 and OnEditFormEditorValueChanged
handlers.
101
event
Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.
Developer Reference
console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue()
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();
==
175
1);
Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).
if
{
(sender.getFieldName()
==
'current_team_id')
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
176
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}
176
setValue
Sets the value of a certain control. To get a control value, use the appropriate function
174 .
Signature:
function
setValue(value);
The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 99 and OnEditFormEditorValueChanged
handlers.
101
event
Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.
console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue()
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();
==
1);
Developer Reference
177
Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).
if
{
(sender.getFieldName()
==
'current_team_id')
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}
178
174
getEnabled
Returns the value specifying whether the control is enabled.
Signature:
function
getEnabled();
Example:
var
editorState
editors['current_number'].getEnabled();
178
setEnabled
Sets a value specifying whether the control is enabled. True to enable the control; false
to disable it. Disabled input elements in a form will not be submitted.
Signature:
function
setEnabled([true|false])
The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 99 and OnEditFormEditorValueChanged
handlers.
101
event
Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.
console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue()
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();
==
1);
Developer Reference
179
Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).
if
{
(sender.getFieldName()
==
'current_team_id')
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}
180
178
getReadonly
Returns the value specifying whether the control is readonly.
Signature:
function
getReadonly()
Example:
var
editorState
editors['team'].getReadonly();
180
setReadonly
Sets a value specifying whether the control is readonly. A read-only input field cannot
be modified (however, a user can tab to it, highlight it, and copy the text from it). Form
elements with the readonly attribute set will get passed to the form processor.
Signature:
function
setReadonly([true|false])
Example:
editors['team'].setReadonly(true);
180
getVisible
Returns the value specifying whether the control is visible.
Developer Reference
181
Signature:
function
getVisible()
Example:
var
editorState
editors['team'].getVisible();
181
setVisible
Sets a value specifying whether the control is visible. An invisible element stays in its
original position and size.
Signature:
function
setVisible([true|false])
Example:
editors['team'].setVisible(true);
180
getFieldName
Returns the name of the field in the database the editor corresponds to.
Signature:
function
getFieldName()
The examples below show how this method can be used in the
OnInsertFormEditorValueChanged 99 and OnEditFormEditorValueChanged
handlers.
101
event
Example 1:
The code below allows you to select a college only for players from U.S. (see this in
action). See how it looks on the webpage at the screen below.
console.log(sender);
if (sender.getFieldName() == 'country_id')
{
console.log(sender.getValue());
editors['college_id'].enabled(sender.getValue()
if (sender.getValue() != 1) {
editors['college_id'].setValue(null);
$('#college_id_edit').next().show();
}
else
$('#college_id_edit').next().hide();
==
1);
182
Example 2:
Another example from the insert and edit forms of the Players page (see this in action).
This piece of code allows you to select player number only if a player's team is already
selected (in other words, players who do not belong to a team cannot have numbers).
if
{
(sender.getFieldName()
==
'current_team_id')
if (sender.getValue() == '')
{
editors['current_number'].setValue('');
editors['current_number'].enabled(false);
$('#current_number_edit').next().show();
}
else
{
editors['current_number'].enabled(true);
$('#current_number_edit').next().hide();
}
}
Developer Reference
9.1.2
183
Text editor
The following operations may be applied to one-line input fields:
9.1.2.1
getPlaceholder
183
setPlaceholder
183
getPlaceholder
Returns the value specifying whether the control has a placeholder.
Signature:
function
getPlaceholder()
Example:
var
placeholder
editors['user_name'].getPlaceholder();
183
setPlaceholder
Specifies a short hint that describes the expected value of an input field (e.g. a sample
value or a short description of the expected format). The short hint is displayed in the
input field before the user enters a value.
Signature:
function
setPlaceholder(value)
Example:
To add a placeholder to an Insert form depending of the entered first name, place the
following strings to the OnInsertFormValueChanged.
if
{
(editors['first_name'].getValue()
==
'John')
183
184
9.1.3
Text area
The following operations may be applied to multi-line text input controls:
9.1.3.1
getPlaceholder
184
setPlaceholder
184
getPlaceholder
Returns the value specifying whether the control has a placeholder.
Signature:
function
getPlaceholder()
Example:
var
placeholder
editors['user_name'].getPlaceholder();
183
setPlaceholder
Specifies a short hint that describes the expected value of an input field (e.g. a sample
value or a short description of the expected format). The short hint is displayed in the
input field before the user enters a value.
Signature:
function
setPlaceholder(value)
Example:
To add a placeholder to an Insert form depending of the entered first name, place the
following strings to the OnInsertFormValueChanged.
if
{
(editors['first_name'].getValue()
==
'John')
9.1.4
183
Combobox
The following operations may be used to manipulate comboboxes on a form:
addItem
185
removeItem
187
getItemCount
189
Developer Reference
getCaption
clear
9.1.4.1
185
189
189
addItem
Adds items to a combobox dynamically.
Signature:
function
addItem(value,
caption);
Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 99 and
OnEditFormEditorValueChanged 101 event handlers to change the 'Title' content
depending of the selected 'Sex' value.
function fillRelatedTitles(sender, editors)
{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}
186
Developer Reference
187
, getItemCount
189
, clear
187
189
removeItem
Removes an item from a combobox.
Signature:
function
removeItem(value)
Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 99 and
OnEditFormEditorValueChanged 101 event handlers to change the 'Title' content
depending of the selected 'Sex' value.
function fillRelatedTitles(sender, editors)
{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}
188
Developer Reference
185
, getItemCount
189
, clear
189
189
getItemCount
Returns the number of combobox elements.
Signature:
function
getItemCount()
Example:
The following code populates the item_count variable with the number of combobox
elements.
var
item_count
editors['title'].getItemCount();
185
, removeItem
187
, clear
189
getCaption
Returns the caption of a certain control.
Signature:
function
getCaption()
Let's see the difference between getValue() and getCaption() functions. Assume we we
have a Combobox editor with the following properties:
185
, removeItem
clear
Deletes all elements in a combobox.
Signature:
function
clear()
187
, getItemCount
189
, clear
189
190
Example:
The following code empties the 'title' control.
editors['title'].clear();
9.1.5
185
, removeItem
187
, getItemCount
189
Radio group
The following operations may be applied to groups of radio buttons:
addItem
190
removeItem
191
getItemCount
getCaption
clear
9.1.5.1
193
193
193
addItem
Adds items to a radio group dynamically.
Signature:
function
addItem(value,
caption);
Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 99 and
OnEditFormEditorValueChanged 101 event handlers to change the 'Title' content
depending of the selected 'Sex' value.
function fillRelatedTitles(sender, editors)
{
if (sender.getValue() == 'Male') {
editors['title'].removeItem('Ms','Ms');
editors['title'].removeItem('Mrs','Mrs');
editors['title'].addItem('Mr','Mr');
}
else {
editors['title'].removeItem('Mr');
editors['title'].addItem('Ms','Ms');
editors['title'].addItem('Mrs','Mrs');
}
}
Developer Reference
191
, getItemCount
193
, clear
191
193
removeItem
Removes an item from a radio group.
Signature:
function
removeItem(value)
Example:
This example shows how we can manipulate combobox and radio group items depending
on the 'sex' value. Place the code in the OnInsertFormEditorValueChanged 99 and
OnEditFormEditorValueChanged 101 event handlers to change the 'Title' content
depending of the selected 'Sex' value.
192
Developer Reference
190
, getItemCount
193
, clear
193
193
getItemCount
Returns the number of radio group elements.
Signature:
function
getItemCount()
Example:
The following code populates the item_count variable with the number of combobox
elements.
var
item_count
editors['title'].getItemCount();
190
, removeItem
191
, clear
193
getCaption
Returns the caption of a certain control.
Signature:
function
getCaption()
Let's see the difference between getValue() and getCaption() functions. Assume we we
have a Radio group editor with the following properties:
190
, removeItem
191
, getItemCount
clear
Deletes all elements in a radio group.
Signature:
function
clear()
Example:
The following code empties the 'title' control.
editors['title'].clear();
193
, clear
193
194
9.1.6
190
, removeItem
191
, getItemCount
193
194
removeItem
195
getItemCount
clear
9.1.6.1
196
197
addItem
Adds items to a checkbox group or a multiple select dynamically.
Signature:
function
addItem(value,
caption);
Example:
The
code
below
placed
in
the
OnInsertFormEditorValueChanged 99
and
101
OnEditFormEditorValueChanged
changes the content of the 'Clothes' checkbox group
depending of the selected season.
if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
Developer Reference
195
}
}
195
, getItemCount
196
, clear
197
removeItem
Removes an item from a checkbox group or a multiple select.
Signature:
function
removeItem(value)
Example:
The
code
below
placed
in
the
OnInsertFormEditorValueChanged 99
and
101
OnEditFormEditorValueChanged
changes the content of the 'Clothes' checkbox group
depending of the selected season.
if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
196
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
}
}
194
, getItemCount
196
, clear
197
getItemCount
Returns the number of checkbox group or a multiple select elements.
Signature:
function
getItemCount()
Example:
The
code
below
placed
in
the
OnInsertFormEditorValueChanged 99
and
101
OnEditFormEditorValueChanged
changes the content of the 'Clothes' checkbox group
depending of the selected season.
if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
Developer Reference
197
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
}
}
195
, addItem
194
, clear
197
clear
Deletes all elements in a checkbox group or a multiple select.
Signature:
function
clear()
Example:
The
code
below
placed
in
the
OnInsertFormEditorValueChanged 99
and
101
OnEditFormEditorValueChanged
changes the content of the 'Clothes' checkbox group
depending of the selected season.
if (sender.getFieldName() == 'season')
{
var $item_count = editors['clothes'].getItemCount();
if ($item_count == 6)
{
if (sender.getValue() == 'Winter')
{
editors['clothes'].removeItem('Shorts');
editors['clothes'].removeItem('Sandals');
198
editors['clothes'].removeItem('Swimsuit');
}
else
{
editors['clothes'].removeItem('Coat');
editors['clothes'].removeItem('Boots');
editors['clothes'].removeItem('Cap');
}
}
else
{
editors['clothes'].clear();
if (sender.getValue() == 'Winter')
{
editors['clothes'].addItem('Coat','Coat');
editors['clothes'].addItem('Boots','Boots');
editors['clothes'].addItem('Cap','Cap');
}
else
{
editors['clothes'].addItem('Shorts','Shorts');
editors['clothes'].addItem('Sandals','Sandals');
editors['clothes'].addItem('Swimsuit','Swimsuit');
}
}
}
194
, removeItem
195
, getItemCount
196
Developer Reference
9.2
199
199
Application
200
EngConnection
201
Global functions
9.2.1
202
class Page
The following methods of class Page are available:
GetEnvVar
199
GetConnection
9.2.1.1
199
GetEnvVar
Returns the value of a specified environment variable.
Signature:
function
GetEnvVar($name)
Example:
The following example
demonstrates
OnBeforeInsertRecord 124 event handler.
how
to
use
variables
within
$rowData['ip_address']
=
$this->GetEnvVar('REMOTE_ADDR');
$userName
=
$this->GetEnvVar('CURRENT_USER_NAME');
if ($userName != 'admin')
$rowData['changed_by'] = $userName;
9.2.1.2
GetConnection
Returns the connection object.
Signature:
function
GetConnection()
Example:
To get the list of available databases, use the following code:
$queryResult = array();
$this->GetConnection()->ExecQueryToArray('SHOW
DATABASES',
$queryResult);
the
200
9.2.2
class Application
The following methods of class Application are available:
IsGETValueSet
GetGETValue
200
200
IsPOSTValueSet
GetPOSTValue
9.2.2.1
200
201
IsGETValueSet
Checks if $_GET contains a parameter named paramName. Returns true if such
parameter does exist and false otherwise.
Signature:
function
IsGETValueSet($paramName)
Example:
The code below checks if a $_GET parameter does exist and, if so, assigns its value to a
variable.
// check if the parameter custom_var available
if
(GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
200
GetGETValue
Returns the value of a parameter named paramName from the superglobal $_GET array.
Signature:
function
GetGETValue($name)
Example:
The code below checks if a $_GET parameter does exist and, if so, assigns its value to a
variable.
// check if the parameter custom_var available
if
(GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
200
IsPOSTValueSet
Checks if $_POST contains a parameter named paramName. Returns true if such
parameter does exist and false otherwise.
2016 SQL Maestro Group
Developer Reference
201
Signature:
function
IsPOSTValueSet($paramName)
The code below checks if a $_POST parameter does exist and, if so, assigns its value to
a variable.
// check if the parameter custom_var available
if
(GetApplication()->IsPOSTValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetPOSTValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
201
GetPOSTValue
Returns the value of a parameter named paramName from the superglobal $_POST array.
Signature:
function
GetPOSTValue($name)
The code below checks if a $_POST parameter does exist and, if so, assigns its value to
a variable.
// check if the parameter custom_var available
if
(GetApplication()->IsPOSTValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetPOSTValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
9.2.3
200
class EngConnection
The following methods of class EngConnection are available:
ExecScalarSQL
ExecSQL
201
202
ExecQueryToArray
9.2.3.1
202
ExecScalarSQL
Executes a query returning a single value.
Signature:
function
ExecScalarSQL($sql)
Example:
$one
$this->GetConnection()->ExecScalarSQL('SELECT
1');
202
9.2.3.2
ExecSQL
Executes a query that does not return results.
Signature:
function
ExecSQL($sql)
Example:
$this->GetConnection()->ExecSQL('INSERT
9.2.3.3
INTO
...');
ExecQueryToArray
xecute a query that returns a result set.
Signature:
function
ExecQueryToArray($sql,
&$array)
Example:
$values = array();
$this->GetConnection()->ExecQueryToArray(
'SELECT 1 as a UNION SELECT 2 as a',
$values
);
9.2.4
Global functions
Global functions:
GetApplication
9.2.4.1
202
GetApplication
Returns an Application instance.
Signature:
function
GetApplication()
Example:
To check if the parameter custom_var is available, use the following code:
if
(GetApplication()->IsGETValueSet('custom_var'))
// found
$params['custom_var'] = GetApplication()->GetGETValue('custom_var');
else
// not found. Assign a default value.
$params['custom_var'] = '5 (default)';
Developer Reference
9.3
203
204
10
Options
PHP Generator for MySQL allows you to customize the way it works within the Options
dialog. To open the dialog, use the More button and select Options at the drop-down
list.
The window allows you to customize the options grouped by the following sections:
Application 205
General PHP Generator for MySQL options: generation rules, default page options,
and display data formats.
Editors & Viewers 213
Customizing of all the SQL editors.
Appearance 221
Customizing program interface - bars, trees, menus, etc.
It is a good idea to check through these settings before you start working with PHP
Generator for MySQL. You may be surprised at all the things you can adjust and
configure!
Options
10.1
205
Application
The Application section allows you to customize common rules of PHP Generator for
MySQL behavior. The section consists of several tab; follow the links to find out more
about each of them.
Page
205
Generation defaults
Display formats
Output
210
210
211
10.1.1 Page
All page properties are separated in three groups depending of the pages they will be
used.
206
Common
These options will be used for all generated pages.
Content encoding
The default option value is UTF-8 and you must have really good reasons to change it.
Direction of page
The position and alignment of the Navigation bar are represented according to this option
value.
Modal form size
A preferred size (default, small, or large) for View, Edit, and Insert modal windows.
Hide sidebar menu by default
If checked, the sidebar menu will be closed until a user opens it manually.
List
These options will be used for grids and cards.
2016 SQL Maestro Group
Options
207
Page navigator
Use this options group to define the position of the navigational elements (Page
navigator value) and the number of records represented on the generated page (Records
per page value) by default. This value may be changed by application users in runtime if
the corresponding option 209 is enabled.
The default navigational elements are the numbers of pages. To create a custom
pagination, use Data Partitioning 138 .
View mode
Select whether page data will be displayed in grid or as info cards. The end-user has the
ability to easily switch from grid mode to card mode and vice versa using the Page
Settings dialog (the corresponding option 209 is enabled).
208
Check the Show line numbers option to add row numbering to the grid.
The Disable custom ordering option disallow users to sort data in the grid.
The Edit/Insert options allow you to enable/disable "Set NULL" and "Set Default"
checkboxes on Edit and Insert forms.
10.1.1.1 Export
Use this tab to specify file formats to be available for data export from the generated
application.
Options
209
The screenshot below demonstrates the Export menu of the generated application. In
case a file format is excluded from the export abilities, the corresponding menu line is
hidden.
10.1.1.2 Abilities
This tab allows you to adjust the interaction between generated scripts and application
users. Here you can specify the way data manipulations such as View, Edit, Copy and
Insert to be available for execution on the generated page:
You can also provide the prepared page with an ability to delete rows and multiple
deletion of rows using checkboxes, add quick search to find the specified criteria in the
whole of grid data and filter builder to specify any difficult filter conditions, allow/disallow
to change a webpage view mode in runtime.
210
Options
211
10.1.4 Output
Use this tab to specify default values for project output options
171
PHP Driver
There are several PHP drivers to communicate with database servers and PHP Generator
for MySQL allows you to select a driver to be used by the generated web application.
Note that the corresponding set of PHP functions should be available on your web
server.
Localization file
Use this field to define the interface language to be used for the generated application
by default. Find out more on applications localization at the corresponding page 169 .
You can also set here the output file extension and the default color scheme for the
generated pages.
10.1.5 Confirmations
This tab allows you to disable/enable application confirmations. Check corresponding
options to enable necessary confirmation dialogs such as key column notification, exit
from application confirmation and others.
212
Options
10.2
213
213
214
SQL highlight
215
PHP highlight
217
XML highlight
216
Code Insight
218
Code Folding
219
10.2.1 General
If the Auto indent option is checked, each new indention is the same as the previous
when editing SQL text.
Insert mode
If this option is checked, insert symbols mode is default on.
Use syntax highlight
Enables syntax highlight in the object editor window.
Always show links
If this option is checked, hyperlinks are displayed in the editor window. To open a link
click it with the Ctrl button pressed.
Show line numbers
If this option is checked, line numbers are displayed in the SQL text editor window.
Use smart tabs
With this option on the number of tab stops is calculated automatically, depending on
the previous line tab.
Tab Stops
Defines the tab length, used when editing text.
Undo Limit
Defines the maximum number of changes possible to be undone.
214
10.2.2 Display
You can disable/enable the right text margin and the gutter of the editor area, set the
position of the right text margin as Right margin, and the Gutter width.
Use the Editor font and Font size to define the font used in all program editors and
viewers. The panel below displays the sample of the selected font.
Options
215
216
Options
217
218
Options
219
220
You can enable/disable code folding in SQL editors and viewers and customize the colors
of its items.
Options
10.3
221
Appearance
The Appearance section allows you to customize the application interface style to your
preferences.
Use the Scheme name box to select the interface scheme you prefer: Office XP style,
Windows XP native style, etc. You can create your own interface schemes by
customizing any visual options (Bars and menus, Trees and lists, Edit controls, Check
boxes, Buttons, etc.) and clicking the Save As button. All the customized options are
displayed on the sample panel.
Bars and menus
Trees and lists
Edit controls
223
Check boxes
224
Buttons
222
225
Page controls
Group boxes
Splitters
221
226
227
228
222
Options
223
224
Options
225
10.3.5 Buttons
Use the Buttons item to customize PHP Generator for MySQL buttons. The tab allows
you to adjust the appearance of buttons and define sample buttons as well.
226
Options
227
228
10.3.8 Splitters
Use the Splitters item to customize all PHP Generator for MySQL splitters according to
your preferences. Use the tab to select hot zone style (Windows XP task bar, Media
Player 8, Media Player 9, Simple or none) and specify the Hot zone drags a splitter
option.
Options
229
230
Index
-AAppearance Options
Bar and menus 221
Buttons
225
Check boxes
224
Edit controls
223
Group boxes 227
Page controls
226
Splitters
228
Trees and lists
222
-CCharts
General options 130
OnPrepareChart 130
Query 129
Client Side API
All editors API
174
getEnabled 178
getFieldName 181
getPlaceholder 183, 184
getReadonly 180
getValue 174, 176
getVisible
180, 181
setEnabled 178
setPlaceholder 183, 184
setReadonly 180
Text editors 183
Command line options 17
Connect to database
12
Connection options 12
82, 97
82, 105
-GGetting started
11
Global Events
OnAfterDeleteRecord 95
OnAfterInsertRecord 93
OnAfterLogin 85
OnAfterUpdateRecord 94
OnBeforeDeleteRecord 93
OnBeforeInsertRecord 92
OnBeforeUpdateRecord 92
OnCustomHTMLHeader 85
OnGetCustomExportOptions
OnGetFieldValue 96
96
-IInstallation instructions
-LLicense Agreement
-O203
Options 204
Appearance 221
Application
205
Editor & Viewers 213
2016 SQL Maestro Group
Index
Options 204
Page 205
-PPage Editor
Charts 128
Columns 29
Data Partitioning 138
Edit properties
45
Events 82
Filter 127
Lookup options 31
Master- Detail Presentations 78
Multi-level autocomplete editor 55
Page properties 132
Templates 77
View properties 36
Page Events executed at Client Side 97
OnAfterPageLoad 98
OnBeforePageLoad 97
OnEditFormEditorValueChanged 101
OnEditFormLoaded 104
OnEditFormValidate 99
OnInsertFormEditorValueChanged 99
OnInsertFormLoaded 103
OnInsertFormValidate 98
Page Events executed at Server Side 105
OnAfterDeleteRecord 92, 93, 95, 122, 123, 124,
125
OnAfterUpdateRecord 94, 122
OnBeforePageExecute 106
OnCustomDrawRow 121
OnCustomHTMLHeader 110
OnCustomRenderColumn 107
OnCustomRenderExportColumn 110
OnCustomRenderPrintColumn 110
OnCustomRenderTotals 114
OnExtendedCustomDrawRow 111
OnGetCustomExportOptions
96, 126
OnGetCustomTemplate 86, 115
OnGetFieldValue 96, 126
Page properties
Abilities
138
Common options 133
RSS options
136
PHP Generator for MySQL
Installation
3
2016 SQL Maestro Group
License agreement 5
Overview 1
Registration 4
System requirements
2
Projects
16
Purchase PHP Generator for MySQL
-RRegistration 4
Report sending 18
-SSecurity options
Database server authorization 163
Hard-coded authorization 159
Permission manager 165
Record-level security 168
Table-based authorization 161
User-defined authorization 164
Server Side API
class Page
199
System requirements
2
231
232