PHPR Project Management

I found this interesting post on the Xlinesoft forum tonight. (Best Practices) It relates to Best Practices for using PHPRunner & Subversioning.  I currently don’t have a use for this in anything I am working on but thought that it was pretty interesting so I decided to include it here…

——————————————————

1.0 Summary:

Setting up an SVN Repository significantly increases manageabilty of large scale projects using PHPRunner across many environment instances and developers. SVN Repository will also encourage companies to use PHPRunner to be used in larger scale projects. The output codes can be deployed based on the subversions and the config file can be determiend upon staging.

2.0 Case Statement

I have a project that is used in the development and live environment. Initially, it was not an issue since the db schema was synched. As the the dev version is release to production, and additional tables were added to the dev environment, I found it almost impossible to manage the project with my simplistic approach. What I ended up doing was for each instance of the development (dev, test, stage and live), I created seperate projects. so, I now have 4 individual projects. Our european counterpart saw our US project and of course, they requested for each of their instances which of course was about 6 all together. So, now I have a total of 10 seperate project for each db instance of our development phase. In my mind, the only difference is the config (i.e., host, user, password and db name).
For awhile, I would just select one of the projects, make my modifcations, and then save as for each instance of the project. This worked for awhile.

The problem started to occur when we went live the first time. There were enhancements that I wanted to make for the production version. Meanwhile, the db schema in the development and test instances started to change. So, I found many of my links started to break. So, I could no longer just simply Save As. The next step was to Cut and Paste.
I stopped Saving As, and started doing the following. I would make the changes in one of the most complete instance which usually was the development instance since its where the new tables are comming from. Then, I would open another PHPRunner and open one of the other instances that I wanted to update. Of course, I couldn’t update all since some of the test and stage instances have not been updated.

As a result, there was chaos in my codes. I no longer didn’t remember which project belonged to what instance. I didn’t know which one got updated and which ones are the same and which ones are broken. In other words, the project(s) became extremely unmanageable.

3.0 Analysis

This is a typical result when what seemed to be an easy process ended up entangled. Many times, the simpliest approach many not be the wisest approach and could cause havoc on project and resource management. The criteria for a simple project is if the proejct is being developed by a single develper on one or two instance of the same project. Both db instance must be synched for most of the time or at least a push to keep it in synched. As soon as a third unsycnronized db instance is introduced, then it can no longer be considered as a simple project management case. In order to avoid the pitfall of the case statement, one must ensure scalability, flexibility of code management, as well as the deploy process.

 

4.0 Approach

4.1 Set-up

The way to resolve the issue was we deployed a subversioning tool, SVN with a UI frontend, Tortoise. We created a project folder in the SVN Repository and a trunc.
I selected the best “version” from the projects, which we’ll call ProjectPHP. I then looked for the PHPR project file and copied that and the tmp and visual folders into my SVN trunc folder (which was also in my local apache htmdoc webserver path). I opened PHPRunner, make the changes I wanted and Save. I am now saving the PHPR file into my SVN trunc folder that is also within my apache webserver folder. I set my output file directly onto my trunc folder and I set the preview with the localhost url. I build the projects.

4.2 Work Process and Project Management

If all goes well, all the output files is created within the trunc folder. I use the preview just to see if anything was broken. When I am satisfied with the changes, I close PHPRunner and then go to the trunc folder. I delete the tmp and visual folder since I discovered that once I successfully build an output files with the tmp and visual folders, I can erase those two folders. Somehow, when I open PHPRunner and build it again, PHPRunner knows where to look for those tmp and visual folders. Also, for some reason even if I delete these folders, when I go to my Visual Editor, I can still see all the icons.

I committ all the files to the SVN Repository. (Note: It’s realy easy to do it using Tortoise SVN). I know have a trunc of my project. I then check out a Working Copy. This is a good idea since you don’t want to mess up your trunc version since it will always be your “base copy” of the code. In my working copy, I can open PHPRunner and open that particular project file. It works beautifully. All the icons show up in my visual editor. I can change the db configuration so that I am developing to the relevant instance of the database. Once I am done, I save my I used the Live instance of db to create or update the project. Once I was satisfied, I save my project which was the latest and greatest of the codes that I have been chaotically managing. Once we created the trunc, we created tags and branches.

