PHP WinBinder 3: Open and Save As dialog boxes
PHP WinBinder 3 : Introduction | Dialog pop-ups | Name Password pop-up | Open and Save As dialog boxes
|
|
UniServer 5-Nano PHP WinBinder 3. |
Open dialog box and Save As dialog box
Running either the Open dialog box function wb_sys_dlg_open or Save As dialog wb_sys_dlg_save produces the following error :
- Fatal error: Call to undefined function wb_sys_dlg_open()
- Fatal error: Call to undefined function wb_sys_dlg_save()
Reason for this error; our basic script lacks support for either function.
One solution is to include WinBinder include files. However this conflicts with our single script approach.
Solution is to extract the appropriate functions from the WinBinder include file wb_windows.inc.php
That legwork has already been done and included on this page which covers using the above two functions directly from a PHP CLI script.
Add Missing Functions
Edit a clean copy of Pro_demo_wb.php add the following functions at the end of WINBINDER MINIMUM REQUIRED section as shown blow:
//--- OPENS STANDARD OPEN DIALOG BOX ------------------------------------------ function wb_sys_dlg_open($parent=null, $title=null, $filter=null, $path=null, $filename=null){ $filter = _make_file_filter($filter ? $filter : $filename); return wbtemp_sys_dlg_open($parent, $title, $filter, $path); } //-------------------------------------- END OPENS STANDARD OPEN DIALOG BOX --- function wb_sys_dlg_save($parent=null, $title=null, $filter=null, $path=null, $filename=null, $defext=null){ $filter = _make_file_filter($filter ? $filter : $filename); return wbtemp_sys_dlg_save($parent, $title, $filter, $path, $filename, $defext); } //--- OPENS STANDARD SAVE DIALOG BOX ------------------------------------------ //-------------------------------------- END OPENS STANDARD SAVE DIALOG BOX --- //--- CREATE FILE FILTER ------------------------------------------------------ // Creates a file filter for Open/Save dialog boxes based on an array. function _make_file_filter($filter){ if(!$filter) return "All Files (*.*)\0*.*\0\0"; if(is_array($filter)) { $result = ""; foreach($filter as $line) $result .= "$line[0] ($line[1])\0$line[1]\0"; $result .= "\0"; return $result; } else return $filter; } //-------------------------------------------------- END CREATE FILE FILTER --- //###== END FROM WINBINDER MINIMUM REQUIRED FOR TEXT AND BUTTONS ==############
General
Before looking at each function its important to understand what they do.
In a nutshell they return a full path to a file. They do not save or read to or from a file. Once you have a returned path you can use it in your script to perform the appropriate task.
A user has the option to cancel; in this situation returned path is empty. Both functions are obtaining user input at first site this may seem strange.
Save function provides you with a users intention that the file will be saved to a particular location and possibly with a different file name and extension.
Open function is straightforward; it returns the full path including file name and extension of a file selected by a user.
Filter
This is an optional two-dimensional array consisting of a description and file extension.
static $file_filter = array( array("PHP source code", "*.php*"), array("Web page", "*.htm*"), array("Text document", "*.txt*"), array("All files", "*.*") ); |
|
Example:
|
Dialog box details
For connivance I have reproduced each function's specification below.
These were taken from the WinBinder manual page links as follows:
- Functions by category - First port of call
- Open dialog box
- Save As dialog box
Open dialog box
string wb_sys_dlg_open (int parent [, string title [, string filter[, string path[, string filename]]]])
Displays the standard Open dialog box. Returns the selected file name, if any, or a blank string if the dialog box was canceled. Returns NULL if not successful.
Parameters:
parent | is a handle to the WinBinder object that will serve as the parent for the dialog box. |
title | is the string to be displayed as the dialog box caption. |
filter | is an two-dimensional array composed of pairs of file descriptions and valid file name patterns (usually file extensions). If filter is NULL, the dialog box will display a default "All files" filter. The filter takes the following generic form:
array(array(descr1, pat1) [, array(descr2, pat2) [, ...]]) |
path | is an folder used to initialize the dialog box. |
filename | is optional. If parameter filter is NULL, the file extension will be used as the filter instead. |
Save dialog box
string wb_sys_dlg_save (int parent [, string title [, string filter[, string path[, string filename [, string default_extension]]]]])
Displays the standard Save As dialog box. Returns the typed file name, if any, or a blank string if the dialog box was canceled. Returns NULL if not successful.
Parameters:
parent | is a handle to the WinBinder object that will serve as the parent for the dialog box. |
title | is the optional string to be displayed as the dialog box caption. |
filter | is an optional two-dimensional array composed of pairs of file descriptions and valid file name patterns (usually |
file extensions | If filter is NULL, the dialog box will display a default "All files" filter. The filter takes the following generic form:
array(array(descr1, pat1) [, array(descr2, pat2) [, ...]]) |
path | is an optional folder used to initialize the dialog box. |
filename | is an optional default name for the file. If parameter filter is NULL, the file extension will be used as the filter instead. |
default_extension | is optional and defines a default extension for the dialog box. |
Use NULL
To run the above two functions directly from your script replace use NULL for the parent parameter.
Real reason for reproducing the above is to highlight number of parameters in square brackets. Majority of WinBinder functions have these; what’s important they are optional. If you don’t specify a parameter a default is used.
Note:
If you want to use something like the following without specifying a title string:
string wb_sys_dlg_save (int parent , string title , string filter)
Replace ” string title” with NULL or leave it blanks, do not delete the comma.
Test Code
//=== INIT ==================================================================== static $file_filter = array( array("PHP source code", "*.php*"), array("Web page", "*.htm*"), array("Text document", "*.txt*"), array("All files", "*.*") ); $filename = wb_sys_dlg_open(NULL, 'Get file 1'); if($filename) { print $filename ; // Do action here } $filename = wb_sys_dlg_open(NULL, 'Get file 2', $file_filter); if($filename) { print $filename ; // Do action here } $filename = wb_sys_dlg_save(NULL, "Save As 3", NULL, NULL, NULL, 'txt'); if($filename) { print $filename ; // Do action here } $filename = wb_sys_dlg_save(NULL, "Save As 4", $file_filter, NULL, NULL, 'txt'); if($filename) { print $filename ; // Do action here } //=============================================================== END INIT ==== |
|
Add the lines of code to INIT as shown.
This code prints a path returned if any. if($filename) { print $filename ; // Do action here } If cancel is pressed code is skipped since returned string is blank |
Associates files
That completes this short tutorial.
Download includes the following two files for the above example :
- Pro_demo_3_wb.bat
- Pro_demo_3_wb.php
These are located in folder UniServer\docs\SRC\pro_demo
Copy them to folder UniServer and run.
Summary
The above two functions were included for completeness. From a scripting point of view if you need to use them, you probably should consider creating a real WinBinder windows application. That said, they could be just what you want.
This tutorial has shown you can run any of the dialogue boxes directly from a PHP CLI script.
If none of the standard dialogue boxes meet your requirements using the techniques explained for creating a name password pop-up you can create a customised one
The WinBinder extension combined with PHP’s scripting core provides a very powerful and versatile solution to scripting.