Frequently Asked Questions about ZnetDK for Mobile.
No answer to your question? Feel free to ask your question on the ZnetDK for Mobile forum.
The main difficulty when developing a large application is to structure and organize the source code as efficiently and logically as possible.
ZnetDK meets these requirements through the development of modules, each of them offering business (eg invoice management) or technical (eg sending marketing emails) functionalities.
A module groups together the source code of the view (in HTML, JavaScript and CSS), of the controllers (in PHP) and of models (DAO and MySQL), all in a tree structure of files making it possible to clearly separate the responsibility of each.
By distributing the source code within the different modules, the application can ultimately be very small in terms of software code and be limited to global configuration scripts of the application (INSTALL_DIR/applications/default/app/config.php
and INSTALL_DIR/applications/default/app/lang/locale.php
) and to the definition of the navigation menu in the INSTALL_DIR/applications/default/app/menu.php
script.
The PHP errors are logged in the INSTALL_DIR/engine/log/errors.log
file.
The errors.log
file traces:
\General::writeErrorLog()
method and the exceptions which he threw.When the .htaccess
Apache file located in the ZnetDK root directory is properly configured, then HTTP 403 and HTTP 404 errors are redirected to a dedicated view in charge of displaying the error.
This view named httperrors.php
can be customized by :
INSTALL_DIR/engine/core/view/
directory to the INSTALL_DIR/applications/default/app/view/
directory.httperrors.php
script and changing its content according to your needs.If your application is configured for multi-language display, the view once translated in another language, can be suffixed by the language code as is done for an application view (eg httperrors_es.php
in Spanish).
The Starter App shipped with ZnetDK is displayed in English. The ZnetDK core features are also translated in Spanish and French.
To develop your Web App with a display that matches your own language, please see the Language settings section.
The source code of the Starter App is located within the INSTALL_DIR/applications/default/
folder (see App folders).
To upgrade ZnetDK to the latest version while preserving the source code of your Web Application:
.OLD
extension (eg to /home/john/www/znetdk4m.OLD/
)./home/john/www/znetdk4m/
) in replacement of the old version.default/
folder in the installation directory of the latest version of ZnetDK (eg the /home/john/www/znetdk4m/applications/default/
folder),default/
folder (eg from the /home/john/www/znetdk4m.OLD/applications/default/
folder)..htaccess
file located in the ZnetDK installation root folder (eg from the /home/john/www/znetdk4m.OLD/
folder).modules/
folder (eg from the /home/john/www/znetdk4m.OLD/engine/modules/
folder),/home/john/www/znetdk4m.OLD/
folder).In version >= 2.7 of ZnetDK 4 Mobile, when application is configured as a Progressive Web App, a prompt is displayed to invite users to install the application on their device.
To hide this prompt, edit the INSTALL_DIR/applications/default/app/config.php
of the application and change the value of the CFG_MOBILE_INSTALL_MESSAGE_DISPLAY_AUTO
parameter to FALSE
.
On iPad and iPhone (iOS), the Safari web browser does not support the Add To Home Screen feature (see A2HS topic on MDN) which allows users to easily install a web application that is configured as a Progressive Web App.
This is why the Install the App
prompt doesn't show up in Safari like it does in Chrome or Firefox on Android devices.
However, Safari users can still add a shortcut to their home screen using the share button as explained on the Installation screen offered by ZnetDK 4 Mobile to facilitate installation.
Just edit the INSTALL_DIR/applications/default/app/config.php
of your Web App and set the Color Theme Style Sheet URL by changing the CFG_MOBILE_W3CSS_THEME
parameter.
The procedure to customize the color theme of your Web App is explained in the section Setting the theme colors.
Edit the INSTALL_DIR/applications/default/app/config.php
of your Web App and change the values of the CFG_MOBILE_CSS_FONT
and CFG_MOBILE_CSS_FONT_FAMILY
parameters.
The procedure to customize the theme font of your Web App is explained in the section Setting the theme font.
The title displayed on the banner of the application can be changed by editing the INSTALL_DIR/applications/default/app/lang/locale.php
script and by changing the text for the LC_HEAD_TITLE
constant.
See also the section Changing the titles of the application for further information.
By default, access to the Starter Application is granted to all users. To limit access to authenticated users only (login and password required), edit the INSTALL_DIR/applications/default/app/config.php
of the application and change the value of the CFG_AUTHENT_REQUIRED
parameter to TRUE
as indicated in the Configuring user authentication section.
Before activating authentication, make sure you have installed the security tables (see Installing the Security SQL Tables section) and declared at least one user (see Declaring users section).
Access to the navigation menu can be limited via User Profiles.
For more informations, see section User rights.
By default, once a user is authenticated, his user session expires after 10 minutes of inactivity.
session.gc_maxlifetime
parameter in the hosting php.ini
file).CFG_SESSION_TIMEOUT
parameter.CFG_SESSION_SELECT_MODE
parameter is set to FALSE
and the session expiration is disabled when the CFG_SESSION_DEFAULT_MODE
parameter is set to 'private'
.When authentication is enabled for an application, connected users can change their password through the User panel by clicking the Password button.
The Change password
modal dialog is then displayed and user is invited to modify their password by first entering the current password and then the new password twice (see also Password validity period).
By default, a user's password is valid for six months. After this duration, user must change their password for the next six months.
The default password validity duration can be reduced or increased by setting the CFG_DEFAULT_PWD_VALIDITY_PERIOD
parameter in the INSTALL_DIR/applications/default/app/config.php
script.
Finally, the Expire on
date input field can be exceptionally modified for a particular user from the Edit user
form in order to reduce or extend the expiry date of the user's password (see Profile management and user rights).
Extra style sheets can be added permanently to your Web App by specifying explicitly their path or URL to the CFG_APPLICATION_CSS
PHP constant in the INSTALL_DIR/applications/default/app/config.php
script.
When style sheets are directly hosted by the Web App, then they can be copied into a module (for example in INSTALL_DIR/engine/modules/my_module/public/css/minified/
). In this way, ZnetDK automatically detects their presence and adds them to the Web App.
According to the same principle as the style sheets, extra JavaScript libraries can be added permanently to your Web App by specifying explicitly their path or URL to the CFG_APP_JS
PHP constant in the INSTALL_DIR/applications/default/app/config.php
script.
When JS libraries are directly hosted by the Web App, then they can be copied into a module (for example in INSTALL_DIR/engine/modules/my_module/public/js/minified/
). In this way, ZnetDK automatically detects their presence and adds them to the Web App.
One or several controller actions of a Web App can be exposed as web services and be invoked by a remote application or process.
See the Web Services section for more details.
By default, the Web App is configured to run as a Single Page Application (or SPA). This means that only the main page is loaded at the start and the views are then loaded on demand via AJAX calls.
Once a view is loaded and is no longer useful, it is hidden but not removed from the DOM (Document Object Model) of the main page. So if it is to be displayed later, it is not reloaded and is simply displayed again.
This behaviour can be changed under the following scenarios:
CFG_VIEW_PAGE_RELOAD
set to TRUE
. zdk-viewreload
CSS class must be added to any HTML element in the view (see Application views section).CFG_VIEW_PRELOAD
PHP Constant to TRUE
.In a ZnetDK application, a controller action is a class method coded in PHP and executed to perform specific processing, usually in response to a user action initiated from a view of the application.
Below is the skeleton of a controller class named MyAppController
and directly declared within the application in the INSTALL_DIR/applications/default/app/controller/MyAppController.php
script.
MyAppController.php
<?php
namespace app\controller;
class MyAppController extends \AppController {
static protected function action_myaction1() {
$response = new \Response();
$response->setSuccessMessage('myaction1', 'Done.');
return $response;
}
static protected function action_myaction2() {
$response = new \Response();
$response->setSuccessMessage('myaction2', 'Done.');
return $response;
}
}
?>
Here is below the skeleton of a controller class declared now within the mymodule
module in the in the INSTALL_DIR/engine/modules/mymodule/mod/controller/MyModuleController.php
script.
MyModuleController.php
<?php
namespace mymodule\mod\controller;
class MyModuleController extends \AppController {
static protected function action_myaction1() {
$response = new \Response();
$response->setSuccessMessage('myaction1', 'Done.');
return $response;
}
static protected function action_myaction2() {
$response = new \Response();
$response->setSuccessMessage('myaction2', 'Done.');
return $response;
}
}
?>
A view is a PHP script intended to render data in a dedicated area of the application under the <body>
element of the HTML page. The script of the view can contain both HTML, CSS, JavaScript and PHP code.
To add a view to the application, named for example myview.php
, add a PHP script into the INSTALL_DIR/applications/default/app/view/
folder (see App folders).
On the other hand, to add the view to a module named mymodule
, create the view into the INSTALL_DIR/engine/modules/mymoddule/mod/view/
folder (see Modules).
See below an example of a view displaying the today date.
myview.php
<?php
$todayDateTime = new \DateTime('now');
?>
<h3>My view</h3>
<p>Today is <?php echo $todayDateTime->format('y-m-d'); ?>.</p>
Once the view is created, edit the INSTALL_DIR/applications/default/app/menu.php
script to add a menu item that displays the view when it is clicked.
For example, to open the view myview.php
by clicking the menu item named My View
with the fa-coffee
Font Awesome icon, add the following line in the menu.php
script.
My viewto
menu.php
<?php
namespace app;
class Menu implements \iMenu {
static public function initAppMenuItems() {
/* ... */
/* Previous menu items are declared just above */
\MenuManager::addMenuItem(NULL, 'myview', 'My view', 'fa-coffee');
/* Next menu items are declared just below */
/* ... */
}
}
?>
To develop a modal dialog, add in an application view a <div>
element with the w3-modal
W3.CSS class.
Call the znetdkMobile.modal.make()
method to instantiate the modal dialog in order to manage opening and closing of the modal.
To close the modal dialog, add a close button using a <span>
element with the close
CSS class.
You can also add a <button>
element with the cancel
CSS class to close the modal dialog by clicking a Cancel button.
Here is below an example of modal dialog with a title, an icon, a close button, a cancel button and a text as content.
The dialog is displayed by clicking the Show modal button (see znetdkMobile.modal.open()
method).
<!-- Button to display the modal dialog -->
<button id="my-button" class="w3-button w3-theme-action">Show modal</button>
<!-- The modal dialog definition -->
<div id="my-modal" class="w3-modal">
 <div class="w3-modal-content w3-card-4">
   <header class="w3-container w3-theme-d5">
     <span class="close w3-button w3-xlarge w3-hover-theme w3-display-topright"><i class="fa fa-times-circle fa-lg"></i></span>
     <h4>
       <i class="fa fa-diamond fa-lg"></i>
       <span class="title">Modal with content</span>
     </h4>
   </header>
   <div class="w3-container">
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
     <p>Phasellus venenatis, velit in luctus tincidunt, diam eros ultricies elit, sit amet fringilla libero quam nec urna.</p>
   </div>
   <div class="w3-container w3-border-top w3-border-theme w3-padding-16 w3-theme-l4">
     <button type="button" class="cancel w3-button w3-red">
       <i class="fa fa-close fa-lg"></i>
       <?php echo LC_BTN_CANCEL; ?>
     </button>
   </div>
 </div>