I checked out the trunc into my Working Copy folder. For now, my WC is pointed towards the trunc. For every major milesone I reach, I create a Tag. The naming convention for the tag is usually the date and some task indicator like Dec102008_Task_1of3 or some other meaningful naming convention. I continue with my work on my WC until I complete all my tasks. By now, I have 3 tags, since I created them for each milestone.

I then committ my changes into the SVN Repository. Since I was pointed towards the trunc, it updated the Trunc. But since it is also a completion of a version of ProjectPHP, I created a Branch and called it Revision 1.0. This is my first “subversion.”

For now, I can continue to make small modificaitons or bug fixes to Revision 1.0. It is important to note that I am working constantly on my WC (Working Copy). Basically, I can “Switch” the WC to the trunc, tags or branches. When I am working on Revision 1.0, I will make tags along the way in order not to lose any of my codes in cases I mess up further along the way. There is a stopping point. Once I am done with my changes, I create a subversion Revision 1.1

Note: Please refer to the sources link below for more detailed subversion workflow.

4.3 Deployment

For every completed revision, I test it in the Test, QA, Stage environment. And once it passes all 3, then I deploy it to Production. We created a page that allowed me to selecte which subversion I want to deploy and the “dbcommon” version that I want to use. Since in PHPRunner, the db information is part of the editing the project, when it builds the file, it also builds the dbcommon that has all the db information (user, password, etc.). So, when there is a different db login for each instance, you will have to specify the correct “version” of the dbcommon. All I did was to create one dbcommon as a “trunc” and then created all versions of that for each instance of the db.

Whenever I deploy, I select the code that I wanted to put into dev, qa or stage, and select the appropriate dbcommon. It is a dropdown. The staging process basically takes all my files which are the output files and overrides the dbcommon with whatever “version” of the file I select. Remember the version is realy just to be able to have all the dbcommon for all the instances.

Also, there is one caveats for those that may want to have a others use the project for each of the instance. So, say if you have a Live version with the old db schema. So the Live version is Revision 1 and all the subversions. The active development is already on Revision 3, for example. And you’ve made some changes on Revision 3 and deployed it to your develpment and stage instances (and not Live of course, because the latest db has not been deployed to Live).

Since you still want to test and stage your Revision 1 code, you can deploy the codes to the development and test environments but use the db instance that has the matching schema (usually by now, it will be just the Live version). Notify the folks using the tool that you’ll be testing and staging a production fix and therefore need to log out. Once you verify in test and stage the codes, deploy the code to Live. At this point, unless there are major functionality and not just small fixes, you may have to merge it with either Revision 3 (the latest and greatest version of your project) or back to the Trunc.

I suggest not to do this however. I would just leave Revision 1 and all its subversions where it is. It is easier just to make sure that that functionality is copied over to Revision 3 and then merged back to the trunc (since Revision 4 may be under way).

5.0 Conclusion

When you use SVN with Tortoise and set up the appropriate subversions, your project with multiple developers and instances can be manageable, as long as everyone understands the subversioning principle. Keep the PHPR file with the output files and delete the tmp and visual folders once you have successfully built a project within the svn file folder. The PHPR file gets subversioned as well. In other words, it becomes protected for any accidental mistakes (like I have done so many times with my manual management of my php projects.)
I hope this post will encoruage to use PHPRunner at a large scale basis and will encourage the makers of PHPRunner to make it more and more robust.

6.0 To Do’s

  • Set up URLs for each project intance (dev, test, stage, live). These corresponds to the db instances.
  • Set up SVN repository
  • Set up staging page. There will be a list of the environment where the codes will be deployed, a list of the code version to deploy, and the dbcommon version to override the dbcommon built along with the PHPRunner.
  • Set up Project Folder then /trunc, /tags, /branches (Please see the link and study the manuals)

Resources Links:
SVN
Tortoise

PHPRunner 4.2 released

I am just now getting around to updating my PHPRunner Software on my Dev1 Machine (have been really behind the times lately) and was surprised to find that they have added quite a few new features that are very handy one click type of things, here’s a list:

  • Dynamic permissions
  • Import data from CSV and Excel files
  • Resize images on upload and iBox support
  • Auto-update fields. Automatically insert a value into field every time record is updated (UpdateBy, UpdateTime, IP address of user etc)
  • Visual SQL Editor
  • Add new item to dropdown box as a fully-featured add page in popup
  • Only allow complex passwords (mixed cases, non-alphanumeric characters)
  • Registration confirmation via email
  • CAPTCHA

Probably the first one on the list, Dynamic Permissions, is the one that I have most anxiously been awaiting. I can see how this is going to be very nice. I have been running 4.2 on my notebook pc for a little while now getting acclimated and it operates great, the new enhancements to the visual sql editor are most welcomed!

I know that I have a few folks that hit my blog from time to time that are also hardcore PHPR users, I would be interested in hearing from any of you and your take on the software as well. Just email me or drop me a comment / trackback to your blog on here…

Source: PHPRunner 4.2 released – Forums

URL String w/ Advanced Search – PHPR

I ran across something today that was pretty cool.  Let’s say you are using PHPR to generate your PHP pages and code, the advanced search feature is setup by default not to give a URL in it’s results (I have wondered why this is because basic search gives you a workable URL string for building links, etc.).  This would only be handy I guess if you were wanting to narrow a search down by more than one field (real estate sample: “brick homes” in “x city”, or “wood homes” in “y city”, etc.).  Well, Jane posted something to the tips and tricks section of PHPR’s support forum that allows you to go in and tweak out the code before it’s generated so the Advanced Search also will return a URL string that you can use in building your links.  Here’s what she posted:

Proceed to the Visual Editor and open the advanced search page.
Switch to HTML mode and find the following code snippet:

   1: <form method="POST" action="TableName_list.php" name="editform">

Replace this line of Code with this:

   1: <form method="GET" action="TableName_list.php" name="editform">

Once you have changed this one line of code, then go back into your project and run the advanced search, the URL will then be available for you to paste into your code.

 

Source: How to get the URL of advanced search results page – Forums

Table Events Bug w/ Catalog – Registration App


I put together a class catalog and registration application a while back for a client and it’s been working great with the exception of one small bug that I can’t seem to be able to locate.  I have it setup using Table Events (After Record Added) in PHPR to send an email once someone registers online and also to redirect the registrant to another page once they have registered.  The redirection works great, no problems there, it’s just the email thing that’s giving me issues.  Here’s the weirdest part of the deal, occasionally an email will go through the system and make it’s way out…  It’s real sporadic though.

I posted a note on Xlinesoft’s Forum, hopefully someone will have some advice as to where I might look to troubleshoot this issue out.  Here’s the table event code that I am using to send the email out after a record is added and also to redirect the visitor.  If any of you out there have any suggestions I would love to hear from you.

   1: // Parameters:
   2: // $values - Array object. 
   3: // Each field on the Add form is represented as a 'Field name'-'Field value' pair
   4: // $keys - Array object with added record key column values
   5:  
   6:  
   7: //**********  Redirect to another page  ************
   8: header("Location: http://www.anurturingtouch.com/confirmation.php");
   9: exit();
  10:  
  11:  
  12:  
  13: // **********  Send simple email  ************
  14:  
  15: $email="steph@anurturingtouch.com";
  16: $message="New Registration has been made on your website, please login and retrieve their information, http://www.anurturingtouch.com/cms";
  17: $subject="New Registration";
  18: mail($email, $subject, $message);

PHPR / Smarty templates

Smarty Templates have been around for a while now and are pretty popular with developers.  One of the things that I really like about PHPR (PHPRUNNER) is that it utilizes Smarty Templates and stores them in a directory called <templates> inside of whatever application you are working in.  Let’s say we are working on a list page, with Smarty in use there are actually two separate files in play, one file will be called list.php and it will look something like this:

   1: include('Smarty.class.php');
   2:  
   3: // create object
   4: $smarty = new Smarty;
   5:  
   6: // assign some content. This would typically come from
   7: // a database or other source, but we'll use static
   8: // values for the purpose of this example.
   9: $smarty->assign('name', 'george smith');
  10: $smarty->assign('address', '45th & Harris');
  11:  
  12: // display it
  13: $smarty->display('list.htm');