</div>
<!-- The modal is displayed on button click -->
<script>
$('#my-button').on('click', function(){
var modalObject = znetdkMobile.modal.make('#my-modal');
modalObject.open();
});
</script>
Here is the procedure to deploy your Web App on a web hosting:
./znetdk4m/
folder) to the web hosting target directory (eg in /home/www/znetdk4m
).INSTALL_DIR/engine/log/
directory where the errors.log
file is created and populated by ZnetDK when errors occur.
Usually, the username under which PHP runs is www-data if Apache is installed.
if necessary, use chmod
and chown
in command line to give write access to the user or group www-data on the INSTALL_DIR/engine/log/
directory..htaccess
with statements Order deny,allow
and Deny from all
exists in the subfolders named app/
(see Folder tree of the Starter App) and mod/
(see Where are the modules installed?).INSTALL_DIR/.htaccess
and configure the ErrorDocument
Apache directive for the HTTP errors 403 and 404 (see HTTP errors 403 and 404).config.php
script (see Database settings).The PHP extensions required to run your application depends on the developed features:
mysqli
(optional): this extension allows the application to access a MySQL database. This extension is not required if the application is not configured to access a MySQL database (see Database settings).pdo_mysql
(optional): this extension is required to access a MySQL database through the PHP Data Objects (PDO) interface. ZnetDK \DAO
PHP class is based on PDO. If the application is not configured to access a MySQL database, this extension is also not necessary.fileinfo
(optional): extension only required if the ZnetDK \General::getMimeType()
method is explicitly called by your application.gd
(optional): extension only required if the ZnetDK \General::reducePictureSize()
or \General::isPictureTooBig
method is explicitly called by your application.