As you can see, the list.php page just contains your actual PHP Code itself.  The second file in this equation is located inside of the <templates> directory and is called list.htm.  It contains the html and css values for the page:

   1: <html>
   2: <head>
   3: <title>User Info</title>
   4: </head>
   5: <body>
   6:  
   7: User Information:<p>
   8:  
   9: Name: {$name}<br>
  10: Address: {$address}<br>
  11:  
  12: </body>
  13: </html>

PHPRunner manual – Smarty templates

PHPRunner 4.2beta Release!

The newest build of PHPR (phprunner) is now available for download on Xlinesoft’s Forums. This build, #348, is 4.2beta release. In this release it looks like they have fixed a couple of issues that were looming with 4.1 like the issue with the default project folder in Vista that plagued me for a little while until I got it figured out w/ their help. Also, the Visual SQL Editor is updated as well.

Scheduled to be implemented in the very near future on this project are CAPTCHA, complex password validation, registration verification by email, and the new PDF Export (view and Print Pages) that basically captures data on a page and shoots it out to a PDF file. The ability to export data to a PDF already exists but not in this manner. The final version with these implementations is scheduled to be out the end of this month (february 2008).

For reference, I am posting info from past PHPR builds on here so that there is a semi-complete list of features listed here for the product.

Version 4.1 – September 18, 2007

  • New events/extended list of parameters available in each event
  • Inline Add/Edit on the list page. Add/Edit multiple records at once. Inline Add/Edit use the same input controls that appear on regular Add/Edit pages. All BeforeAdd/AfterAdd/BeforeEdit/AfterEdit events are supported by inline functions. Totals will be recalculated after new record is added or edited.
  • Security enhancements
    - Admin user is implemented as an Admin group which allows multiple admins
    - Separate OwnerID for each table
  • New, nice looking layouts
    Default, Amsterdam, Rome, Paris, Madrid, and London.

Version 4.0 – May 21, 2007

  • Reports (outline, stepped, align, block and tabular layouts)
  • Charts (line, pie, doughnut, horizontal/vertical bars, 3D charts etc.) We use Flash-based charts developed by AnyChart.com
  • Business templates and visual themes
  • AJAX-based functionality (Google-like auto-suggest feature on basic and advanced search pages,
    - AJAX-based dependent dropdown boxes mean faster page load
    - mouse over link to Details to see detail records without proceeding to the details page
    - “Lookup wizard as Edit box” feature – edit box with autosuggest

Version 3.1.1 – February 8, 2007

Version 3.1 – October 9, 2006

  • WYSIWYG visual editor. Tweak visual appearance of any page with easy to use editor.
  • New Custom “View as” type. Use any PHP expression to display data the way you need.
  • Frontpage publishing

Version 3.0 – February 25, 2006

  • Events. Ability to call some PHP code before or after record is edited, deleted, added etc. Modify values before they written to the database, say “no” to record deletion or update, send an email with new data etc.
  • Wizard for new database/tables creation
  • Multiple table aliases. Generate several views for the same database table
  • Encode passwords in database (optionally)
  • Add new items to database-driven drop-down boxes and listboxes on the fly
  • More search modes (and-or search, not search)
  • Major UI redesign. Quick switch between database tables on any page
  • Common header and footer on all pages. Put file named supertop.php to include folder to make it appear on the top of every generated page
  • Multiple records per row layout
  • Template Editor

Version 2.0 – June 9, 2005

  • Postgre, Oracle, MS Access, MS SQL Server support
  • Built-in FTP Client to upload PHP pages to the Web server
  • User self-register page, password reminder, change password pages
  • Multilingual templates. Ability to choose language while logging in
  • Use drop-down boxes, date-pickers, checkboxes on the Advanced search page
  • Allow direct links to Edit, Add, Search results page
  • Display “Please wait” message while search results page is loaded
  • Copy a record function
  • Tables menu on the list page. Allow to reorder tables in the tables menu
  • Multiple ORDER BY fields
  • Case-insensitive search
  • List boxes allow multiple selection
  • Linked dropdown boxes, filtered dropdown boxes, dropdown boxes with custom display
  • Upload files to the folder on the Web server. Use Edit as type “Document upload” and View as type “Document download” or “File-based image”

Version 1.1 – December 5, 2004

  • Easy to use wizard-like interface
  • Generates 100% pure PHP code
  • Number of search modes, advanced search
  • Add, view, edit, and delete pages, sort data
  • Master-detail tables relationship support
  • Database images displaying and upload
  • Password protected access to your database
  • Data validation on the edit page (email, number, date, credit card number, ZIP code, US state etc.)
  • Export results to Excel, Word, XML, CSV
  • Advanced security settings (allow users to edit their own data only, admin user, guest login, group based permissions)

Create a table with the list of US states

I had another PHPR user email me the other day and ask how was the best way to go about adding a table for US states that already had all of the states already listed.  I had to think for a minute because what I usually do is build a table for states and leave it blank so that the admin of the site can add states as he or she enters in content.  The only thing I typically do is to set it so that the states are listed alphabetically.  Sergey posted an entry on the Xlinesoft forums though that shows how you can just use this sql statement to create the table with statements in it already, I am posting it here so that I can just copy / paste it in if this ever comes up again…

   1: CREATE TABLE IF NOT EXISTS states (

   2: id INT NOT NULL auto_increment,

   3: name CHAR(40) NOT NULL,

   4: abbrev CHAR(2) NOT NULL,

   5: PRIMARY KEY (id)

   6: );

   7:  

   8: INSERT INTO states VALUES (NULL, 'Alaska', 'AK');

   9: INSERT INTO states VALUES (NULL, 'Alabama', 'AL');

  10: INSERT INTO states VALUES (NULL, 'American Samoa', 'AS');

  11: INSERT INTO states VALUES (NULL, 'Arizona', 'AZ');

  12: INSERT INTO states VALUES (NULL, 'Arkansas', 'AR');

  13: INSERT INTO states VALUES (NULL, 'California', 'CA');

  14: INSERT INTO states VALUES (NULL, 'Colorado', 'CO');

  15: INSERT INTO states VALUES (NULL, 'Connecticut', 'CT');

  16: INSERT INTO states VALUES (NULL, 'Delaware', 'DE');

  17: INSERT INTO states VALUES (NULL, 'District of Columbia', 'DC');

  18: INSERT INTO states VALUES (NULL, 'Federated States of Micronesia', 'FM');

  19: INSERT INTO states VALUES (NULL, 'Florida', 'FL');

  20: INSERT INTO states VALUES (NULL, 'Georgia', 'GA');

  21: INSERT INTO states VALUES (NULL, 'Guam', 'GU');

  22: INSERT INTO states VALUES (NULL, 'Hawaii', 'HI');

  23: INSERT INTO states VALUES (NULL, 'Idaho', 'ID');

  24: INSERT INTO states VALUES (NULL, 'Illinois', 'IL');

  25: INSERT INTO states VALUES (NULL, 'Indiana', 'IN');

  26: INSERT INTO states VALUES (NULL, 'Iowa', 'IA');

  27: INSERT INTO states VALUES (NULL, 'Kansas', 'KS');

  28: INSERT INTO states VALUES (NULL, 'Kentucky', 'KY');

  29: INSERT INTO states VALUES (NULL, 'Louisiana', 'LA');

  30: INSERT INTO states VALUES (NULL, 'Maine', 'ME');

  31: INSERT INTO states VALUES (NULL, 'Marshall Islands', 'MH');

  32: INSERT INTO states VALUES (NULL, 'Maryland', 'MD');

  33: INSERT INTO states VALUES (NULL, 'Massachusetts', 'MA');

  34: INSERT INTO states VALUES (NULL, 'Michigan', 'MI');

  35: INSERT INTO states VALUES (NULL, 'Minnesota', 'MN');

  36: INSERT INTO states VALUES (NULL, 'Mississippi', 'MS');

  37: INSERT INTO states VALUES (NULL, 'Missouri', 'MO');

  38: INSERT INTO states VALUES (NULL, 'Montana', 'MT');

  39: INSERT INTO states VALUES (NULL, 'Nebraska', 'NE');

  40: INSERT INTO states VALUES (NULL, 'Nevada', 'NV');

  41: INSERT INTO states VALUES (NULL, 'New Hampshire', 'NH');

  42: INSERT INTO states VALUES (NULL, 'New Jersey', 'NJ');

  43: INSERT INTO states VALUES (NULL, 'New Mexico', 'NM');

  44: INSERT INTO states VALUES (NULL, 'New York', 'NY');

  45: INSERT INTO states VALUES (NULL, 'North Carolina', 'NC');

  46: INSERT INTO states VALUES (NULL, 'North Dakota', 'ND');

  47: INSERT INTO states VALUES (NULL, 'Northern Mariana Islands', 'MP');

  48: INSERT INTO states VALUES (NULL, 'Ohio', 'OH');

  49: INSERT INTO states VALUES (NULL, 'Oklahoma', 'OK');

  50: INSERT INTO states VALUES (NULL, 'Oregon', 'OR');

  51: INSERT INTO states VALUES (NULL, 'Palau', 'PW');

  52: INSERT INTO states VALUES (NULL, 'Pennsylvania', 'PA');

  53: INSERT INTO states VALUES (NULL, 'Puerto Rico', 'PR');

  54: INSERT INTO states VALUES (NULL, 'Rhode Island', 'RI');

  55: INSERT INTO states VALUES (NULL, 'South Carolina', 'SC');

  56: INSERT INTO states VALUES (NULL, 'South Dakota', 'SD');

  57: INSERT INTO states VALUES (NULL, 'Tennessee', 'TN');

  58: INSERT INTO states VALUES (NULL, 'Texas', 'TX');

  59: INSERT INTO states VALUES (NULL, 'Utah', 'UT');

  60: INSERT INTO states VALUES (NULL, 'Vermont', 'VT');

  61: INSERT INTO states VALUES (NULL, 'Virgin Islands', 'VI');

  62: INSERT INTO states VALUES (NULL, 'Virginia', 'VA');

  63: INSERT INTO states VALUES (NULL, 'Washington', 'WA');

  64: INSERT INTO states VALUES (NULL, 'West Virginia', 'WV');

  65: INSERT INTO states VALUES (NULL, 'Wisconsin', 'WI');

  66: INSERT INTO states VALUES (NULL, 'Wyoming', 'WY');

  67: INSERT INTO states VALUES (NULL, 'Armed Forces Africa', 'AE');

  68: INSERT INTO states VALUES (NULL, 'Armed Forces Americas (except Canada)', 'AA');

  69: INSERT INTO states VALUES (NULL, 'Armed Forces Canada', 'AE');

  70: INSERT INTO states VALUES (NULL, 'Armed Forces Europe', 'AE');

  71: INSERT INTO states VALUES (NULL, 'Armed Forces Middle East', 'AE');

  72: INSERT INTO states VALUES (NULL, 'Armed Forces Pacific', 'AP');

  73:  

  74: If you need Canada provinces as well:

  75:  

  76: INSERT INTO states VALUES (NULL, 'Alberta', 'AB');

  77: INSERT INTO states VALUES (NULL, 'British Columbia', 'BC');

  78: INSERT INTO states VALUES (NULL, 'Manitoba', 'MB');

  79: INSERT INTO states VALUES (NULL, 'New Brunswick', 'NB');

  80: INSERT INTO states VALUES (NULL, 'Newfoundland and Labrador', 'NL');

  81: INSERT INTO states VALUES (NULL, 'Northwest Territories', 'NT');

  82: INSERT INTO states VALUES (NULL, 'Nova Scotia', 'NS');

  83: INSERT INTO states VALUES (NULL, 'Nunavut', 'NU');

  84: INSERT INTO states VALUES (NULL, 'Ontario', 'ON');

  85: INSERT INTO states VALUES (NULL, 'Prince Edward Island', 'PE');

  86: INSERT INTO states VALUES (NULL, 'Quebec', 'QC');

  87: INSERT INTO states VALUES (NULL, 'Saskatchewan', 'SK');

  88: INSERT INTO states VALUES (NULL, 'Yukon', 'YT'); 

Source: Create a table with the list of US states – Forums

Project: Class Catalog & Registration Process

I was approached by a long-time client last month to help her put together a dynamic class catalog application that she could manage in-house that listed the reflexology and massage classes that she offers.  In addition to the class catalog management process she also wanted to develop a system that would enable her potential students to register online for classes and store their information in an online database that she could use to market to or follow up with in the future.

I built the project in PHPR entirely, it is written in PHP and utilizes a MySQL Database on the backend.  The way the application works is that the students will hit her website and browse her class listings that are sorted on her website by date.  Once they select a class that they are interested in enrolling in, they simply complete an online form with their credentials and payment information.  Once this form is completed they are then transported to a confirmation page on her website.  The data is stored in a MySQL database and by using table events inside of PHPR I was able to generate the “after succesful entry” and “send email” features.  An email is then sent to my client telling her that a student has registered online.  She then logs in and downloads the information to her desktop system. 

I spent a little while testing this process since it was the first time I had actually made a data entry form available to the public but after a lot of testing I found that the whole process was secure and functioned great.  If you want to check out this application that was built completely in PHPR, just send me a note and I will be glad to share the template for this project with you.  In the future I plan on making some of my favorite apps available online on the Xlinesoft forums for those of you that are interested.

Full Screen User Interface

I was just cruising through the Xlinesoft Forums today and found a pretty cool javascript that someone had posted that will help you get more screen real estate in your backend applications that you hand off to your clients.  This javascript just creates a button that they can click on that helps the backend seem a little bit more like an a desktop application by making the screen completely full and by removing a lot of browser elements.  There are a lot of cool tricks and tips like this listed on the xlinesoft forums, the community there is very active and not afraid to share cool tricks they pick up.

   1: <script>
   2: <!--
   3: function fullwin(){
   4: window.open("bigpage.html","bfs","fullscreen,scrollbars")
   5: }
   6: //-->
   7: </script>
   8:  
   9: <center>
  10: <form>
  11: <input type="button" onClick="fullwin()" value="Open Full Screen Window">
  12: </form>
  13: </center> 

PHPR Projects as Templates

I haven’t blogged about PHPRunner in a while because I have just been too busy I guess, but I still use it exclusively now for PHP Development.  The last two builds they have been released have been awesome!  The newest SQL editor console that is built in is a welcomed enhancement for sure.  The reason I am posting this entry though is because I have ran across yet another time saving component that I thought I would share now that I have my mind around it, thanks to Jane from Xline for making it clear to me…

When I build a project for a client that is a pretty common project that I see myself potentially reselling to another client down the road I would usually go in and replicate the database tables and edits through the visual editor to the smarty templates in order to make the project generate my code based on another similar project I had built.  Now I don’t have to. 

Let’s say that I take my Real Estate Solution that I just released, Powersite Real Estate CMS v1.0.  It’s robust, does exactly what the end users want it to do.  I have had two real estate companies work closely with me in putting together this software and I know it’s pretty feature rich, not saying I won’t add to it down the road but for now it’s great.  Well, with the latest builds of PHPR I have the option to save the project as a template.  That’s right, a template, and the best part is that it serves the purpose that you are probably thinking.  I just have to go into PHPR and find the “powersite real estate cms v1.0″ template and load it in PHPR and then configure my FTP and DB settings and then whoolah, Generate my code and publish.  It’s all done.  Of course there might be some tweaks here and there that have to be put in place to meet the clients specific needs but for the most part the remainder of my work will be spent editing the CSS for the project to match the clients design.  This is a much welcomed find for me!  I am planning on finding out how portable these templates are as well by making a few available on here for download and get some feedback from others in the community.